@aiscene/shared 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/es/baseDB.mjs +109 -0
- package/dist/es/build/copy-static.mjs +31 -0
- package/dist/es/build/rspack-config.mjs +4 -0
- package/dist/es/cli/cli-runner.mjs +140 -0
- package/dist/es/cli/index.mjs +2 -0
- package/dist/es/common.mjs +37 -0
- package/dist/es/constants/example-code.mjs +223 -0
- package/dist/es/constants/index.mjs +23 -0
- package/dist/es/env/basic.mjs +6 -0
- package/dist/es/env/constants.mjs +70 -0
- package/dist/es/env/global-config-manager.mjs +94 -0
- package/dist/es/env/helper.mjs +43 -0
- package/dist/es/env/index.mjs +5 -0
- package/dist/es/env/init-debug.mjs +18 -0
- package/dist/es/env/model-config-manager.mjs +79 -0
- package/dist/es/env/parse-model-config.mjs +132 -0
- package/dist/es/env/types.mjs +211 -0
- package/dist/es/env/utils.mjs +26 -0
- package/dist/es/extractor/constants.mjs +2 -0
- package/dist/es/extractor/debug.mjs +6 -0
- package/dist/es/extractor/dom-util.mjs +92 -0
- package/dist/es/extractor/index.mjs +5 -0
- package/dist/es/extractor/locator.mjs +250 -0
- package/dist/es/extractor/tree.mjs +78 -0
- package/dist/es/extractor/util.mjs +245 -0
- package/dist/es/extractor/web-extractor.mjs +303 -0
- package/dist/es/img/box-select.mjs +824 -0
- package/dist/es/img/canvas-fallback.mjs +238 -0
- package/dist/es/img/get-photon.mjs +45 -0
- package/dist/es/img/get-sharp.mjs +11 -0
- package/dist/es/img/index.mjs +4 -0
- package/dist/es/img/info.mjs +29 -0
- package/dist/es/img/transform.mjs +275 -0
- package/dist/es/index.mjs +4 -0
- package/dist/es/logger.mjs +70 -0
- package/dist/es/mcp/base-server.mjs +281 -0
- package/dist/es/mcp/base-tools.mjs +91 -0
- package/dist/es/mcp/chrome-path.mjs +35 -0
- package/dist/es/mcp/index.mjs +7 -0
- package/dist/es/mcp/inject-report-html-plugin.mjs +53 -0
- package/dist/es/mcp/launcher-helper.mjs +52 -0
- package/dist/es/mcp/tool-generator.mjs +297 -0
- package/dist/es/mcp/types.mjs +3 -0
- package/dist/es/node/fs.mjs +44 -0
- package/dist/es/node/index.mjs +2 -0
- package/dist/es/node/port.mjs +24 -0
- package/dist/es/polyfills/async-hooks.mjs +2 -0
- package/dist/es/polyfills/index.mjs +1 -0
- package/dist/es/types/index.mjs +3 -0
- package/dist/es/us-keyboard-layout.mjs +1414 -0
- package/dist/es/us-keyboard-layout.mjs.LICENSE.txt +5 -0
- package/dist/es/utils.mjs +77 -0
- package/dist/es/zod-schema-utils.mjs +54 -0
- package/dist/lib/baseDB.js +149 -0
- package/dist/lib/build/copy-static.js +79 -0
- package/dist/lib/build/rspack-config.js +38 -0
- package/dist/lib/cli/cli-runner.js +196 -0
- package/dist/lib/cli/index.js +48 -0
- package/dist/lib/common.js +93 -0
- package/dist/lib/constants/example-code.js +260 -0
- package/dist/lib/constants/index.js +96 -0
- package/dist/lib/env/basic.js +40 -0
- package/dist/lib/env/constants.js +113 -0
- package/dist/lib/env/global-config-manager.js +128 -0
- package/dist/lib/env/helper.js +80 -0
- package/dist/lib/env/index.js +90 -0
- package/dist/lib/env/init-debug.js +52 -0
- package/dist/lib/env/model-config-manager.js +113 -0
- package/dist/lib/env/parse-model-config.js +178 -0
- package/dist/lib/env/types.js +518 -0
- package/dist/lib/env/utils.js +72 -0
- package/dist/lib/extractor/constants.js +42 -0
- package/dist/lib/extractor/debug.js +12 -0
- package/dist/lib/extractor/dom-util.js +153 -0
- package/dist/lib/extractor/index.js +81 -0
- package/dist/lib/extractor/locator.js +296 -0
- package/dist/lib/extractor/tree.js +124 -0
- package/dist/lib/extractor/util.js +336 -0
- package/dist/lib/extractor/web-extractor.js +349 -0
- package/dist/lib/img/box-select.js +875 -0
- package/dist/lib/img/canvas-fallback.js +305 -0
- package/dist/lib/img/get-photon.js +82 -0
- package/dist/lib/img/get-sharp.js +45 -0
- package/dist/lib/img/index.js +92 -0
- package/dist/lib/img/info.js +83 -0
- package/dist/lib/img/transform.js +364 -0
- package/dist/lib/index.js +47 -0
- package/dist/lib/logger.js +123 -0
- package/dist/lib/mcp/base-server.js +331 -0
- package/dist/lib/mcp/base-tools.js +125 -0
- package/dist/lib/mcp/chrome-path.js +72 -0
- package/dist/lib/mcp/index.js +100 -0
- package/dist/lib/mcp/inject-report-html-plugin.js +98 -0
- package/dist/lib/mcp/launcher-helper.js +86 -0
- package/dist/lib/mcp/tool-generator.js +334 -0
- package/dist/lib/mcp/types.js +40 -0
- package/dist/lib/node/fs.js +97 -0
- package/dist/lib/node/index.js +65 -0
- package/dist/lib/node/port.js +61 -0
- package/dist/lib/polyfills/async-hooks.js +36 -0
- package/dist/lib/polyfills/index.js +58 -0
- package/dist/lib/types/index.js +37 -0
- package/dist/lib/us-keyboard-layout.js +1457 -0
- package/dist/lib/us-keyboard-layout.js.LICENSE.txt +5 -0
- package/dist/lib/utils.js +156 -0
- package/dist/lib/zod-schema-utils.js +97 -0
- package/dist/types/baseDB.d.ts +25 -0
- package/dist/types/build/copy-static.d.ts +31 -0
- package/dist/types/build/rspack-config.d.ts +8 -0
- package/dist/types/cli/cli-runner.d.ts +14 -0
- package/dist/types/cli/index.d.ts +2 -0
- package/dist/types/common.d.ts +12 -0
- package/dist/types/constants/example-code.d.ts +2 -0
- package/dist/types/constants/index.d.ts +21 -0
- package/dist/types/env/basic.d.ts +6 -0
- package/dist/types/env/constants.d.ts +40 -0
- package/dist/types/env/global-config-manager.d.ts +32 -0
- package/dist/types/env/helper.d.ts +4 -0
- package/dist/types/env/index.d.ts +4 -0
- package/dist/types/env/init-debug.d.ts +1 -0
- package/dist/types/env/model-config-manager.d.ts +25 -0
- package/dist/types/env/parse-model-config.d.ts +31 -0
- package/dist/types/env/types.d.ts +309 -0
- package/dist/types/env/utils.d.ts +38 -0
- package/dist/types/extractor/constants.d.ts +1 -0
- package/dist/types/extractor/debug.d.ts +1 -0
- package/dist/types/extractor/dom-util.d.ts +56 -0
- package/dist/types/extractor/index.d.ts +32 -0
- package/dist/types/extractor/locator.d.ts +9 -0
- package/dist/types/extractor/tree.d.ts +6 -0
- package/dist/types/extractor/util.d.ts +47 -0
- package/dist/types/extractor/web-extractor.d.ts +19 -0
- package/dist/types/img/box-select.d.ts +26 -0
- package/dist/types/img/canvas-fallback.d.ts +105 -0
- package/dist/types/img/get-photon.d.ts +19 -0
- package/dist/types/img/get-sharp.d.ts +3 -0
- package/dist/types/img/index.d.ts +3 -0
- package/dist/types/img/info.d.ts +29 -0
- package/dist/types/img/transform.d.ts +98 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/logger.d.ts +6 -0
- package/dist/types/mcp/base-server.d.ts +93 -0
- package/dist/types/mcp/base-tools.d.ts +79 -0
- package/dist/types/mcp/chrome-path.d.ts +2 -0
- package/dist/types/mcp/index.d.ts +7 -0
- package/dist/types/mcp/inject-report-html-plugin.d.ts +18 -0
- package/dist/types/mcp/launcher-helper.d.ts +94 -0
- package/dist/types/mcp/tool-generator.d.ts +10 -0
- package/dist/types/mcp/types.d.ts +103 -0
- package/dist/types/node/fs.d.ts +15 -0
- package/dist/types/node/index.d.ts +2 -0
- package/dist/types/node/port.d.ts +8 -0
- package/dist/types/polyfills/async-hooks.d.ts +6 -0
- package/dist/types/polyfills/index.d.ts +4 -0
- package/dist/types/types/index.d.ts +34 -0
- package/dist/types/us-keyboard-layout.d.ts +32 -0
- package/dist/types/utils.d.ts +37 -0
- package/dist/types/zod-schema-utils.d.ts +23 -0
- package/package.json +121 -0
- package/src/baseDB.ts +158 -0
- package/src/build/copy-static.ts +68 -0
- package/src/build/rspack-config.ts +12 -0
- package/src/cli/cli-runner.ts +224 -0
- package/src/cli/index.ts +8 -0
- package/src/common.ts +67 -0
- package/src/constants/example-code.ts +223 -0
- package/src/constants/index.ts +29 -0
- package/src/env/basic.ts +12 -0
- package/src/env/constants.ts +234 -0
- package/src/env/global-config-manager.ts +191 -0
- package/src/env/helper.ts +58 -0
- package/src/env/index.ts +4 -0
- package/src/env/init-debug.ts +34 -0
- package/src/env/model-config-manager.ts +149 -0
- package/src/env/parse-model-config.ts +294 -0
- package/src/env/types.ts +533 -0
- package/src/env/utils.ts +89 -0
- package/src/extractor/constants.ts +5 -0
- package/src/extractor/debug.ts +10 -0
- package/src/extractor/dom-util.ts +226 -0
- package/src/extractor/index.ts +48 -0
- package/src/extractor/locator.ts +469 -0
- package/src/extractor/tree.ts +179 -0
- package/src/extractor/util.ts +482 -0
- package/src/extractor/web-extractor.ts +481 -0
- package/src/img/box-select.ts +588 -0
- package/src/img/canvas-fallback.ts +393 -0
- package/src/img/get-photon.ts +108 -0
- package/src/img/get-sharp.ts +18 -0
- package/src/img/index.ts +25 -0
- package/src/img/info.ts +75 -0
- package/src/img/transform.ts +553 -0
- package/src/index.ts +8 -0
- package/src/logger.ts +107 -0
- package/src/mcp/base-server.ts +502 -0
- package/src/mcp/base-tools.ts +185 -0
- package/src/mcp/chrome-path.ts +48 -0
- package/src/mcp/index.ts +7 -0
- package/src/mcp/inject-report-html-plugin.ts +119 -0
- package/src/mcp/launcher-helper.ts +200 -0
- package/src/mcp/tool-generator.ts +429 -0
- package/src/mcp/types.ts +112 -0
- package/src/node/fs.ts +84 -0
- package/src/node/index.ts +2 -0
- package/src/node/port.ts +37 -0
- package/src/polyfills/async-hooks.ts +6 -0
- package/src/polyfills/index.ts +4 -0
- package/src/types/index.ts +52 -0
- package/src/us-keyboard-layout.ts +723 -0
- package/src/utils.ts +166 -0
- package/src/zod-schema-utils.ts +133 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_MODEL_CONFIG_KEYS,
|
|
3
|
+
type DEFAULT_MODEL_CONFIG_KEYS_LEGACY,
|
|
4
|
+
INSIGHT_MODEL_CONFIG_KEYS,
|
|
5
|
+
PLANNING_MODEL_CONFIG_KEYS,
|
|
6
|
+
} from './constants';
|
|
7
|
+
import {
|
|
8
|
+
type IModelConfig,
|
|
9
|
+
MIDSCENE_MODEL_FAMILY,
|
|
10
|
+
MIDSCENE_OPENAI_HTTP_PROXY,
|
|
11
|
+
MIDSCENE_OPENAI_INIT_CONFIG_JSON,
|
|
12
|
+
MIDSCENE_OPENAI_SOCKS_PROXY,
|
|
13
|
+
MIDSCENE_USE_DOUBAO_VISION,
|
|
14
|
+
MIDSCENE_USE_GEMINI,
|
|
15
|
+
MIDSCENE_USE_QWEN3_VL,
|
|
16
|
+
MIDSCENE_USE_QWEN_VL,
|
|
17
|
+
MIDSCENE_USE_VLM_UI_TARS,
|
|
18
|
+
MODEL_FAMILY_VALUES,
|
|
19
|
+
OPENAI_API_KEY,
|
|
20
|
+
OPENAI_BASE_URL,
|
|
21
|
+
type TIntent,
|
|
22
|
+
type TModelFamily,
|
|
23
|
+
UITarsModelVersion,
|
|
24
|
+
} from './types';
|
|
25
|
+
|
|
26
|
+
import { getDebug } from '../logger';
|
|
27
|
+
import { assert } from '../utils';
|
|
28
|
+
import { maskConfig, parseJson } from './helper';
|
|
29
|
+
import { initDebugConfig } from './init-debug';
|
|
30
|
+
|
|
31
|
+
type TModelConfigKeys =
|
|
32
|
+
| typeof INSIGHT_MODEL_CONFIG_KEYS
|
|
33
|
+
| typeof PLANNING_MODEL_CONFIG_KEYS
|
|
34
|
+
| typeof DEFAULT_MODEL_CONFIG_KEYS
|
|
35
|
+
| typeof DEFAULT_MODEL_CONFIG_KEYS_LEGACY;
|
|
36
|
+
|
|
37
|
+
const KEYS_MAP: Record<TIntent, TModelConfigKeys> = {
|
|
38
|
+
insight: INSIGHT_MODEL_CONFIG_KEYS,
|
|
39
|
+
planning: PLANNING_MODEL_CONFIG_KEYS,
|
|
40
|
+
default: DEFAULT_MODEL_CONFIG_KEYS,
|
|
41
|
+
} as const;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Get UI-TARS model version from model family
|
|
45
|
+
* @param modelFamily - The model family value
|
|
46
|
+
* @returns UITarsModelVersion if the model family is a UI-TARS variant, undefined otherwise
|
|
47
|
+
*/
|
|
48
|
+
export const getUITarsModelVersion = (
|
|
49
|
+
modelFamily?: TModelFamily,
|
|
50
|
+
): UITarsModelVersion | undefined => {
|
|
51
|
+
// UI-TARS variants with version handling
|
|
52
|
+
if (modelFamily === 'vlm-ui-tars') {
|
|
53
|
+
return UITarsModelVersion.V1_0;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (
|
|
57
|
+
modelFamily === 'vlm-ui-tars-doubao' ||
|
|
58
|
+
modelFamily === 'vlm-ui-tars-doubao-1.5'
|
|
59
|
+
) {
|
|
60
|
+
return UITarsModelVersion.DOUBAO_1_5_20B;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return undefined;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Validate model family value
|
|
68
|
+
* @param modelFamily - The model family value to validate
|
|
69
|
+
* @throws Error if the model family is invalid
|
|
70
|
+
*/
|
|
71
|
+
export const validateModelFamily = (modelFamily?: TModelFamily): void => {
|
|
72
|
+
if (modelFamily && !MODEL_FAMILY_VALUES.includes(modelFamily as any)) {
|
|
73
|
+
throw new Error(`Invalid MIDSCENE_MODEL_FAMILY value: ${modelFamily}`);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Convert legacy environment variables to model family
|
|
79
|
+
* @param provider - Environment variable provider (e.g., process.env)
|
|
80
|
+
* @returns The corresponding model family value, or undefined if no legacy config is found
|
|
81
|
+
*/
|
|
82
|
+
export const legacyConfigToModelFamily = (
|
|
83
|
+
provider: Record<string, string | undefined>,
|
|
84
|
+
): TModelFamily | undefined => {
|
|
85
|
+
const isDoubao = provider[MIDSCENE_USE_DOUBAO_VISION];
|
|
86
|
+
const isQwen = provider[MIDSCENE_USE_QWEN_VL];
|
|
87
|
+
const isQwen3 = provider[MIDSCENE_USE_QWEN3_VL];
|
|
88
|
+
const isUiTars = provider[MIDSCENE_USE_VLM_UI_TARS];
|
|
89
|
+
const isGemini = provider[MIDSCENE_USE_GEMINI];
|
|
90
|
+
|
|
91
|
+
const enabledModes = [
|
|
92
|
+
isDoubao && MIDSCENE_USE_DOUBAO_VISION,
|
|
93
|
+
isQwen && MIDSCENE_USE_QWEN_VL,
|
|
94
|
+
isQwen3 && MIDSCENE_USE_QWEN3_VL,
|
|
95
|
+
isUiTars && MIDSCENE_USE_VLM_UI_TARS,
|
|
96
|
+
isGemini && MIDSCENE_USE_GEMINI,
|
|
97
|
+
].filter(Boolean);
|
|
98
|
+
|
|
99
|
+
if (enabledModes.length > 1) {
|
|
100
|
+
throw new Error(
|
|
101
|
+
`Only one vision mode can be enabled at a time. Currently enabled modes: ${enabledModes.join(', ')}. Please disable all but one mode.`,
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Simple modes that directly map to model family
|
|
106
|
+
if (isQwen3) return 'qwen3-vl';
|
|
107
|
+
if (isQwen) return 'qwen2.5-vl';
|
|
108
|
+
if (isDoubao) return 'doubao-vision';
|
|
109
|
+
if (isGemini) return 'gemini';
|
|
110
|
+
|
|
111
|
+
// UI-TARS with version detection
|
|
112
|
+
if (isUiTars) {
|
|
113
|
+
if (isUiTars === '1') {
|
|
114
|
+
return 'vlm-ui-tars';
|
|
115
|
+
} else if (isUiTars === 'DOUBAO' || isUiTars === 'DOUBAO-1.5') {
|
|
116
|
+
return 'vlm-ui-tars-doubao-1.5';
|
|
117
|
+
} else {
|
|
118
|
+
// Handle other UI-TARS versions
|
|
119
|
+
return 'vlm-ui-tars-doubao';
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return undefined;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const getModelDescription = (
|
|
127
|
+
modelFamily: TModelFamily | undefined,
|
|
128
|
+
uiTarsModelVersion: UITarsModelVersion | undefined,
|
|
129
|
+
) => {
|
|
130
|
+
if (uiTarsModelVersion) {
|
|
131
|
+
return `UI-TARS=${uiTarsModelVersion}`;
|
|
132
|
+
}
|
|
133
|
+
if (modelFamily) {
|
|
134
|
+
return `${modelFamily} mode`;
|
|
135
|
+
}
|
|
136
|
+
return '';
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Parse OpenAI SDK config
|
|
141
|
+
*/
|
|
142
|
+
export const parseOpenaiSdkConfig = ({
|
|
143
|
+
keys,
|
|
144
|
+
provider,
|
|
145
|
+
useLegacyLogic = false,
|
|
146
|
+
}: {
|
|
147
|
+
keys: TModelConfigKeys;
|
|
148
|
+
provider: Record<string, string | undefined>;
|
|
149
|
+
useLegacyLogic?: boolean;
|
|
150
|
+
}): IModelConfig => {
|
|
151
|
+
initDebugConfig();
|
|
152
|
+
const debugLog = getDebug('ai:config');
|
|
153
|
+
|
|
154
|
+
debugLog('enter parseOpenaiSdkConfig with keys:', keys);
|
|
155
|
+
|
|
156
|
+
const legacyAPIKey = useLegacyLogic ? provider[OPENAI_API_KEY] : undefined;
|
|
157
|
+
const legacyBaseURL = useLegacyLogic ? provider[OPENAI_BASE_URL] : undefined;
|
|
158
|
+
const legacySocksProxy = useLegacyLogic
|
|
159
|
+
? provider[MIDSCENE_OPENAI_SOCKS_PROXY]
|
|
160
|
+
: undefined;
|
|
161
|
+
const legacyHttpProxy = useLegacyLogic
|
|
162
|
+
? provider[MIDSCENE_OPENAI_HTTP_PROXY]
|
|
163
|
+
: undefined;
|
|
164
|
+
const legacyOpenaiExtraConfig = useLegacyLogic
|
|
165
|
+
? provider[MIDSCENE_OPENAI_INIT_CONFIG_JSON]
|
|
166
|
+
: undefined;
|
|
167
|
+
const legacyModelFamily = useLegacyLogic
|
|
168
|
+
? legacyConfigToModelFamily(provider)
|
|
169
|
+
: undefined;
|
|
170
|
+
|
|
171
|
+
const modelFamilyRaw = provider[keys.modelFamily] || legacyModelFamily;
|
|
172
|
+
const openaiApiKey: string | undefined =
|
|
173
|
+
provider[keys.openaiApiKey] || legacyAPIKey;
|
|
174
|
+
const openaiBaseURL: string | undefined =
|
|
175
|
+
provider[keys.openaiBaseURL] || legacyBaseURL;
|
|
176
|
+
const socksProxy: string | undefined =
|
|
177
|
+
provider[keys.socksProxy] || legacySocksProxy;
|
|
178
|
+
const httpProxy: string | undefined =
|
|
179
|
+
provider[keys.httpProxy] || legacyHttpProxy;
|
|
180
|
+
const modelName: string | undefined = provider[keys.modelName];
|
|
181
|
+
const openaiExtraConfigStr: string | undefined =
|
|
182
|
+
provider[keys.openaiExtraConfig];
|
|
183
|
+
const openaiExtraConfig = parseJson(
|
|
184
|
+
keys.openaiExtraConfig,
|
|
185
|
+
openaiExtraConfigStr || legacyOpenaiExtraConfig,
|
|
186
|
+
);
|
|
187
|
+
const extraBodyStr: string | undefined = provider[keys.extraBody];
|
|
188
|
+
const extraBody = parseJson(keys.extraBody, extraBodyStr);
|
|
189
|
+
const temperature = provider[keys.temperature]
|
|
190
|
+
? Number(provider[keys.temperature])
|
|
191
|
+
: 0;
|
|
192
|
+
|
|
193
|
+
const modelFamily = modelFamilyRaw as unknown as TModelFamily;
|
|
194
|
+
validateModelFamily(modelFamily);
|
|
195
|
+
const uiTarsModelVersion = getUITarsModelVersion(modelFamily);
|
|
196
|
+
|
|
197
|
+
const modelDescription = getModelDescription(modelFamily, uiTarsModelVersion);
|
|
198
|
+
|
|
199
|
+
return {
|
|
200
|
+
socksProxy,
|
|
201
|
+
httpProxy,
|
|
202
|
+
openaiBaseURL,
|
|
203
|
+
openaiApiKey,
|
|
204
|
+
openaiExtraConfig,
|
|
205
|
+
extraBody,
|
|
206
|
+
modelFamily,
|
|
207
|
+
uiTarsModelVersion,
|
|
208
|
+
modelName: modelName!,
|
|
209
|
+
modelDescription,
|
|
210
|
+
intent: '-' as any,
|
|
211
|
+
timeout: provider[keys.timeout]
|
|
212
|
+
? Number(provider[keys.timeout])
|
|
213
|
+
: undefined,
|
|
214
|
+
temperature,
|
|
215
|
+
retryCount: (() => {
|
|
216
|
+
if (!provider[keys.retryCount]) return 1;
|
|
217
|
+
const val = Number(provider[keys.retryCount]);
|
|
218
|
+
if (!Number.isFinite(val)) return 1;
|
|
219
|
+
if (val < 0)
|
|
220
|
+
throw new Error(`${keys.retryCount} must be non-negative, got ${val}`);
|
|
221
|
+
return val;
|
|
222
|
+
})(),
|
|
223
|
+
retryInterval: (() => {
|
|
224
|
+
if (!provider[keys.retryInterval]) return 2000;
|
|
225
|
+
const val = Number(provider[keys.retryInterval]);
|
|
226
|
+
if (!Number.isFinite(val)) return 2000;
|
|
227
|
+
if (val < 0)
|
|
228
|
+
throw new Error(
|
|
229
|
+
`${keys.retryInterval} must be non-negative, got ${val}`,
|
|
230
|
+
);
|
|
231
|
+
return val;
|
|
232
|
+
})(),
|
|
233
|
+
reasoningEffort: provider[keys.reasoningEffort]?.trim() || undefined,
|
|
234
|
+
reasoningEnabled: (() => {
|
|
235
|
+
const val = provider[keys.reasoningEnabled]?.trim()?.toLowerCase();
|
|
236
|
+
if (val === 'true' || val === '1') return true;
|
|
237
|
+
if (val === 'false' || val === '0') return false;
|
|
238
|
+
return undefined;
|
|
239
|
+
})(),
|
|
240
|
+
reasoningBudget: (() => {
|
|
241
|
+
const val = provider[keys.reasoningBudget]?.trim();
|
|
242
|
+
if (!val) return undefined;
|
|
243
|
+
const num = Number(val);
|
|
244
|
+
return Number.isFinite(num) ? num : undefined;
|
|
245
|
+
})(),
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
export const decideModelConfigFromIntentConfig = (
|
|
250
|
+
intent: TIntent,
|
|
251
|
+
configMap: Record<string, string | undefined>,
|
|
252
|
+
): IModelConfig | undefined => {
|
|
253
|
+
const debugLog = getDebug('ai:config');
|
|
254
|
+
|
|
255
|
+
debugLog(
|
|
256
|
+
'will decideModelConfig base on agent.modelConfig()',
|
|
257
|
+
intent,
|
|
258
|
+
maskConfig(configMap),
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
const keysForFn = KEYS_MAP[intent];
|
|
262
|
+
const modelName = configMap[keysForFn.modelName];
|
|
263
|
+
|
|
264
|
+
if (!modelName) {
|
|
265
|
+
debugLog('no modelName found for intent', intent);
|
|
266
|
+
return undefined;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
const finalResult = parseOpenaiSdkConfig({
|
|
270
|
+
keys: keysForFn,
|
|
271
|
+
provider: configMap,
|
|
272
|
+
useLegacyLogic: intent === 'default',
|
|
273
|
+
});
|
|
274
|
+
finalResult.intent = intent;
|
|
275
|
+
|
|
276
|
+
debugLog(
|
|
277
|
+
'decideModelConfig result by agent.modelConfig() with intent',
|
|
278
|
+
intent,
|
|
279
|
+
maskConfig({ ...finalResult }),
|
|
280
|
+
);
|
|
281
|
+
|
|
282
|
+
assert(
|
|
283
|
+
finalResult.openaiBaseURL,
|
|
284
|
+
`failed to get base URL of model (intent=${intent}). See https://midscenejs.com/model-strategy`,
|
|
285
|
+
);
|
|
286
|
+
|
|
287
|
+
if (!finalResult.modelName) {
|
|
288
|
+
console.warn(
|
|
289
|
+
`modelName is not set for intent ${intent}, this may cause unexpected behavior. See https://midscenejs.com/model-strategy`,
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return finalResult;
|
|
294
|
+
};
|