@midscene/core 1.16.5 → 1.17.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.
Files changed (252) hide show
  1. package/dist/es/agent/agent.mjs +11 -11
  2. package/dist/es/agent/agent.mjs.map +1 -1
  3. package/dist/es/agent/insight.mjs.map +1 -1
  4. package/dist/es/agent/tasks.mjs +72 -39
  5. package/dist/es/agent/tasks.mjs.map +1 -1
  6. package/dist/es/agent/utils.mjs +1 -1
  7. package/dist/es/ai-model/connectivity/run-connectivity-test.mjs +27 -22
  8. package/dist/es/ai-model/connectivity/run-connectivity-test.mjs.map +1 -1
  9. package/dist/es/ai-model/index.mjs +2 -2
  10. package/dist/es/ai-model/model-adapter/resolve.mjs +4 -2
  11. package/dist/es/ai-model/model-adapter/resolve.mjs.map +1 -1
  12. package/dist/es/ai-model/models/jev/adapter.mjs +6 -110
  13. package/dist/es/ai-model/models/jev/adapter.mjs.map +1 -1
  14. package/dist/es/ai-model/models/jev/boolean.mjs +48 -0
  15. package/dist/es/ai-model/models/jev/boolean.mjs.map +1 -0
  16. package/dist/es/ai-model/models/jev/image.mjs +39 -36
  17. package/dist/es/ai-model/models/jev/image.mjs.map +1 -1
  18. package/dist/es/ai-model/models/jev/locate.mjs +48 -0
  19. package/dist/es/ai-model/models/jev/locate.mjs.map +1 -0
  20. package/dist/es/ai-model/models/jev/planning-action.mjs +35 -0
  21. package/dist/es/ai-model/models/jev/planning-action.mjs.map +1 -0
  22. package/dist/es/ai-model/models/jev/planning-context.mjs +38 -0
  23. package/dist/es/ai-model/models/jev/planning-context.mjs.map +1 -0
  24. package/dist/es/ai-model/models/jev/planning-decision.mjs +68 -0
  25. package/dist/es/ai-model/models/jev/planning-decision.mjs.map +1 -0
  26. package/dist/es/ai-model/models/jev/planning.mjs +19 -131
  27. package/dist/es/ai-model/models/jev/planning.mjs.map +1 -1
  28. package/dist/es/ai-model/models/model-fallback.mjs +28 -0
  29. package/dist/es/ai-model/models/model-fallback.mjs.map +1 -0
  30. package/dist/es/ai-model/service-caller/call-ai.mjs +27 -24
  31. package/dist/es/ai-model/service-caller/call-ai.mjs.map +1 -1
  32. package/dist/es/ai-model/service-caller/codex/call-codex.mjs.map +1 -1
  33. package/dist/es/ai-model/service-caller/index.mjs +2 -2
  34. package/dist/es/ai-model/service-caller/model-call.mjs +3 -3
  35. package/dist/es/ai-model/service-caller/model-call.mjs.map +1 -1
  36. package/dist/es/ai-model/service-caller/openai/call-openai.mjs +1 -1
  37. package/dist/es/ai-model/service-caller/openai/call-openai.mjs.map +1 -1
  38. package/dist/es/ai-model/service-caller/openai/chat-completion/chat-completion.mjs.map +1 -1
  39. package/dist/es/ai-model/service-caller/openai/openai-client.mjs.map +1 -1
  40. package/dist/es/ai-model/service-caller/openai/responses/responses.mjs.map +1 -1
  41. package/dist/es/ai-model/service-caller/system-one/call-system-one.mjs +69 -0
  42. package/dist/es/ai-model/service-caller/system-one/call-system-one.mjs.map +1 -0
  43. package/dist/es/ai-model/service-caller/system-one/index.mjs +3 -0
  44. package/dist/es/ai-model/service-caller/system-one/prepare-system-one.mjs +44 -0
  45. package/dist/es/ai-model/service-caller/system-one/prepare-system-one.mjs.map +1 -0
  46. package/dist/es/ai-model/service-caller/system-one/schema.mjs +32 -0
  47. package/dist/es/ai-model/service-caller/system-one/schema.mjs.map +1 -0
  48. package/dist/es/ai-model/service-caller/system-one/utils.mjs +34 -0
  49. package/dist/es/ai-model/service-caller/system-one/utils.mjs.map +1 -0
  50. package/dist/es/ai-model/service-caller/utils.mjs +2 -2
  51. package/dist/es/ai-model/service-caller/utils.mjs.map +1 -1
  52. package/dist/es/ai-model/shared/model-locate-result/factory.mjs +7 -3
  53. package/dist/es/ai-model/shared/model-locate-result/factory.mjs.map +1 -1
  54. package/dist/es/ai-model/shared/model-locate-result/pixel-mapper.mjs +10 -4
  55. package/dist/es/ai-model/shared/model-locate-result/pixel-mapper.mjs.map +1 -1
  56. package/dist/es/ai-model/shared/model-locate-result/types.mjs.map +1 -1
  57. package/dist/es/ai-model/shared/model-locate-result/validation.mjs +4 -0
  58. package/dist/es/ai-model/shared/model-locate-result/validation.mjs.map +1 -1
  59. package/dist/es/ai-model/workflows/grounding/locate.mjs +2 -2
  60. package/dist/es/ai-model/workflows/grounding/locate.mjs.map +1 -1
  61. package/dist/es/ai-model/workflows/grounding/section-locate.mjs +2 -2
  62. package/dist/es/ai-model/workflows/grounding/section-locate.mjs.map +1 -1
  63. package/dist/es/ai-model/workflows/insight/boolean.mjs +1 -1
  64. package/dist/es/ai-model/workflows/insight/boolean.mjs.map +1 -1
  65. package/dist/es/ai-model/workflows/insight/extraction.mjs +3 -3
  66. package/dist/es/ai-model/workflows/insight/extraction.mjs.map +1 -1
  67. package/dist/es/ai-model/workflows/planning/standard-planning.mjs +4 -3
  68. package/dist/es/ai-model/workflows/planning/standard-planning.mjs.map +1 -1
  69. package/dist/es/ai-model/workflows/recorder-generation/playwright.mjs +2 -2
  70. package/dist/es/ai-model/workflows/recorder-generation/playwright.mjs.map +1 -1
  71. package/dist/es/ai-model/workflows/recorder-generation/yaml.mjs +2 -2
  72. package/dist/es/ai-model/workflows/recorder-generation/yaml.mjs.map +1 -1
  73. package/dist/es/device/index.mjs +7 -0
  74. package/dist/es/device/index.mjs.map +1 -1
  75. package/dist/es/report-html-template.mjs +1 -1
  76. package/dist/es/service/index.mjs +2 -1
  77. package/dist/es/service/index.mjs.map +1 -1
  78. package/dist/es/types.mjs.map +1 -1
  79. package/dist/es/utils.mjs +1 -1
  80. package/dist/lib/agent/agent.js +11 -11
  81. package/dist/lib/agent/agent.js.map +1 -1
  82. package/dist/lib/agent/insight.js.map +1 -1
  83. package/dist/lib/agent/tasks.js +72 -39
  84. package/dist/lib/agent/tasks.js.map +1 -1
  85. package/dist/lib/agent/utils.js +1 -1
  86. package/dist/lib/ai-model/connectivity/run-connectivity-test.js +27 -22
  87. package/dist/lib/ai-model/connectivity/run-connectivity-test.js.map +1 -1
  88. package/dist/lib/ai-model/index.js +6 -3
  89. package/dist/lib/ai-model/model-adapter/resolve.js +4 -2
  90. package/dist/lib/ai-model/model-adapter/resolve.js.map +1 -1
  91. package/dist/lib/ai-model/models/jev/adapter.js +6 -110
  92. package/dist/lib/ai-model/models/jev/adapter.js.map +1 -1
  93. package/dist/lib/ai-model/models/jev/boolean.js +82 -0
  94. package/dist/lib/ai-model/models/jev/boolean.js.map +1 -0
  95. package/dist/lib/ai-model/models/jev/image.js +41 -35
  96. package/dist/lib/ai-model/models/jev/image.js.map +1 -1
  97. package/dist/lib/ai-model/models/jev/locate.js +82 -0
  98. package/dist/lib/ai-model/models/jev/locate.js.map +1 -0
  99. package/dist/lib/ai-model/models/jev/planning-action.js +69 -0
  100. package/dist/lib/ai-model/models/jev/planning-action.js.map +1 -0
  101. package/dist/lib/ai-model/models/jev/planning-context.js +72 -0
  102. package/dist/lib/ai-model/models/jev/planning-context.js.map +1 -0
  103. package/dist/lib/ai-model/models/jev/planning-decision.js +102 -0
  104. package/dist/lib/ai-model/models/jev/planning-decision.js.map +1 -0
  105. package/dist/lib/ai-model/models/jev/planning.js +19 -131
  106. package/dist/lib/ai-model/models/jev/planning.js.map +1 -1
  107. package/dist/lib/ai-model/models/{task-routing.js → model-fallback.js} +11 -11
  108. package/dist/lib/ai-model/models/model-fallback.js.map +1 -0
  109. package/dist/lib/ai-model/service-caller/call-ai.js +32 -26
  110. package/dist/lib/ai-model/service-caller/call-ai.js.map +1 -1
  111. package/dist/lib/ai-model/service-caller/codex/call-codex.js.map +1 -1
  112. package/dist/lib/ai-model/service-caller/index.js +6 -3
  113. package/dist/lib/ai-model/service-caller/model-call.js +2 -2
  114. package/dist/lib/ai-model/service-caller/model-call.js.map +1 -1
  115. package/dist/lib/ai-model/service-caller/openai/call-openai.js +1 -1
  116. package/dist/lib/ai-model/service-caller/openai/call-openai.js.map +1 -1
  117. package/dist/lib/ai-model/service-caller/openai/chat-completion/chat-completion.js.map +1 -1
  118. package/dist/lib/ai-model/service-caller/openai/openai-client.js.map +1 -1
  119. package/dist/lib/ai-model/service-caller/openai/responses/responses.js.map +1 -1
  120. package/dist/lib/ai-model/service-caller/system-one/call-system-one.js +103 -0
  121. package/dist/lib/ai-model/service-caller/system-one/call-system-one.js.map +1 -0
  122. package/dist/lib/ai-model/service-caller/system-one/index.js +42 -0
  123. package/dist/lib/ai-model/service-caller/system-one/index.js.map +1 -0
  124. package/dist/lib/ai-model/service-caller/system-one/prepare-system-one.js +78 -0
  125. package/dist/lib/ai-model/service-caller/system-one/prepare-system-one.js.map +1 -0
  126. package/dist/lib/ai-model/service-caller/system-one/schema.js +69 -0
  127. package/dist/lib/ai-model/service-caller/system-one/schema.js.map +1 -0
  128. package/dist/lib/ai-model/service-caller/system-one/utils.js +68 -0
  129. package/dist/lib/ai-model/service-caller/system-one/utils.js.map +1 -0
  130. package/dist/lib/ai-model/service-caller/utils.js +2 -2
  131. package/dist/lib/ai-model/service-caller/utils.js.map +1 -1
  132. package/dist/lib/ai-model/shared/model-locate-result/factory.js +7 -3
  133. package/dist/lib/ai-model/shared/model-locate-result/factory.js.map +1 -1
  134. package/dist/lib/ai-model/shared/model-locate-result/pixel-mapper.js +10 -4
  135. package/dist/lib/ai-model/shared/model-locate-result/pixel-mapper.js.map +1 -1
  136. package/dist/lib/ai-model/shared/model-locate-result/types.js.map +1 -1
  137. package/dist/lib/ai-model/shared/model-locate-result/validation.js +4 -0
  138. package/dist/lib/ai-model/shared/model-locate-result/validation.js.map +1 -1
  139. package/dist/lib/ai-model/workflows/grounding/locate.js +1 -1
  140. package/dist/lib/ai-model/workflows/grounding/locate.js.map +1 -1
  141. package/dist/lib/ai-model/workflows/grounding/section-locate.js +1 -1
  142. package/dist/lib/ai-model/workflows/grounding/section-locate.js.map +1 -1
  143. package/dist/lib/ai-model/workflows/insight/boolean.js +1 -1
  144. package/dist/lib/ai-model/workflows/insight/boolean.js.map +1 -1
  145. package/dist/lib/ai-model/workflows/insight/extraction.js +2 -2
  146. package/dist/lib/ai-model/workflows/insight/extraction.js.map +1 -1
  147. package/dist/lib/ai-model/workflows/planning/standard-planning.js +3 -2
  148. package/dist/lib/ai-model/workflows/planning/standard-planning.js.map +1 -1
  149. package/dist/lib/ai-model/workflows/recorder-generation/playwright.js +1 -1
  150. package/dist/lib/ai-model/workflows/recorder-generation/playwright.js.map +1 -1
  151. package/dist/lib/ai-model/workflows/recorder-generation/yaml.js +1 -1
  152. package/dist/lib/ai-model/workflows/recorder-generation/yaml.js.map +1 -1
  153. package/dist/lib/device/index.js +7 -0
  154. package/dist/lib/device/index.js.map +1 -1
  155. package/dist/lib/report-html-template.js +1 -1
  156. package/dist/lib/service/index.js +2 -1
  157. package/dist/lib/service/index.js.map +1 -1
  158. package/dist/lib/types.js.map +1 -1
  159. package/dist/lib/utils.js +1 -1
  160. package/dist/types/agent/agent.d.ts.map +1 -1
  161. package/dist/types/agent/insight.d.ts +2 -2
  162. package/dist/types/agent/insight.d.ts.map +1 -1
  163. package/dist/types/agent/tasks.d.ts.map +1 -1
  164. package/dist/types/ai-model/connectivity/run-connectivity-test.d.ts.map +1 -1
  165. package/dist/types/ai-model/index.d.ts +1 -1
  166. package/dist/types/ai-model/index.d.ts.map +1 -1
  167. package/dist/types/ai-model/model-adapter/resolve.d.ts +2 -1
  168. package/dist/types/ai-model/model-adapter/resolve.d.ts.map +1 -1
  169. package/dist/types/ai-model/model-adapter/types.d.ts +8 -5
  170. package/dist/types/ai-model/model-adapter/types.d.ts.map +1 -1
  171. package/dist/types/ai-model/models/gpt.d.ts +2 -2
  172. package/dist/types/ai-model/models/jev/adapter.d.ts +4 -5
  173. package/dist/types/ai-model/models/jev/adapter.d.ts.map +1 -1
  174. package/dist/types/ai-model/models/jev/boolean.d.ts +3 -0
  175. package/dist/types/ai-model/models/jev/boolean.d.ts.map +1 -0
  176. package/dist/types/ai-model/models/jev/image.d.ts +11 -11
  177. package/dist/types/ai-model/models/jev/image.d.ts.map +1 -1
  178. package/dist/types/ai-model/models/jev/locate.d.ts +3 -0
  179. package/dist/types/ai-model/models/jev/locate.d.ts.map +1 -0
  180. package/dist/types/ai-model/models/jev/planning-action.d.ts +6 -0
  181. package/dist/types/ai-model/models/jev/planning-action.d.ts.map +1 -0
  182. package/dist/types/ai-model/models/jev/planning-context.d.ts +23 -0
  183. package/dist/types/ai-model/models/jev/planning-context.d.ts.map +1 -0
  184. package/dist/types/ai-model/models/jev/planning-decision.d.ts +35 -0
  185. package/dist/types/ai-model/models/jev/planning-decision.d.ts.map +1 -0
  186. package/dist/types/ai-model/models/jev/planning.d.ts.map +1 -1
  187. package/dist/types/ai-model/models/model-fallback.d.ts +6 -0
  188. package/dist/types/ai-model/models/model-fallback.d.ts.map +1 -0
  189. package/dist/types/ai-model/models/registry.d.ts +4 -3
  190. package/dist/types/ai-model/models/registry.d.ts.map +1 -1
  191. package/dist/types/ai-model/service-caller/call-ai.d.ts +3 -1
  192. package/dist/types/ai-model/service-caller/call-ai.d.ts.map +1 -1
  193. package/dist/types/ai-model/service-caller/codex/call-codex.d.ts +5 -3
  194. package/dist/types/ai-model/service-caller/codex/call-codex.d.ts.map +1 -1
  195. package/dist/types/ai-model/service-caller/index.d.ts +1 -1
  196. package/dist/types/ai-model/service-caller/index.d.ts.map +1 -1
  197. package/dist/types/ai-model/service-caller/model-call.d.ts +2 -2
  198. package/dist/types/ai-model/service-caller/model-call.d.ts.map +1 -1
  199. package/dist/types/ai-model/service-caller/openai/call-openai.d.ts +2 -2
  200. package/dist/types/ai-model/service-caller/openai/call-openai.d.ts.map +1 -1
  201. package/dist/types/ai-model/service-caller/openai/chat-completion/chat-completion.d.ts +4 -2
  202. package/dist/types/ai-model/service-caller/openai/chat-completion/chat-completion.d.ts.map +1 -1
  203. package/dist/types/ai-model/service-caller/openai/responses/responses.d.ts +4 -2
  204. package/dist/types/ai-model/service-caller/openai/responses/responses.d.ts.map +1 -1
  205. package/dist/types/ai-model/service-caller/system-one/call-system-one.d.ts +4 -0
  206. package/dist/types/ai-model/service-caller/system-one/call-system-one.d.ts.map +1 -0
  207. package/dist/types/ai-model/service-caller/system-one/index.d.ts +3 -0
  208. package/dist/types/ai-model/service-caller/system-one/index.d.ts.map +1 -0
  209. package/dist/types/ai-model/service-caller/system-one/prepare-system-one.d.ts +21 -0
  210. package/dist/types/ai-model/service-caller/system-one/prepare-system-one.d.ts.map +1 -0
  211. package/dist/types/ai-model/service-caller/{system-one.d.ts → system-one/schema.d.ts} +1 -22
  212. package/dist/types/ai-model/service-caller/system-one/schema.d.ts.map +1 -0
  213. package/dist/types/ai-model/service-caller/system-one/utils.d.ts +6 -0
  214. package/dist/types/ai-model/service-caller/system-one/utils.d.ts.map +1 -0
  215. package/dist/types/ai-model/service-caller/types.d.ts +0 -3
  216. package/dist/types/ai-model/service-caller/types.d.ts.map +1 -1
  217. package/dist/types/ai-model/service-caller/utils.d.ts +3 -3
  218. package/dist/types/ai-model/shared/model-locate-result/factory.d.ts.map +1 -1
  219. package/dist/types/ai-model/shared/model-locate-result/index.d.ts +1 -1
  220. package/dist/types/ai-model/shared/model-locate-result/index.d.ts.map +1 -1
  221. package/dist/types/ai-model/shared/model-locate-result/pixel-mapper.d.ts +3 -3
  222. package/dist/types/ai-model/shared/model-locate-result/pixel-mapper.d.ts.map +1 -1
  223. package/dist/types/ai-model/shared/model-locate-result/types.d.ts +4 -0
  224. package/dist/types/ai-model/shared/model-locate-result/types.d.ts.map +1 -1
  225. package/dist/types/ai-model/shared/model-locate-result/validation.d.ts.map +1 -1
  226. package/dist/types/ai-model/workflows/grounding/locate.d.ts.map +1 -1
  227. package/dist/types/ai-model/workflows/grounding/section-locate.d.ts.map +1 -1
  228. package/dist/types/ai-model/workflows/insight/boolean.d.ts.map +1 -1
  229. package/dist/types/ai-model/workflows/insight/extraction.d.ts +2 -0
  230. package/dist/types/ai-model/workflows/insight/extraction.d.ts.map +1 -1
  231. package/dist/types/ai-model/workflows/planning/standard-planning.d.ts.map +1 -1
  232. package/dist/types/ai-model/workflows/planning/types.d.ts +2 -1
  233. package/dist/types/ai-model/workflows/planning/types.d.ts.map +1 -1
  234. package/dist/types/ai-model/workflows/recorder-generation/playwright.d.ts.map +1 -1
  235. package/dist/types/ai-model/workflows/recorder-generation/yaml.d.ts.map +1 -1
  236. package/dist/types/device/index.d.ts +1 -0
  237. package/dist/types/device/index.d.ts.map +1 -1
  238. package/dist/types/service/index.d.ts +1 -1
  239. package/dist/types/service/index.d.ts.map +1 -1
  240. package/dist/types/types.d.ts +14 -3
  241. package/dist/types/types.d.ts.map +1 -1
  242. package/package.json +2 -2
  243. package/dist/es/ai-model/models/task-routing.mjs +0 -28
  244. package/dist/es/ai-model/models/task-routing.mjs.map +0 -1
  245. package/dist/es/ai-model/service-caller/system-one.mjs +0 -163
  246. package/dist/es/ai-model/service-caller/system-one.mjs.map +0 -1
  247. package/dist/lib/ai-model/models/task-routing.js.map +0 -1
  248. package/dist/lib/ai-model/service-caller/system-one.js +0 -206
  249. package/dist/lib/ai-model/service-caller/system-one.js.map +0 -1
  250. package/dist/types/ai-model/models/task-routing.d.ts +0 -6
  251. package/dist/types/ai-model/models/task-routing.d.ts.map +0 -1
  252. package/dist/types/ai-model/service-caller/system-one.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-model/service-caller/system-one.mjs","sources":["../../../../src/ai-model/service-caller/system-one.ts"],"sourcesContent":["import type { IModelConfig } from '@midscene/shared/env';\nimport { assert, uuid } from '@midscene/shared/utils';\nimport { z } from 'zod';\nimport { createProxyAgentIfNeeded } from './proxy';\nimport type { ModelCallContext, ModelCallResult } from './types';\n\nexport interface SystemOneRequest {\n state: Record<string, unknown>;\n images?: Record<string, string>;\n questions: Record<\n string,\n | { type: 'noul' | 'box'; instructions: unknown }\n | {\n type: 'choice';\n instructions: unknown;\n criteria: Record<string, string>;\n }\n >;\n}\n\nconst probability = z.number().min(0).max(1);\nexport const systemOneAnswerSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('noul'), noul: probability }),\n z.object({ type: z.literal('choice'), choice: z.string() }),\n z.object({\n type: z.literal('box'),\n box: z\n .object({\n left: probability,\n right: probability,\n top: probability,\n bottom: probability,\n })\n .refine(\n (box) => box.left < box.right && box.top < box.bottom,\n 'Invalid box edges',\n ),\n }),\n]);\nexport const systemOneResponseSchema = z.object({\n model: z.string().optional(),\n answers: z.record(systemOneAnswerSchema),\n usage: z\n .object({\n input_tokens: z.number().nonnegative().nullable().optional(),\n output_tokens: z.number().nonnegative().nullable().optional(),\n })\n .optional(),\n});\n\nexport async function prepareSystemOne(\n config: IModelConfig,\n request: SystemOneRequest,\n) {\n assert(config.openaiBaseURL, 'Jev requires MIDSCENE_*_MODEL_BASE_URL');\n assert(config.openaiApiKey, 'Jev requires MIDSCENE_*_MODEL_API_KEY');\n assert(\n !config.protocol || config.protocol === 'openai-chat',\n 'Jev uses System One, not the Responses API',\n );\n const base = config.openaiBaseURL.replace(/\\/+$/, '');\n const url = `${base}${base.endsWith('/v1') ? '' : '/v1'}/systemone`;\n const isOpenRouter = new URL(base).hostname === 'openrouter.ai';\n const assets: Record<string, unknown> = {};\n const imageState = Object.fromEntries(\n Object.entries(request.images ?? {}).map(([name, dataURL]) => {\n if (isOpenRouter) {\n return [name, { type: 'image_url', image_url: { url: dataURL } }];\n }\n const reference = uuid();\n const match = /^data:image\\/(png|jpeg);base64,(.+)$/.exec(dataURL);\n assert(match, 'System One images must be prepared PNG or JPEG data URLs');\n assets[reference] = {\n type: 'image',\n format: match[1] === 'png' ? 'png' : 'jpg',\n data_base64: match[2],\n };\n return [name, reference];\n }),\n );\n const body = {\n ...config.extraBody,\n model: config.modelName,\n state: { ...request.state, ...imageState },\n questions: request.questions,\n ...(!isOpenRouter && Object.keys(assets).length ? { assets } : {}),\n };\n const serializedBody = JSON.stringify(body);\n assert(\n new TextEncoder().encode(serializedBody).length <= 32 * 1024 * 1024,\n 'Jev request exceeds the 32 MiB body limit',\n );\n return {\n url,\n body: serializedBody,\n questions: request.questions,\n headers: {\n ...(config.openaiExtraConfig?.defaultHeaders as\n | Record<string, string>\n | undefined),\n Authorization: `Bearer ${config.openaiApiKey}`,\n 'Content-Type': 'application/json',\n 'TypeSafe-Danger-Zone-Images': 'true',\n },\n dispatcher: await createProxyAgentIfNeeded({\n socksProxy: config.socksProxy,\n httpProxy: config.httpProxy,\n }),\n };\n}\n\nexport async function callSystemOne(\n context: ModelCallContext,\n prepared: Awaited<ReturnType<typeof prepareSystemOne>>,\n): Promise<ModelCallResult> {\n assert(!context.options?.stream, 'Jev does not support streaming output');\n const start = Date.now();\n context.recordEvent?.({\n type: 'request',\n request: { url: prepared.url, method: 'POST', body: prepared.body },\n });\n try {\n const response = await fetch(prepared.url, {\n method: 'POST',\n headers: prepared.headers,\n body: prepared.body,\n signal: context.requestSignal,\n ...(prepared.dispatcher ? { dispatcher: prepared.dispatcher } : {}),\n });\n const body = await response.text();\n const http = { status: response.status, ok: response.ok, body };\n if (!response.ok) {\n context.recordEvent?.({ type: 'error', http });\n throw new Error(\n `Jev request failed (${response.status}): ${body.slice(0, 4000)}`,\n );\n }\n const result = systemOneResponseSchema.parse(JSON.parse(body));\n for (const [name, question] of Object.entries(prepared.questions)) {\n assert(\n result.answers[name]?.type === question.type,\n `Missing or invalid Jev answer: ${name}`,\n );\n }\n for (const [name, question] of Object.entries(prepared.questions)) {\n const answer = result.answers[name];\n if (question.type === 'choice' && answer.type === 'choice') {\n assert(\n Object.hasOwn(question.criteria, answer.choice),\n `Invalid Jev choice: ${name}`,\n );\n }\n }\n const input = result.usage?.input_tokens;\n const output = result.usage?.output_tokens;\n const final: ModelCallResult = {\n content: body,\n isStreamed: false,\n rawUsage:\n input != null && output != null\n ? {\n prompt_tokens: input,\n completion_tokens: output,\n total_tokens: input + output,\n }\n : undefined,\n timeCost: Date.now() - start,\n requestId: response.headers.get('x-request-id'),\n responseModelName: result.model,\n };\n context.recordEvent?.({ type: 'response', http, final });\n return final;\n } catch (error) {\n context.recordEvent?.({\n type: 'error',\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n}\n"],"names":["probability","z","systemOneAnswerSchema","box","systemOneResponseSchema","prepareSystemOne","config","request","assert","base","url","isOpenRouter","URL","assets","imageState","Object","name","dataURL","reference","uuid","match","body","serializedBody","JSON","TextEncoder","createProxyAgentIfNeeded","callSystemOne","context","prepared","start","Date","response","fetch","http","Error","result","question","answer","input","output","final","undefined","error","String"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-model/models/task-routing.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../src/ai-model/models/task-routing.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { IModelConfig, TIntent } from '@midscene/shared/env';\nimport { getDebug } from '@midscene/shared/logger';\nimport type { ModelRuntime, ModelTask } from '../model-adapter/types';\nimport { getModelRuntime } from './registry';\n\nexport function resolveModelForTask(\n configs: { getModelConfig(intent: TIntent): IModelConfig },\n intent: TIntent,\n task: ModelTask,\n): ModelRuntime {\n const requested = getModelRuntime(configs.getModelConfig(intent));\n if (\n !requested.adapter.supportedTasks ||\n requested.adapter.supportedTasks.includes(task)\n ) {\n return requested;\n }\n const config = configs.getModelConfig('default');\n const runtime = getModelRuntime({ ...config, intent });\n if (\n runtime.adapter.supportedTasks &&\n !runtime.adapter.supportedTasks.includes(task)\n ) {\n throw new Error(\n `The default model cannot perform ${task}. Configure a general-purpose default model.`,\n );\n }\n const reason = `${requested.config.modelFamily} does not support ${task}; using the default model`;\n getDebug('ai:model-routing', { console: true })(reason);\n return {\n ...runtime,\n modelRouting: {\n requestedModel: requested.config.modelName,\n requestedSlot: requested.config.slot,\n task,\n reason,\n },\n };\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","resolveModelForTask","configs","intent","task","requested","getModelRuntime","config","runtime","Error","reason","getDebug"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;ACDO,SAASI,oBACdC,OAA0D,EAC1DC,MAAe,EACfC,IAAe;IAEf,MAAMC,YAAYC,AAAAA,IAAAA,qCAAAA,eAAAA,AAAAA,EAAgBJ,QAAQ,cAAc,CAACC;IACzD,IACE,CAACE,UAAU,OAAO,CAAC,cAAc,IACjCA,UAAU,OAAO,CAAC,cAAc,CAAC,QAAQ,CAACD,OAE1C,OAAOC;IAET,MAAME,SAASL,QAAQ,cAAc,CAAC;IACtC,MAAMM,UAAUF,AAAAA,IAAAA,qCAAAA,eAAAA,AAAAA,EAAgB;QAAE,GAAGC,MAAM;QAAEJ;IAAO;IACpD,IACEK,QAAQ,OAAO,CAAC,cAAc,IAC9B,CAACA,QAAQ,OAAO,CAAC,cAAc,CAAC,QAAQ,CAACJ,OAEzC,MAAM,IAAIK,MACR,CAAC,iCAAiC,EAAEL,KAAK,4CAA4C,CAAC;IAG1F,MAAMM,SAAS,GAAGL,UAAU,MAAM,CAAC,WAAW,CAAC,kBAAkB,EAAED,KAAK,yBAAyB,CAAC;IAClGO,IAAAA,uBAAAA,QAAAA,AAAAA,EAAS,oBAAoB;QAAE,SAAS;IAAK,GAAGD;IAChD,OAAO;QACL,GAAGF,OAAO;QACV,cAAc;YACZ,gBAAgBH,UAAU,MAAM,CAAC,SAAS;YAC1C,eAAeA,UAAU,MAAM,CAAC,IAAI;YACpCD;YACAM;QACF;IACF;AACF"}
@@ -1,206 +0,0 @@
1
- "use strict";
2
- var __webpack_require__ = {};
3
- (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
9
- };
10
- })();
11
- (()=>{
12
- __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
- })();
14
- (()=>{
15
- __webpack_require__.r = (exports1)=>{
16
- if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
- value: 'Module'
18
- });
19
- Object.defineProperty(exports1, '__esModule', {
20
- value: true
21
- });
22
- };
23
- })();
24
- var __webpack_exports__ = {};
25
- __webpack_require__.r(__webpack_exports__);
26
- __webpack_require__.d(__webpack_exports__, {
27
- systemOneResponseSchema: ()=>systemOneResponseSchema,
28
- systemOneAnswerSchema: ()=>systemOneAnswerSchema,
29
- prepareSystemOne: ()=>prepareSystemOne,
30
- callSystemOne: ()=>callSystemOne
31
- });
32
- const utils_namespaceObject = require("@midscene/shared/utils");
33
- const external_zod_namespaceObject = require("zod");
34
- const index_js_namespaceObject = require("./proxy/index.js");
35
- const probability = external_zod_namespaceObject.z.number().min(0).max(1);
36
- const systemOneAnswerSchema = external_zod_namespaceObject.z.discriminatedUnion('type', [
37
- external_zod_namespaceObject.z.object({
38
- type: external_zod_namespaceObject.z.literal('noul'),
39
- noul: probability
40
- }),
41
- external_zod_namespaceObject.z.object({
42
- type: external_zod_namespaceObject.z.literal('choice'),
43
- choice: external_zod_namespaceObject.z.string()
44
- }),
45
- external_zod_namespaceObject.z.object({
46
- type: external_zod_namespaceObject.z.literal('box'),
47
- box: external_zod_namespaceObject.z.object({
48
- left: probability,
49
- right: probability,
50
- top: probability,
51
- bottom: probability
52
- }).refine((box)=>box.left < box.right && box.top < box.bottom, 'Invalid box edges')
53
- })
54
- ]);
55
- const systemOneResponseSchema = external_zod_namespaceObject.z.object({
56
- model: external_zod_namespaceObject.z.string().optional(),
57
- answers: external_zod_namespaceObject.z.record(systemOneAnswerSchema),
58
- usage: external_zod_namespaceObject.z.object({
59
- input_tokens: external_zod_namespaceObject.z.number().nonnegative().nullable().optional(),
60
- output_tokens: external_zod_namespaceObject.z.number().nonnegative().nullable().optional()
61
- }).optional()
62
- });
63
- async function prepareSystemOne(config, request) {
64
- (0, utils_namespaceObject.assert)(config.openaiBaseURL, 'Jev requires MIDSCENE_*_MODEL_BASE_URL');
65
- (0, utils_namespaceObject.assert)(config.openaiApiKey, 'Jev requires MIDSCENE_*_MODEL_API_KEY');
66
- (0, utils_namespaceObject.assert)(!config.protocol || 'openai-chat' === config.protocol, 'Jev uses System One, not the Responses API');
67
- const base = config.openaiBaseURL.replace(/\/+$/, '');
68
- const url = `${base}${base.endsWith('/v1') ? '' : '/v1'}/systemone`;
69
- const isOpenRouter = 'openrouter.ai' === new URL(base).hostname;
70
- const assets = {};
71
- const imageState = Object.fromEntries(Object.entries(request.images ?? {}).map(([name, dataURL])=>{
72
- if (isOpenRouter) return [
73
- name,
74
- {
75
- type: 'image_url',
76
- image_url: {
77
- url: dataURL
78
- }
79
- }
80
- ];
81
- const reference = (0, utils_namespaceObject.uuid)();
82
- const match = /^data:image\/(png|jpeg);base64,(.+)$/.exec(dataURL);
83
- (0, utils_namespaceObject.assert)(match, 'System One images must be prepared PNG or JPEG data URLs');
84
- assets[reference] = {
85
- type: 'image',
86
- format: 'png' === match[1] ? 'png' : 'jpg',
87
- data_base64: match[2]
88
- };
89
- return [
90
- name,
91
- reference
92
- ];
93
- }));
94
- const body = {
95
- ...config.extraBody,
96
- model: config.modelName,
97
- state: {
98
- ...request.state,
99
- ...imageState
100
- },
101
- questions: request.questions,
102
- ...!isOpenRouter && Object.keys(assets).length ? {
103
- assets
104
- } : {}
105
- };
106
- const serializedBody = JSON.stringify(body);
107
- (0, utils_namespaceObject.assert)(new TextEncoder().encode(serializedBody).length <= 33554432, 'Jev request exceeds the 32 MiB body limit');
108
- return {
109
- url,
110
- body: serializedBody,
111
- questions: request.questions,
112
- headers: {
113
- ...config.openaiExtraConfig?.defaultHeaders,
114
- Authorization: `Bearer ${config.openaiApiKey}`,
115
- 'Content-Type': 'application/json',
116
- 'TypeSafe-Danger-Zone-Images': 'true'
117
- },
118
- dispatcher: await (0, index_js_namespaceObject.createProxyAgentIfNeeded)({
119
- socksProxy: config.socksProxy,
120
- httpProxy: config.httpProxy
121
- })
122
- };
123
- }
124
- async function callSystemOne(context, prepared) {
125
- (0, utils_namespaceObject.assert)(!context.options?.stream, 'Jev does not support streaming output');
126
- const start = Date.now();
127
- context.recordEvent?.({
128
- type: 'request',
129
- request: {
130
- url: prepared.url,
131
- method: 'POST',
132
- body: prepared.body
133
- }
134
- });
135
- try {
136
- const response = await fetch(prepared.url, {
137
- method: 'POST',
138
- headers: prepared.headers,
139
- body: prepared.body,
140
- signal: context.requestSignal,
141
- ...prepared.dispatcher ? {
142
- dispatcher: prepared.dispatcher
143
- } : {}
144
- });
145
- const body = await response.text();
146
- const http = {
147
- status: response.status,
148
- ok: response.ok,
149
- body
150
- };
151
- if (!response.ok) {
152
- context.recordEvent?.({
153
- type: 'error',
154
- http
155
- });
156
- throw new Error(`Jev request failed (${response.status}): ${body.slice(0, 4000)}`);
157
- }
158
- const result = systemOneResponseSchema.parse(JSON.parse(body));
159
- for (const [name, question] of Object.entries(prepared.questions))(0, utils_namespaceObject.assert)(result.answers[name]?.type === question.type, `Missing or invalid Jev answer: ${name}`);
160
- for (const [name, question] of Object.entries(prepared.questions)){
161
- const answer = result.answers[name];
162
- if ('choice' === question.type && 'choice' === answer.type) (0, utils_namespaceObject.assert)(Object.hasOwn(question.criteria, answer.choice), `Invalid Jev choice: ${name}`);
163
- }
164
- const input = result.usage?.input_tokens;
165
- const output = result.usage?.output_tokens;
166
- const final = {
167
- content: body,
168
- isStreamed: false,
169
- rawUsage: null != input && null != output ? {
170
- prompt_tokens: input,
171
- completion_tokens: output,
172
- total_tokens: input + output
173
- } : void 0,
174
- timeCost: Date.now() - start,
175
- requestId: response.headers.get('x-request-id'),
176
- responseModelName: result.model
177
- };
178
- context.recordEvent?.({
179
- type: 'response',
180
- http,
181
- final
182
- });
183
- return final;
184
- } catch (error) {
185
- context.recordEvent?.({
186
- type: 'error',
187
- error: error instanceof Error ? error.message : String(error)
188
- });
189
- throw error;
190
- }
191
- }
192
- exports.callSystemOne = __webpack_exports__.callSystemOne;
193
- exports.prepareSystemOne = __webpack_exports__.prepareSystemOne;
194
- exports.systemOneAnswerSchema = __webpack_exports__.systemOneAnswerSchema;
195
- exports.systemOneResponseSchema = __webpack_exports__.systemOneResponseSchema;
196
- for(var __rspack_i in __webpack_exports__)if (-1 === [
197
- "callSystemOne",
198
- "prepareSystemOne",
199
- "systemOneAnswerSchema",
200
- "systemOneResponseSchema"
201
- ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
202
- Object.defineProperty(exports, '__esModule', {
203
- value: true
204
- });
205
-
206
- //# sourceMappingURL=system-one.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-model/service-caller/system-one.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../src/ai-model/service-caller/system-one.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { IModelConfig } from '@midscene/shared/env';\nimport { assert, uuid } from '@midscene/shared/utils';\nimport { z } from 'zod';\nimport { createProxyAgentIfNeeded } from './proxy';\nimport type { ModelCallContext, ModelCallResult } from './types';\n\nexport interface SystemOneRequest {\n state: Record<string, unknown>;\n images?: Record<string, string>;\n questions: Record<\n string,\n | { type: 'noul' | 'box'; instructions: unknown }\n | {\n type: 'choice';\n instructions: unknown;\n criteria: Record<string, string>;\n }\n >;\n}\n\nconst probability = z.number().min(0).max(1);\nexport const systemOneAnswerSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('noul'), noul: probability }),\n z.object({ type: z.literal('choice'), choice: z.string() }),\n z.object({\n type: z.literal('box'),\n box: z\n .object({\n left: probability,\n right: probability,\n top: probability,\n bottom: probability,\n })\n .refine(\n (box) => box.left < box.right && box.top < box.bottom,\n 'Invalid box edges',\n ),\n }),\n]);\nexport const systemOneResponseSchema = z.object({\n model: z.string().optional(),\n answers: z.record(systemOneAnswerSchema),\n usage: z\n .object({\n input_tokens: z.number().nonnegative().nullable().optional(),\n output_tokens: z.number().nonnegative().nullable().optional(),\n })\n .optional(),\n});\n\nexport async function prepareSystemOne(\n config: IModelConfig,\n request: SystemOneRequest,\n) {\n assert(config.openaiBaseURL, 'Jev requires MIDSCENE_*_MODEL_BASE_URL');\n assert(config.openaiApiKey, 'Jev requires MIDSCENE_*_MODEL_API_KEY');\n assert(\n !config.protocol || config.protocol === 'openai-chat',\n 'Jev uses System One, not the Responses API',\n );\n const base = config.openaiBaseURL.replace(/\\/+$/, '');\n const url = `${base}${base.endsWith('/v1') ? '' : '/v1'}/systemone`;\n const isOpenRouter = new URL(base).hostname === 'openrouter.ai';\n const assets: Record<string, unknown> = {};\n const imageState = Object.fromEntries(\n Object.entries(request.images ?? {}).map(([name, dataURL]) => {\n if (isOpenRouter) {\n return [name, { type: 'image_url', image_url: { url: dataURL } }];\n }\n const reference = uuid();\n const match = /^data:image\\/(png|jpeg);base64,(.+)$/.exec(dataURL);\n assert(match, 'System One images must be prepared PNG or JPEG data URLs');\n assets[reference] = {\n type: 'image',\n format: match[1] === 'png' ? 'png' : 'jpg',\n data_base64: match[2],\n };\n return [name, reference];\n }),\n );\n const body = {\n ...config.extraBody,\n model: config.modelName,\n state: { ...request.state, ...imageState },\n questions: request.questions,\n ...(!isOpenRouter && Object.keys(assets).length ? { assets } : {}),\n };\n const serializedBody = JSON.stringify(body);\n assert(\n new TextEncoder().encode(serializedBody).length <= 32 * 1024 * 1024,\n 'Jev request exceeds the 32 MiB body limit',\n );\n return {\n url,\n body: serializedBody,\n questions: request.questions,\n headers: {\n ...(config.openaiExtraConfig?.defaultHeaders as\n | Record<string, string>\n | undefined),\n Authorization: `Bearer ${config.openaiApiKey}`,\n 'Content-Type': 'application/json',\n 'TypeSafe-Danger-Zone-Images': 'true',\n },\n dispatcher: await createProxyAgentIfNeeded({\n socksProxy: config.socksProxy,\n httpProxy: config.httpProxy,\n }),\n };\n}\n\nexport async function callSystemOne(\n context: ModelCallContext,\n prepared: Awaited<ReturnType<typeof prepareSystemOne>>,\n): Promise<ModelCallResult> {\n assert(!context.options?.stream, 'Jev does not support streaming output');\n const start = Date.now();\n context.recordEvent?.({\n type: 'request',\n request: { url: prepared.url, method: 'POST', body: prepared.body },\n });\n try {\n const response = await fetch(prepared.url, {\n method: 'POST',\n headers: prepared.headers,\n body: prepared.body,\n signal: context.requestSignal,\n ...(prepared.dispatcher ? { dispatcher: prepared.dispatcher } : {}),\n });\n const body = await response.text();\n const http = { status: response.status, ok: response.ok, body };\n if (!response.ok) {\n context.recordEvent?.({ type: 'error', http });\n throw new Error(\n `Jev request failed (${response.status}): ${body.slice(0, 4000)}`,\n );\n }\n const result = systemOneResponseSchema.parse(JSON.parse(body));\n for (const [name, question] of Object.entries(prepared.questions)) {\n assert(\n result.answers[name]?.type === question.type,\n `Missing or invalid Jev answer: ${name}`,\n );\n }\n for (const [name, question] of Object.entries(prepared.questions)) {\n const answer = result.answers[name];\n if (question.type === 'choice' && answer.type === 'choice') {\n assert(\n Object.hasOwn(question.criteria, answer.choice),\n `Invalid Jev choice: ${name}`,\n );\n }\n }\n const input = result.usage?.input_tokens;\n const output = result.usage?.output_tokens;\n const final: ModelCallResult = {\n content: body,\n isStreamed: false,\n rawUsage:\n input != null && output != null\n ? {\n prompt_tokens: input,\n completion_tokens: output,\n total_tokens: input + output,\n }\n : undefined,\n timeCost: Date.now() - start,\n requestId: response.headers.get('x-request-id'),\n responseModelName: result.model,\n };\n context.recordEvent?.({ type: 'response', http, final });\n return final;\n } catch (error) {\n context.recordEvent?.({\n type: 'error',\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","probability","z","systemOneAnswerSchema","box","systemOneResponseSchema","prepareSystemOne","config","request","assert","base","url","isOpenRouter","URL","assets","imageState","name","dataURL","reference","uuid","match","body","serializedBody","JSON","TextEncoder","createProxyAgentIfNeeded","callSystemOne","context","prepared","start","Date","response","fetch","http","Error","result","question","answer","input","output","final","undefined","error","String"],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import type { IModelConfig, TIntent } from '@midscene/shared/env';
2
- import type { ModelRuntime, ModelTask } from '../model-adapter/types';
3
- export declare function resolveModelForTask(configs: {
4
- getModelConfig(intent: TIntent): IModelConfig;
5
- }, intent: TIntent, task: ModelTask): ModelRuntime;
6
- //# sourceMappingURL=task-routing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-routing.d.ts","sourceRoot":"","sources":["../../../../src/ai-model/models/task-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGtE,wBAAgB,mBAAmB,CACjC,OAAO,EAAE;IAAE,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,CAAA;CAAE,EAC1D,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,SAAS,GACd,YAAY,CA6Bd"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"system-one.d.ts","sourceRoot":"","sources":["../../../../src/ai-model/service-caller/system-one.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CACf,MAAM,EACJ;QAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,GAC/C;QACE,IAAI,EAAE,QAAQ,CAAC;QACf,YAAY,EAAE,OAAO,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CACJ,CAAC;CACH;AAGD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiBhC,CAAC;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASlC,CAAC;AAEH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,gBAAgB;;;;cAzCb,MAAM,GAAG,KAAK;sBAAgB,OAAO;;cAErC,QAAQ;sBACA,OAAO;kBACX,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;GA8FvC;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,GACrD,OAAO,CAAC,eAAe,CAAC,CAiE1B"}