324 lines
11 KiB
TypeScript
324 lines
11 KiB
TypeScript
/*
|
||
* 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 { getFixedSingleAgentSchema } from '../src/utils/model/get-fixed-single-agent-schema';
|
||
import {
|
||
ModelFormComponent,
|
||
ModelFormVoidFieldComponent,
|
||
} from '../src/constant/model-form-component';
|
||
|
||
vi.mock('@coze-studio/bot-detail-store', () => ({}));
|
||
|
||
vi.mock('@coze-arch/i18n', () => ({
|
||
I18n: {
|
||
t: () => 'mockedI18n',
|
||
},
|
||
}));
|
||
|
||
describe('get-fixed-single-agent-schema', () => {
|
||
it('should fixed correctly', () => {
|
||
const prevSchema = {
|
||
type: 'object',
|
||
properties: {
|
||
1: {
|
||
type: 'void',
|
||
'x-decorator':
|
||
ModelFormVoidFieldComponent.ModelFormGenerationDiversityGroupItem,
|
||
'x-decorator-props': {
|
||
title: '生成多样性',
|
||
},
|
||
'x-index': 1,
|
||
properties: {
|
||
temperature: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.SliderInputNumber,
|
||
'x-component-props': {
|
||
max: 2,
|
||
min: 0,
|
||
step: 0.01,
|
||
decimalPlaces: 2,
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: '回复随机性',
|
||
popoverContent:
|
||
'即 Temperature,较高的 Temperature 会让模型生成更多样和创新的文本,反之生成内容会更加保守且类似于训练数据。',
|
||
},
|
||
'x-index': 1,
|
||
},
|
||
top_p: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.SliderInputNumber,
|
||
'x-component-props': {
|
||
max: 1,
|
||
min: 0,
|
||
step: 0.01,
|
||
decimalPlaces: 2,
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: 'Top P',
|
||
popoverContent:
|
||
'设定Top p概率阈值,模型在生成文本时只从概率超过阈值的词汇中选择,从而控制文本的多样性',
|
||
},
|
||
'x-index': 2,
|
||
},
|
||
frequency_penalty: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.SliderInputNumber,
|
||
'x-component-props': {
|
||
max: 2,
|
||
min: -2,
|
||
step: 0.01,
|
||
decimalPlaces: 2,
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: '重复词汇惩罚',
|
||
popoverContent:
|
||
'当该值为正时,它会降低已出现词汇的重复率,进而提高模型输出词汇的多样性',
|
||
},
|
||
'x-index': 3,
|
||
},
|
||
presence_penalty: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.SliderInputNumber,
|
||
'x-component-props': {
|
||
max: 2,
|
||
min: -2,
|
||
step: 0.01,
|
||
decimalPlaces: 2,
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: '存在惩罚',
|
||
popoverContent:
|
||
'减少已提及内容的重复,增加新主题和概念的引入,促进内容的多元化。',
|
||
},
|
||
'x-index': 4,
|
||
},
|
||
},
|
||
},
|
||
2: {
|
||
type: 'void',
|
||
'x-decorator': ModelFormVoidFieldComponent.ModelFormGroupItem,
|
||
'x-decorator-props': {
|
||
title: '输入及输出长度',
|
||
},
|
||
'x-index': 2,
|
||
properties: {
|
||
max_tokens: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.SliderInputNumber,
|
||
'x-component-props': {
|
||
max: 16384,
|
||
min: 1,
|
||
step: 1,
|
||
decimalPlaces: 0,
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: '最大回复长度',
|
||
popoverContent:
|
||
'可控制模型回复的最多 Token 数量,以满足不同场景和需求。通常 100 Tokens 约等于 60 个中文汉字。',
|
||
},
|
||
'x-index': 1,
|
||
},
|
||
response_format: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.RadioButton,
|
||
'x-component-props': {
|
||
type: 'button',
|
||
options: [
|
||
{
|
||
label: '文本',
|
||
value: 0,
|
||
},
|
||
{
|
||
label: 'Markdown',
|
||
value: 1,
|
||
},
|
||
],
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: '输出格式',
|
||
popoverContent:
|
||
'文本: 使用普通文本格式回复Markdown: 将强制模型使用Markdown格式输出回复\nJSON: 将强制模型使用 JSON 格式输出回复',
|
||
},
|
||
'x-index': 2,
|
||
},
|
||
},
|
||
},
|
||
},
|
||
};
|
||
const res = getFixedSingleAgentSchema(prevSchema);
|
||
|
||
expect(res).toStrictEqual({
|
||
type: 'object',
|
||
properties: {
|
||
1: {
|
||
type: 'void',
|
||
'x-decorator':
|
||
ModelFormVoidFieldComponent.ModelFormGenerationDiversityGroupItem,
|
||
'x-decorator-props': {
|
||
title: '生成多样性',
|
||
},
|
||
'x-index': 1,
|
||
properties: {
|
||
temperature: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.SliderInputNumber,
|
||
'x-component-props': {
|
||
max: 2,
|
||
min: 0,
|
||
step: 0.01,
|
||
decimalPlaces: 2,
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: '回复随机性',
|
||
popoverContent:
|
||
'即 Temperature,较高的 Temperature 会让模型生成更多样和创新的文本,反之生成内容会更加保守且类似于训练数据。',
|
||
},
|
||
'x-index': 1,
|
||
},
|
||
top_p: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.SliderInputNumber,
|
||
'x-component-props': {
|
||
max: 1,
|
||
min: 0,
|
||
step: 0.01,
|
||
decimalPlaces: 2,
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: 'Top P',
|
||
popoverContent:
|
||
'设定Top p概率阈值,模型在生成文本时只从概率超过阈值的词汇中选择,从而控制文本的多样性',
|
||
},
|
||
'x-index': 2,
|
||
},
|
||
frequency_penalty: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.SliderInputNumber,
|
||
'x-component-props': {
|
||
max: 2,
|
||
min: -2,
|
||
step: 0.01,
|
||
decimalPlaces: 2,
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: '重复词汇惩罚',
|
||
popoverContent:
|
||
'当该值为正时,它会降低已出现词汇的重复率,进而提高模型输出词汇的多样性',
|
||
},
|
||
'x-index': 3,
|
||
},
|
||
presence_penalty: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.SliderInputNumber,
|
||
'x-component-props': {
|
||
max: 2,
|
||
min: -2,
|
||
step: 0.01,
|
||
decimalPlaces: 2,
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: '存在惩罚',
|
||
popoverContent:
|
||
'减少已提及内容的重复,增加新主题和概念的引入,促进内容的多元化。',
|
||
},
|
||
'x-index': 4,
|
||
},
|
||
},
|
||
},
|
||
2: {
|
||
type: 'void',
|
||
'x-decorator': ModelFormVoidFieldComponent.ModelFormGroupItem,
|
||
'x-decorator-props': {
|
||
title: '输入及输出长度',
|
||
},
|
||
'x-index': 2,
|
||
properties: {
|
||
HistoryRound: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.SliderInputNumber,
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-component-props': {
|
||
step: 1,
|
||
max: 100,
|
||
min: 0,
|
||
decimalPlaces: 0,
|
||
},
|
||
'x-decorator-props': {
|
||
label: 'mockedI18n',
|
||
popoverContent: 'mockedI18n',
|
||
},
|
||
// Put it up front.
|
||
'x-index': 0,
|
||
},
|
||
max_tokens: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.SliderInputNumber,
|
||
'x-component-props': {
|
||
max: 16384,
|
||
min: 1,
|
||
step: 1,
|
||
decimalPlaces: 0,
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: '最大回复长度',
|
||
popoverContent:
|
||
'可控制模型回复的最多 Token 数量,以满足不同场景和需求。通常 100 Tokens 约等于 60 个中文汉字。',
|
||
},
|
||
'x-index': 1,
|
||
},
|
||
response_format: {
|
||
type: 'number',
|
||
'x-component': ModelFormComponent.RadioButton,
|
||
'x-component-props': {
|
||
type: 'button',
|
||
options: [
|
||
{
|
||
label: '文本',
|
||
value: 0,
|
||
},
|
||
{
|
||
label: 'Markdown',
|
||
value: 1,
|
||
},
|
||
],
|
||
},
|
||
'x-decorator': ModelFormComponent.ModelFormItem,
|
||
'x-decorator-props': {
|
||
label: '输出格式',
|
||
popoverContent:
|
||
'文本: 使用普通文本格式回复Markdown: 将强制模型使用Markdown格式输出回复\nJSON: 将强制模型使用 JSON 格式输出回复',
|
||
},
|
||
'x-index': 2,
|
||
},
|
||
},
|
||
},
|
||
},
|
||
});
|
||
});
|
||
});
|