feat: manually mirror opencoze's code from bytedance

Change-Id: I09a73aadda978ad9511264a756b2ce51f5761adf
This commit is contained in:
fanlv
2025-07-20 17:36:12 +08:00
commit 890153324f
14811 changed files with 1923430 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export const primitiveExhaustiveCheck = (_: never) => 0;
export const recordExhaustiveCheck = (_: Record<string, never>) => 0;

View File

@@ -0,0 +1,102 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
type Model,
ModelFuncConfigType,
ModelFuncConfigStatus,
} from '@coze-arch/bot-api/developer_api';
export type ModelCapabilityConfig = {
[key in ModelFuncConfigType]: [
configStatus: ModelFuncConfigStatus,
modelName: string,
];
};
export type TGetModelCapabilityConfig = (params: {
modelIds: string[];
getModelById: (id: string) => Model | undefined;
}) => ModelCapabilityConfig;
// 模型能力配置的 fallback没有配置的能力按支持处理
export const defaultModelCapConfig = Object.values(ModelFuncConfigType).reduce(
(res, type) => ({
...res,
[type]: [
ModelFuncConfigStatus.FullSupport,
'',
] satisfies ModelCapabilityConfig[ModelFuncConfigType],
}),
{},
) as ModelCapabilityConfig;
export const mergeModelFuncConfigStatus = (
...values: ModelFuncConfigStatus[]
) => Math.max(...values);
const mergeModelCapabilityConfig = (
src: ModelCapabilityConfig,
target: Model['func_config'],
targetName: string,
) =>
target
? Object.entries(target).reduce<ModelCapabilityConfig>(
(merged, [key, status]) => {
// 未配置的能力视为完全支持
const [preStatus, preName] = merged[
key as unknown as ModelFuncConfigType
] ?? [ModelFuncConfigStatus.FullSupport, []];
const mergedStatus = mergeModelFuncConfigStatus(preStatus, status);
return {
...merged,
[key]: [
mergedStatus,
mergedStatus === preStatus ? preName : targetName,
],
};
},
src,
)
: src;
export const getMultiAgentModelCapabilityConfig: TGetModelCapabilityConfig = ({
getModelById,
modelIds,
}) =>
Array.from(modelIds).reduce((res, modelId) => {
const model = getModelById(modelId);
if (model?.func_config) {
return mergeModelCapabilityConfig(
res,
model.func_config,
model.name ?? '',
);
}
return res;
}, defaultModelCapConfig);
export const getSingleAgentModelCapabilityConfig: TGetModelCapabilityConfig = ({
getModelById,
modelIds,
}) => {
const model = getModelById(modelIds.at(0) ?? '');
return mergeModelCapabilityConfig(
defaultModelCapConfig,
model?.func_config,
model?.name ?? '',
);
};

View File

@@ -0,0 +1,47 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ModelParamType } from '@coze-arch/bot-api/developer_api';
import { primitiveExhaustiveCheck } from '../exhaustive-check';
export interface ConvertedModelValueTypeMap {
[ModelParamType.Boolean]: boolean;
[ModelParamType.Float]: number;
[ModelParamType.Int]: number;
[ModelParamType.String]: string;
}
export function convertModelValueType(
value: string,
type: ModelParamType,
): ConvertedModelValueTypeMap[ModelParamType] {
if (type === ModelParamType.Boolean) {
return value === 'true';
}
if (type === ModelParamType.String) {
return value;
}
if (type === ModelParamType.Float || type === ModelParamType.Int) {
return Number(value);
}
// 理论上不走这里
primitiveExhaustiveCheck(type);
return value;
}

View File

@@ -0,0 +1,36 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { type Model } from '@coze-arch/bot-api/developer_api';
export const getModelById = ({
onlineModelList,
offlineModelMap,
id,
}: {
onlineModelList: Model[];
offlineModelMap: Record<string, Model>;
id: string;
}) => {
if (!id) {
return;
}
const expectSpecialModel = offlineModelMap[id];
if (expectSpecialModel) {
return expectSpecialModel;
}
return onlineModelList.find(model => String(model.model_type) === id);
};