@godscene/shared 1.7.11

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.
Files changed (236) hide show
  1. package/README.md +9 -0
  2. package/dist/es/baseDB.mjs +109 -0
  3. package/dist/es/cli/cli-args.mjs +95 -0
  4. package/dist/es/cli/cli-error.mjs +24 -0
  5. package/dist/es/cli/cli-runner.mjs +122 -0
  6. package/dist/es/cli/index.mjs +4 -0
  7. package/dist/es/common.mjs +37 -0
  8. package/dist/es/constants/example-code.mjs +227 -0
  9. package/dist/es/constants/index.mjs +124 -0
  10. package/dist/es/env/basic.mjs +6 -0
  11. package/dist/es/env/constants.mjs +110 -0
  12. package/dist/es/env/global-config-manager.mjs +94 -0
  13. package/dist/es/env/helper.mjs +43 -0
  14. package/dist/es/env/index.mjs +5 -0
  15. package/dist/es/env/init-debug.mjs +18 -0
  16. package/dist/es/env/model-config-manager.mjs +79 -0
  17. package/dist/es/env/parse-model-config.mjs +165 -0
  18. package/dist/es/env/types.mjs +232 -0
  19. package/dist/es/env/utils.mjs +18 -0
  20. package/dist/es/extractor/constants.mjs +2 -0
  21. package/dist/es/extractor/cs_postmessage.mjs +61 -0
  22. package/dist/es/extractor/customLocator.mjs +641 -0
  23. package/dist/es/extractor/debug.mjs +6 -0
  24. package/dist/es/extractor/dom-util.mjs +96 -0
  25. package/dist/es/extractor/index.mjs +5 -0
  26. package/dist/es/extractor/locator.mjs +250 -0
  27. package/dist/es/extractor/tree.mjs +78 -0
  28. package/dist/es/extractor/util.mjs +245 -0
  29. package/dist/es/extractor/web-extractor.mjs +393 -0
  30. package/dist/es/img/box-select.mjs +824 -0
  31. package/dist/es/img/canvas-fallback.mjs +238 -0
  32. package/dist/es/img/get-photon.mjs +45 -0
  33. package/dist/es/img/get-sharp.mjs +11 -0
  34. package/dist/es/img/index.mjs +4 -0
  35. package/dist/es/img/info.mjs +35 -0
  36. package/dist/es/img/transform.mjs +275 -0
  37. package/dist/es/index.mjs +2 -0
  38. package/dist/es/key-alias-utils.mjs +19 -0
  39. package/dist/es/logger.mjs +64 -0
  40. package/dist/es/mcp/base-server.mjs +282 -0
  41. package/dist/es/mcp/base-tools.mjs +159 -0
  42. package/dist/es/mcp/chrome-path.mjs +35 -0
  43. package/dist/es/mcp/cli-report-session.mjs +78 -0
  44. package/dist/es/mcp/error-formatter.mjs +19 -0
  45. package/dist/es/mcp/index.mjs +9 -0
  46. package/dist/es/mcp/init-arg-utils.mjs +38 -0
  47. package/dist/es/mcp/inject-report-html-plugin.mjs +53 -0
  48. package/dist/es/mcp/launcher-helper.mjs +52 -0
  49. package/dist/es/mcp/tool-generator.mjs +419 -0
  50. package/dist/es/mcp/types.mjs +3 -0
  51. package/dist/es/node/fs.mjs +44 -0
  52. package/dist/es/node/index.mjs +2 -0
  53. package/dist/es/node/port.mjs +24 -0
  54. package/dist/es/polyfills/async-hooks.mjs +2 -0
  55. package/dist/es/polyfills/index.mjs +1 -0
  56. package/dist/es/types/index.mjs +3 -0
  57. package/dist/es/us-keyboard-layout.mjs +1414 -0
  58. package/dist/es/us-keyboard-layout.mjs.LICENSE.txt +5 -0
  59. package/dist/es/utils.mjs +72 -0
  60. package/dist/es/zod-schema-utils.mjs +54 -0
  61. package/dist/lib/baseDB.js +149 -0
  62. package/dist/lib/cli/cli-args.js +138 -0
  63. package/dist/lib/cli/cli-error.js +61 -0
  64. package/dist/lib/cli/cli-runner.js +181 -0
  65. package/dist/lib/cli/index.js +53 -0
  66. package/dist/lib/common.js +93 -0
  67. package/dist/lib/constants/example-code.js +264 -0
  68. package/dist/lib/constants/index.js +221 -0
  69. package/dist/lib/env/basic.js +40 -0
  70. package/dist/lib/env/constants.js +153 -0
  71. package/dist/lib/env/global-config-manager.js +128 -0
  72. package/dist/lib/env/helper.js +80 -0
  73. package/dist/lib/env/index.js +90 -0
  74. package/dist/lib/env/init-debug.js +52 -0
  75. package/dist/lib/env/model-config-manager.js +113 -0
  76. package/dist/lib/env/parse-model-config.js +211 -0
  77. package/dist/lib/env/types.js +572 -0
  78. package/dist/lib/env/utils.js +61 -0
  79. package/dist/lib/extractor/constants.js +42 -0
  80. package/dist/lib/extractor/cs_postmessage.js +98 -0
  81. package/dist/lib/extractor/customLocator.js +693 -0
  82. package/dist/lib/extractor/debug.js +12 -0
  83. package/dist/lib/extractor/dom-util.js +157 -0
  84. package/dist/lib/extractor/index.js +87 -0
  85. package/dist/lib/extractor/locator.js +296 -0
  86. package/dist/lib/extractor/tree.js +124 -0
  87. package/dist/lib/extractor/util.js +336 -0
  88. package/dist/lib/extractor/web-extractor.js +442 -0
  89. package/dist/lib/img/box-select.js +875 -0
  90. package/dist/lib/img/canvas-fallback.js +305 -0
  91. package/dist/lib/img/get-photon.js +82 -0
  92. package/dist/lib/img/get-sharp.js +45 -0
  93. package/dist/lib/img/index.js +95 -0
  94. package/dist/lib/img/info.js +92 -0
  95. package/dist/lib/img/transform.js +364 -0
  96. package/dist/lib/index.js +36 -0
  97. package/dist/lib/key-alias-utils.js +62 -0
  98. package/dist/lib/logger.js +114 -0
  99. package/dist/lib/mcp/base-server.js +332 -0
  100. package/dist/lib/mcp/base-tools.js +193 -0
  101. package/dist/lib/mcp/chrome-path.js +72 -0
  102. package/dist/lib/mcp/cli-report-session.js +121 -0
  103. package/dist/lib/mcp/error-formatter.js +53 -0
  104. package/dist/lib/mcp/index.js +114 -0
  105. package/dist/lib/mcp/init-arg-utils.js +78 -0
  106. package/dist/lib/mcp/inject-report-html-plugin.js +98 -0
  107. package/dist/lib/mcp/launcher-helper.js +86 -0
  108. package/dist/lib/mcp/tool-generator.js +456 -0
  109. package/dist/lib/mcp/types.js +40 -0
  110. package/dist/lib/node/fs.js +97 -0
  111. package/dist/lib/node/index.js +65 -0
  112. package/dist/lib/node/port.js +61 -0
  113. package/dist/lib/polyfills/async-hooks.js +36 -0
  114. package/dist/lib/polyfills/index.js +58 -0
  115. package/dist/lib/types/index.js +37 -0
  116. package/dist/lib/us-keyboard-layout.js +1457 -0
  117. package/dist/lib/us-keyboard-layout.js.LICENSE.txt +5 -0
  118. package/dist/lib/utils.js +148 -0
  119. package/dist/lib/zod-schema-utils.js +97 -0
  120. package/dist/types/baseDB.d.ts +25 -0
  121. package/dist/types/cli/cli-args.d.ts +8 -0
  122. package/dist/types/cli/cli-error.d.ts +5 -0
  123. package/dist/types/cli/cli-runner.d.ts +19 -0
  124. package/dist/types/cli/index.d.ts +4 -0
  125. package/dist/types/common.d.ts +12 -0
  126. package/dist/types/constants/example-code.d.ts +2 -0
  127. package/dist/types/constants/index.d.ts +61 -0
  128. package/dist/types/env/basic.d.ts +6 -0
  129. package/dist/types/env/constants.d.ts +50 -0
  130. package/dist/types/env/global-config-manager.d.ts +32 -0
  131. package/dist/types/env/helper.d.ts +4 -0
  132. package/dist/types/env/index.d.ts +4 -0
  133. package/dist/types/env/init-debug.d.ts +1 -0
  134. package/dist/types/env/model-config-manager.d.ts +25 -0
  135. package/dist/types/env/parse-model-config.d.ts +31 -0
  136. package/dist/types/env/types.d.ts +339 -0
  137. package/dist/types/env/utils.d.ts +7 -0
  138. package/dist/types/extractor/constants.d.ts +1 -0
  139. package/dist/types/extractor/cs_postmessage.d.ts +2 -0
  140. package/dist/types/extractor/customLocator.d.ts +69 -0
  141. package/dist/types/extractor/debug.d.ts +1 -0
  142. package/dist/types/extractor/dom-util.d.ts +57 -0
  143. package/dist/types/extractor/index.d.ts +33 -0
  144. package/dist/types/extractor/locator.d.ts +9 -0
  145. package/dist/types/extractor/tree.d.ts +6 -0
  146. package/dist/types/extractor/util.d.ts +47 -0
  147. package/dist/types/extractor/web-extractor.d.ts +24 -0
  148. package/dist/types/img/box-select.d.ts +26 -0
  149. package/dist/types/img/canvas-fallback.d.ts +105 -0
  150. package/dist/types/img/get-photon.d.ts +19 -0
  151. package/dist/types/img/get-sharp.d.ts +3 -0
  152. package/dist/types/img/index.d.ts +3 -0
  153. package/dist/types/img/info.d.ts +34 -0
  154. package/dist/types/img/transform.d.ts +98 -0
  155. package/dist/types/index.d.ts +2 -0
  156. package/dist/types/key-alias-utils.d.ts +9 -0
  157. package/dist/types/logger.d.ts +5 -0
  158. package/dist/types/mcp/base-server.d.ts +93 -0
  159. package/dist/types/mcp/base-tools.d.ts +148 -0
  160. package/dist/types/mcp/chrome-path.d.ts +2 -0
  161. package/dist/types/mcp/cli-report-session.d.ts +12 -0
  162. package/dist/types/mcp/error-formatter.d.ts +12 -0
  163. package/dist/types/mcp/index.d.ts +9 -0
  164. package/dist/types/mcp/init-arg-utils.d.ts +13 -0
  165. package/dist/types/mcp/inject-report-html-plugin.d.ts +18 -0
  166. package/dist/types/mcp/launcher-helper.d.ts +94 -0
  167. package/dist/types/mcp/tool-generator.d.ts +10 -0
  168. package/dist/types/mcp/types.d.ts +113 -0
  169. package/dist/types/node/fs.d.ts +15 -0
  170. package/dist/types/node/index.d.ts +2 -0
  171. package/dist/types/node/port.d.ts +8 -0
  172. package/dist/types/polyfills/async-hooks.d.ts +6 -0
  173. package/dist/types/polyfills/index.d.ts +4 -0
  174. package/dist/types/types/index.d.ts +36 -0
  175. package/dist/types/us-keyboard-layout.d.ts +32 -0
  176. package/dist/types/utils.d.ts +34 -0
  177. package/dist/types/zod-schema-utils.d.ts +23 -0
  178. package/package.json +125 -0
  179. package/src/baseDB.ts +158 -0
  180. package/src/cli/cli-args.ts +173 -0
  181. package/src/cli/cli-error.ts +24 -0
  182. package/src/cli/cli-runner.ts +230 -0
  183. package/src/cli/index.ts +4 -0
  184. package/src/common.ts +67 -0
  185. package/src/constants/example-code.ts +227 -0
  186. package/src/constants/index.ts +139 -0
  187. package/src/env/basic.ts +12 -0
  188. package/src/env/constants.ts +303 -0
  189. package/src/env/global-config-manager.ts +191 -0
  190. package/src/env/helper.ts +58 -0
  191. package/src/env/index.ts +4 -0
  192. package/src/env/init-debug.ts +34 -0
  193. package/src/env/model-config-manager.ts +149 -0
  194. package/src/env/parse-model-config.ts +357 -0
  195. package/src/env/types.ts +583 -0
  196. package/src/env/utils.ts +39 -0
  197. package/src/extractor/constants.ts +5 -0
  198. package/src/extractor/cs_postmessage.ts +136 -0
  199. package/src/extractor/customLocator.ts +1245 -0
  200. package/src/extractor/debug.ts +10 -0
  201. package/src/extractor/dom-util.ts +231 -0
  202. package/src/extractor/index.ts +50 -0
  203. package/src/extractor/locator.ts +469 -0
  204. package/src/extractor/tree.ts +179 -0
  205. package/src/extractor/util.ts +482 -0
  206. package/src/extractor/web-extractor.ts +617 -0
  207. package/src/img/box-select.ts +588 -0
  208. package/src/img/canvas-fallback.ts +393 -0
  209. package/src/img/get-photon.ts +108 -0
  210. package/src/img/get-sharp.ts +18 -0
  211. package/src/img/index.ts +27 -0
  212. package/src/img/info.ts +102 -0
  213. package/src/img/transform.ts +553 -0
  214. package/src/index.ts +1 -0
  215. package/src/key-alias-utils.ts +23 -0
  216. package/src/logger.ts +96 -0
  217. package/src/mcp/base-server.ts +500 -0
  218. package/src/mcp/base-tools.ts +391 -0
  219. package/src/mcp/chrome-path.ts +48 -0
  220. package/src/mcp/cli-report-session.ts +130 -0
  221. package/src/mcp/error-formatter.ts +52 -0
  222. package/src/mcp/index.ts +9 -0
  223. package/src/mcp/init-arg-utils.ts +105 -0
  224. package/src/mcp/inject-report-html-plugin.ts +119 -0
  225. package/src/mcp/launcher-helper.ts +200 -0
  226. package/src/mcp/tool-generator.ts +658 -0
  227. package/src/mcp/types.ts +131 -0
  228. package/src/node/fs.ts +84 -0
  229. package/src/node/index.ts +2 -0
  230. package/src/node/port.ts +37 -0
  231. package/src/polyfills/async-hooks.ts +6 -0
  232. package/src/polyfills/index.ts +4 -0
  233. package/src/types/index.ts +54 -0
  234. package/src/us-keyboard-layout.ts +723 -0
  235. package/src/utils.ts +149 -0
  236. package/src/zod-schema-utils.ts +133 -0
@@ -0,0 +1,357 @@
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
+
28
+ import { assert } from '../utils';
29
+ import { maskConfig, parseJson } from './helper';
30
+ import { initDebugConfig } from './init-debug';
31
+
32
+ declare const __VERSION__: string | undefined;
33
+
34
+ const MODEL_CONFIG_DOC_URL = 'https://midscenejs.com/model-common-config.html';
35
+
36
+ const getCurrentVersion = (): string => {
37
+ if (typeof __VERSION__ !== 'undefined' && __VERSION__) {
38
+ return __VERSION__;
39
+ }
40
+
41
+ return 'unknown';
42
+ };
43
+
44
+ const getInvalidModelFamilyMessage = (modelFamily: TModelFamily): string =>
45
+ `Invalid MIDSCENE_MODEL_FAMILY value: ${modelFamily}. Current version v${getCurrentVersion()} accepts the following model families: ${MODEL_FAMILY_VALUES.join(', ')}. You can also visit ${MODEL_CONFIG_DOC_URL} for the latest configuration information.`;
46
+
47
+ type TModelConfigKeys =
48
+ | typeof INSIGHT_MODEL_CONFIG_KEYS
49
+ | typeof PLANNING_MODEL_CONFIG_KEYS
50
+ | typeof DEFAULT_MODEL_CONFIG_KEYS
51
+ | typeof DEFAULT_MODEL_CONFIG_KEYS_LEGACY;
52
+
53
+ const KEYS_MAP: Record<TIntent, TModelConfigKeys> = {
54
+ insight: INSIGHT_MODEL_CONFIG_KEYS,
55
+ planning: PLANNING_MODEL_CONFIG_KEYS,
56
+ default: DEFAULT_MODEL_CONFIG_KEYS,
57
+ } as const;
58
+
59
+ /**
60
+ * Get UI-TARS model version from model family
61
+ * @param modelFamily - The model family value
62
+ * @returns UITarsModelVersion if the model family is a UI-TARS variant, undefined otherwise
63
+ */
64
+ export const getUITarsModelVersion = (
65
+ modelFamily?: TModelFamily,
66
+ ): UITarsModelVersion | undefined => {
67
+ // UI-TARS variants with version handling
68
+ if (modelFamily === 'vlm-ui-tars') {
69
+ return UITarsModelVersion.V1_0;
70
+ }
71
+
72
+ if (
73
+ modelFamily === 'vlm-ui-tars-doubao' ||
74
+ modelFamily === 'vlm-ui-tars-doubao-1.5'
75
+ ) {
76
+ return UITarsModelVersion.DOUBAO_1_5_20B;
77
+ }
78
+
79
+ return undefined;
80
+ };
81
+
82
+ /**
83
+ * Validate model family value
84
+ * @param modelFamily - The model family value to validate
85
+ * @throws Error if the model family is invalid
86
+ */
87
+ export const validateModelFamily = (modelFamily?: TModelFamily): void => {
88
+ if (modelFamily && !MODEL_FAMILY_VALUES.includes(modelFamily as any)) {
89
+ throw new Error(getInvalidModelFamilyMessage(modelFamily));
90
+ }
91
+ };
92
+
93
+ /**
94
+ * Convert legacy environment variables to model family
95
+ * @param provider - Environment variable provider (e.g., process.env)
96
+ * @returns The corresponding model family value, or undefined if no legacy config is found
97
+ */
98
+ export const legacyConfigToModelFamily = (
99
+ provider: Record<string, string | undefined>,
100
+ ): TModelFamily | undefined => {
101
+ const isDoubao = provider[MIDSCENE_USE_DOUBAO_VISION];
102
+ const isQwen = provider[MIDSCENE_USE_QWEN_VL];
103
+ const isQwen3 = provider[MIDSCENE_USE_QWEN3_VL];
104
+ const isUiTars = provider[MIDSCENE_USE_VLM_UI_TARS];
105
+ const isGemini = provider[MIDSCENE_USE_GEMINI];
106
+
107
+ const enabledModes = [
108
+ isDoubao && MIDSCENE_USE_DOUBAO_VISION,
109
+ isQwen && MIDSCENE_USE_QWEN_VL,
110
+ isQwen3 && MIDSCENE_USE_QWEN3_VL,
111
+ isUiTars && MIDSCENE_USE_VLM_UI_TARS,
112
+ isGemini && MIDSCENE_USE_GEMINI,
113
+ ].filter(Boolean);
114
+
115
+ if (enabledModes.length > 1) {
116
+ throw new Error(
117
+ `Only one vision mode can be enabled at a time. Currently enabled modes: ${enabledModes.join(', ')}. Please disable all but one mode.`,
118
+ );
119
+ }
120
+
121
+ // Simple modes that directly map to model family
122
+ if (isQwen3) return 'qwen3-vl';
123
+ if (isQwen) return 'qwen2.5-vl';
124
+ if (isDoubao) return 'doubao-vision';
125
+ if (isGemini) return 'gemini';
126
+
127
+ // UI-TARS with version detection
128
+ if (isUiTars) {
129
+ if (isUiTars === '1') {
130
+ return 'vlm-ui-tars';
131
+ } else if (isUiTars === 'DOUBAO' || isUiTars === 'DOUBAO-1.5') {
132
+ return 'vlm-ui-tars-doubao-1.5';
133
+ } else {
134
+ // Handle other UI-TARS versions
135
+ return 'vlm-ui-tars-doubao';
136
+ }
137
+ }
138
+
139
+ return undefined;
140
+ };
141
+
142
+ const getModelDescription = (
143
+ modelFamily: TModelFamily | undefined,
144
+ uiTarsModelVersion: UITarsModelVersion | undefined,
145
+ ) => {
146
+ if (uiTarsModelVersion) {
147
+ return `UI-TARS=${uiTarsModelVersion}`;
148
+ }
149
+ if (modelFamily) {
150
+ return `${modelFamily} mode`;
151
+ }
152
+ return '';
153
+ };
154
+
155
+ const normalizeOpenaiExtraConfig = (
156
+ config: unknown,
157
+ ): Record<string, unknown> | undefined => {
158
+ if (!config || typeof config !== 'object' || Array.isArray(config)) {
159
+ return undefined;
160
+ }
161
+
162
+ const { defaultHeaders, extra_headers, extraHeaders, ...rest } =
163
+ config as Record<string, unknown>;
164
+
165
+ // Priority: defaultHeaders > extra_headers > extraHeaders
166
+ const headers = defaultHeaders ?? extra_headers ?? extraHeaders;
167
+
168
+ if (headers !== undefined) {
169
+ return { ...rest, defaultHeaders: headers };
170
+ }
171
+
172
+ return rest;
173
+ };
174
+
175
+ /**
176
+ * Parse OpenAI SDK config
177
+ */
178
+ export const parseOpenaiSdkConfig = ({
179
+ keys,
180
+ provider,
181
+ useLegacyLogic = false,
182
+ }: {
183
+ keys: TModelConfigKeys;
184
+ provider: Record<string, string | undefined>;
185
+ useLegacyLogic?: boolean;
186
+ }): IModelConfig => {
187
+ initDebugConfig();
188
+ const debugLog = getDebug('ai:config');
189
+
190
+ debugLog('enter parseOpenaiSdkConfig with keys:', keys);
191
+
192
+ const legacyAPIKey = useLegacyLogic ? provider[OPENAI_API_KEY] : undefined;
193
+ const legacyBaseURL = useLegacyLogic ? provider[OPENAI_BASE_URL] : undefined;
194
+ const legacySocksProxy = useLegacyLogic
195
+ ? provider[MIDSCENE_OPENAI_SOCKS_PROXY]
196
+ : undefined;
197
+ const legacyHttpProxy = useLegacyLogic
198
+ ? provider[MIDSCENE_OPENAI_HTTP_PROXY]
199
+ : undefined;
200
+ const legacyOpenaiExtraConfig = useLegacyLogic
201
+ ? provider[MIDSCENE_OPENAI_INIT_CONFIG_JSON]
202
+ : undefined;
203
+ const legacyModelFamily = useLegacyLogic
204
+ ? legacyConfigToModelFamily(provider)
205
+ : undefined;
206
+
207
+ const modelFamilyRaw = provider[keys.modelFamily] || legacyModelFamily;
208
+ const openaiApiKey: string | undefined =
209
+ provider[keys.openaiApiKey] || legacyAPIKey;
210
+ const openaiBaseURL: string | undefined =
211
+ provider[keys.openaiBaseURL] || legacyBaseURL;
212
+ const socksProxy: string | undefined =
213
+ provider[keys.socksProxy] || legacySocksProxy;
214
+ const httpProxy: string | undefined =
215
+ provider[keys.httpProxy] || legacyHttpProxy;
216
+ const modelName: string | undefined = provider[keys.modelName];
217
+
218
+ // 友互通
219
+ const yht_domain: string | undefined = provider[keys.yht_domain];
220
+ const yht_access_token: string | undefined = provider[keys.yht_access_token];
221
+ const yht_model: string | undefined = provider[keys.yht_model];
222
+ const yht_base_url: string | undefined = provider[keys.yht_base_url];
223
+ const yht_chat_type: string | undefined = provider[keys.yht_chat_type];
224
+ const yht_model_category: string | undefined =
225
+ provider[keys.yht_model_category];
226
+ const yht_stream: string | undefined = provider[keys.yht_stream];
227
+ const yht_temperature: string | undefined = provider[keys.yht_temperature];
228
+ const yht_top_p: string | undefined = provider[keys.yht_top_p];
229
+ const yht_trace_id: string | undefined = provider[keys.yht_trace_id];
230
+
231
+ const openaiExtraConfigStr: string | undefined =
232
+ provider[keys.openaiExtraConfig];
233
+ const openaiExtraConfig = parseJson(
234
+ keys.openaiExtraConfig,
235
+ openaiExtraConfigStr || legacyOpenaiExtraConfig,
236
+ );
237
+ const extraBodyStr: string | undefined = provider[keys.extraBody];
238
+ const extraBody = parseJson(keys.extraBody, extraBodyStr);
239
+ const temperature = provider[keys.temperature]
240
+ ? Number(provider[keys.temperature])
241
+ : 0;
242
+
243
+ const modelFamily = modelFamilyRaw as unknown as TModelFamily;
244
+ validateModelFamily(modelFamily);
245
+ const uiTarsModelVersion = getUITarsModelVersion(modelFamily);
246
+
247
+ const modelDescription = getModelDescription(modelFamily, uiTarsModelVersion);
248
+
249
+ return {
250
+
251
+ // 友互通
252
+ yht_domain,
253
+ yht_access_token,
254
+ yht_model,
255
+ yht_base_url,
256
+ yht_chat_type,
257
+ yht_model_category,
258
+ yht_stream,
259
+ yht_temperature,
260
+ yht_top_p,
261
+ yht_trace_id,
262
+
263
+ socksProxy,
264
+ httpProxy,
265
+ openaiBaseURL,
266
+ openaiApiKey,
267
+ openaiExtraConfig: normalizeOpenaiExtraConfig(openaiExtraConfig),
268
+ extraBody,
269
+ modelFamily,
270
+ uiTarsModelVersion,
271
+ modelName: modelName!,
272
+ modelDescription,
273
+ intent: '-' as any,
274
+ timeout: provider[keys.timeout]
275
+ ? Number(provider[keys.timeout])
276
+ : undefined,
277
+ temperature,
278
+ retryCount: (() => {
279
+ if (!provider[keys.retryCount]) return 1;
280
+ const val = Number(provider[keys.retryCount]);
281
+ if (!Number.isFinite(val)) return 1;
282
+ if (val < 0)
283
+ throw new Error(`${keys.retryCount} must be non-negative, got ${val}`);
284
+ return val;
285
+ })(),
286
+ retryInterval: (() => {
287
+ if (!provider[keys.retryInterval]) return 2000;
288
+ const val = Number(provider[keys.retryInterval]);
289
+ if (!Number.isFinite(val)) return 2000;
290
+ if (val < 0)
291
+ throw new Error(
292
+ `${keys.retryInterval} must be non-negative, got ${val}`,
293
+ );
294
+ return val;
295
+ })(),
296
+ reasoningEffort: provider[keys.reasoningEffort]?.trim() || undefined,
297
+ reasoningEnabled: (() => {
298
+ const val = provider[keys.reasoningEnabled]?.trim()?.toLowerCase();
299
+ if (val === 'true' || val === '1') return true;
300
+ if (val === 'false' || val === '0') return false;
301
+ return undefined;
302
+ })(),
303
+ reasoningBudget: (() => {
304
+ const val = provider[keys.reasoningBudget]?.trim();
305
+ if (!val) return undefined;
306
+ const num = Number(val);
307
+ return Number.isFinite(num) ? num : undefined;
308
+ })(),
309
+ };
310
+ };
311
+
312
+ export const decideModelConfigFromIntentConfig = (
313
+ intent: TIntent,
314
+ configMap: Record<string, string | undefined>,
315
+ ): IModelConfig | undefined => {
316
+ const debugLog = getDebug('ai:config');
317
+
318
+ debugLog(
319
+ 'will decideModelConfig base on agent.modelConfig()',
320
+ intent,
321
+ maskConfig(configMap),
322
+ );
323
+
324
+ const keysForFn = KEYS_MAP[intent];
325
+ const modelName = configMap[keysForFn.modelName];
326
+
327
+ if (!modelName) {
328
+ debugLog('no modelName found for intent', intent);
329
+ return undefined;
330
+ }
331
+
332
+ const finalResult = parseOpenaiSdkConfig({
333
+ keys: keysForFn,
334
+ provider: configMap,
335
+ useLegacyLogic: intent === 'default',
336
+ });
337
+ finalResult.intent = intent;
338
+
339
+ debugLog(
340
+ 'decideModelConfig result by agent.modelConfig() with intent',
341
+ intent,
342
+ maskConfig({ ...finalResult }),
343
+ );
344
+
345
+ assert(
346
+ finalResult.openaiBaseURL,
347
+ `failed to get base URL of model (intent=${intent}). See https://midscenejs.com/model-strategy`,
348
+ );
349
+
350
+ if (!finalResult.modelName) {
351
+ console.warn(
352
+ `modelName is not set for intent ${intent}, this may cause unexpected behavior. See https://midscenejs.com/model-strategy`,
353
+ );
354
+ }
355
+
356
+ return finalResult;
357
+ };