@midscene/core 1.9.8 → 1.10.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 (256) hide show
  1. package/dist/es/agent/agent.mjs +26 -94
  2. package/dist/es/agent/agent.mjs.map +1 -1
  3. package/dist/es/agent/prompt-context.mjs +14 -0
  4. package/dist/es/agent/prompt-context.mjs.map +1 -0
  5. package/dist/es/agent/run-gherkin-scenario.mjs +114 -0
  6. package/dist/es/agent/run-gherkin-scenario.mjs.map +1 -0
  7. package/dist/es/agent/task-builder.mjs +4 -4
  8. package/dist/es/agent/task-builder.mjs.map +1 -1
  9. package/dist/es/agent/tasks.mjs +4 -8
  10. package/dist/es/agent/tasks.mjs.map +1 -1
  11. package/dist/es/agent/utils.mjs +15 -3
  12. package/dist/es/agent/utils.mjs.map +1 -1
  13. package/dist/es/ai-model/index.mjs +1 -2
  14. package/dist/es/ai-model/inspect.mjs +77 -50
  15. package/dist/es/ai-model/inspect.mjs.map +1 -1
  16. package/dist/es/ai-model/llm-planning.mjs +10 -26
  17. package/dist/es/ai-model/llm-planning.mjs.map +1 -1
  18. package/dist/es/ai-model/model-adapter/chat-completion.mjs +46 -0
  19. package/dist/es/ai-model/model-adapter/chat-completion.mjs.map +1 -0
  20. package/dist/es/ai-model/model-adapter/index.mjs +2 -0
  21. package/dist/es/ai-model/model-adapter/locate.mjs +33 -0
  22. package/dist/es/ai-model/model-adapter/locate.mjs.map +1 -0
  23. package/dist/es/ai-model/model-adapter/planning.mjs +44 -0
  24. package/dist/es/ai-model/model-adapter/planning.mjs.map +1 -0
  25. package/dist/es/ai-model/model-adapter/resolve.mjs +43 -0
  26. package/dist/es/ai-model/model-adapter/resolve.mjs.map +1 -0
  27. package/dist/es/ai-model/model-adapter/types.mjs +0 -0
  28. package/dist/es/ai-model/models/auto-glm/actions.mjs +19 -31
  29. package/dist/es/ai-model/models/auto-glm/actions.mjs.map +1 -1
  30. package/dist/es/ai-model/models/auto-glm/adapter.mjs +8 -16
  31. package/dist/es/ai-model/models/auto-glm/adapter.mjs.map +1 -1
  32. package/dist/es/ai-model/models/auto-glm/locate.mjs +6 -108
  33. package/dist/es/ai-model/models/auto-glm/locate.mjs.map +1 -1
  34. package/dist/es/ai-model/models/auto-glm/parser.mjs +19 -41
  35. package/dist/es/ai-model/models/auto-glm/parser.mjs.map +1 -1
  36. package/dist/es/ai-model/models/auto-glm/planning.mjs +27 -70
  37. package/dist/es/ai-model/models/auto-glm/planning.mjs.map +1 -1
  38. package/dist/es/ai-model/models/default.mjs.map +1 -1
  39. package/dist/es/ai-model/models/doubao.mjs.map +1 -1
  40. package/dist/es/ai-model/models/gemini.mjs +1 -1
  41. package/dist/es/ai-model/models/gemini.mjs.map +1 -1
  42. package/dist/es/ai-model/models/glm.mjs.map +1 -1
  43. package/dist/es/ai-model/models/gpt.mjs.map +1 -1
  44. package/dist/es/ai-model/models/kimi.mjs.map +1 -1
  45. package/dist/es/ai-model/models/mimo.mjs.map +1 -1
  46. package/dist/es/ai-model/models/qwen.mjs.map +1 -1
  47. package/dist/es/ai-model/models/registry.mjs +1 -1
  48. package/dist/es/ai-model/models/registry.mjs.map +1 -1
  49. package/dist/es/ai-model/models/ui-tars/actions.mjs +147 -0
  50. package/dist/es/ai-model/models/ui-tars/actions.mjs.map +1 -0
  51. package/dist/es/ai-model/models/ui-tars/adapter.mjs +2 -2
  52. package/dist/es/ai-model/models/ui-tars/adapter.mjs.map +1 -1
  53. package/dist/es/ai-model/models/ui-tars/parser.mjs +40 -0
  54. package/dist/es/ai-model/models/ui-tars/parser.mjs.map +1 -0
  55. package/dist/es/ai-model/models/ui-tars/planning.mjs +19 -230
  56. package/dist/es/ai-model/models/ui-tars/planning.mjs.map +1 -1
  57. package/dist/es/ai-model/{prompt/ui-tars-planning.mjs → models/ui-tars/prompt.mjs} +1 -1
  58. package/dist/es/ai-model/models/ui-tars/prompt.mjs.map +1 -0
  59. package/dist/es/ai-model/service-caller/index.mjs +1 -3
  60. package/dist/es/ai-model/service-caller/index.mjs.map +1 -1
  61. package/dist/es/ai-model/shared/model-locate-result/coordinate-distance.mjs +10 -0
  62. package/dist/es/ai-model/shared/model-locate-result/coordinate-distance.mjs.map +1 -0
  63. package/dist/es/ai-model/shared/model-locate-result/factory.mjs +1 -3
  64. package/dist/es/ai-model/shared/model-locate-result/factory.mjs.map +1 -1
  65. package/dist/es/ai-model/shared/model-locate-result/index.mjs +3 -2
  66. package/dist/es/ai-model/shared/planning-action.mjs +6 -0
  67. package/dist/es/ai-model/shared/planning-action.mjs.map +1 -0
  68. package/dist/es/ai-model/workflows/inspect/planning-action-locate.mjs +95 -0
  69. package/dist/es/ai-model/workflows/inspect/planning-action-locate.mjs.map +1 -0
  70. package/dist/es/ai-model/workflows/planning/custom-planning.mjs +126 -0
  71. package/dist/es/ai-model/workflows/planning/custom-planning.mjs.map +1 -0
  72. package/dist/es/ai-model/workflows/planning/locate-normalization.mjs +31 -0
  73. package/dist/es/ai-model/workflows/planning/locate-normalization.mjs.map +1 -0
  74. package/dist/es/common.mjs +10 -6
  75. package/dist/es/common.mjs.map +1 -1
  76. package/dist/es/element-describer.mjs +180 -0
  77. package/dist/es/element-describer.mjs.map +1 -0
  78. package/dist/es/index.mjs +2 -1
  79. package/dist/es/index.mjs.map +1 -1
  80. package/dist/es/report-generator.mjs +3 -5
  81. package/dist/es/report-generator.mjs.map +1 -1
  82. package/dist/es/service/index.mjs +3 -2
  83. package/dist/es/service/index.mjs.map +1 -1
  84. package/dist/es/skill/index.mjs +1 -1
  85. package/dist/es/skill/index.mjs.map +1 -1
  86. package/dist/es/types.mjs.map +1 -1
  87. package/dist/es/utils.mjs +2 -2
  88. package/dist/es/yaml/player.mjs +7 -0
  89. package/dist/es/yaml/player.mjs.map +1 -1
  90. package/dist/lib/agent/agent.js +25 -93
  91. package/dist/lib/agent/agent.js.map +1 -1
  92. package/dist/lib/{ai-model/models/chat-content.js → agent/prompt-context.js} +13 -13
  93. package/dist/lib/agent/prompt-context.js.map +1 -0
  94. package/dist/lib/agent/run-gherkin-scenario.js +151 -0
  95. package/dist/lib/agent/run-gherkin-scenario.js.map +1 -0
  96. package/dist/lib/agent/task-builder.js +4 -4
  97. package/dist/lib/agent/task-builder.js.map +1 -1
  98. package/dist/lib/agent/tasks.js +4 -8
  99. package/dist/lib/agent/tasks.js.map +1 -1
  100. package/dist/lib/agent/utils.js +14 -2
  101. package/dist/lib/agent/utils.js.map +1 -1
  102. package/dist/lib/ai-model/index.js +0 -10
  103. package/dist/lib/ai-model/inspect.js +77 -50
  104. package/dist/lib/ai-model/inspect.js.map +1 -1
  105. package/dist/lib/ai-model/llm-planning.js +9 -25
  106. package/dist/lib/ai-model/llm-planning.js.map +1 -1
  107. package/dist/lib/ai-model/model-adapter/chat-completion.js +83 -0
  108. package/dist/lib/ai-model/model-adapter/chat-completion.js.map +1 -0
  109. package/dist/lib/ai-model/model-adapter/custom-planning-types.js +20 -0
  110. package/dist/lib/ai-model/model-adapter/custom-planning-types.js.map +1 -0
  111. package/dist/lib/ai-model/model-adapter/index.js +38 -0
  112. package/dist/lib/ai-model/model-adapter/index.js.map +1 -0
  113. package/dist/lib/ai-model/model-adapter/locate.js +67 -0
  114. package/dist/lib/ai-model/model-adapter/locate.js.map +1 -0
  115. package/dist/lib/ai-model/model-adapter/planning.js +81 -0
  116. package/dist/lib/ai-model/model-adapter/planning.js.map +1 -0
  117. package/dist/lib/ai-model/model-adapter/resolve.js +77 -0
  118. package/dist/lib/ai-model/model-adapter/resolve.js.map +1 -0
  119. package/dist/lib/ai-model/model-adapter/types.js.map +1 -0
  120. package/dist/lib/ai-model/models/auto-glm/actions.js +19 -31
  121. package/dist/lib/ai-model/models/auto-glm/actions.js.map +1 -1
  122. package/dist/lib/ai-model/models/auto-glm/adapter.js +6 -14
  123. package/dist/lib/ai-model/models/auto-glm/adapter.js.map +1 -1
  124. package/dist/lib/ai-model/models/auto-glm/locate.js +8 -110
  125. package/dist/lib/ai-model/models/auto-glm/locate.js.map +1 -1
  126. package/dist/lib/ai-model/models/auto-glm/parser.js +24 -46
  127. package/dist/lib/ai-model/models/auto-glm/parser.js.map +1 -1
  128. package/dist/lib/ai-model/models/auto-glm/planning.js +28 -71
  129. package/dist/lib/ai-model/models/auto-glm/planning.js.map +1 -1
  130. package/dist/lib/ai-model/models/default.js.map +1 -1
  131. package/dist/lib/ai-model/models/doubao.js.map +1 -1
  132. package/dist/lib/ai-model/models/gemini.js +2 -2
  133. package/dist/lib/ai-model/models/gemini.js.map +1 -1
  134. package/dist/lib/ai-model/models/glm.js.map +1 -1
  135. package/dist/lib/ai-model/models/gpt.js.map +1 -1
  136. package/dist/lib/ai-model/models/kimi.js.map +1 -1
  137. package/dist/lib/ai-model/models/mimo.js.map +1 -1
  138. package/dist/lib/ai-model/models/qwen.js.map +1 -1
  139. package/dist/lib/ai-model/models/registry.js +2 -2
  140. package/dist/lib/ai-model/models/registry.js.map +1 -1
  141. package/dist/lib/ai-model/models/ui-tars/actions.js +181 -0
  142. package/dist/lib/ai-model/models/ui-tars/actions.js.map +1 -0
  143. package/dist/lib/ai-model/models/ui-tars/adapter.js +1 -1
  144. package/dist/lib/ai-model/models/ui-tars/adapter.js.map +1 -1
  145. package/dist/lib/ai-model/models/ui-tars/parser.js +74 -0
  146. package/dist/lib/ai-model/models/ui-tars/parser.js.map +1 -0
  147. package/dist/lib/ai-model/models/ui-tars/planning.js +21 -232
  148. package/dist/lib/ai-model/models/ui-tars/planning.js.map +1 -1
  149. package/dist/lib/ai-model/{prompt/ui-tars-planning.js → models/ui-tars/prompt.js} +1 -1
  150. package/dist/lib/ai-model/models/ui-tars/prompt.js.map +1 -0
  151. package/dist/lib/ai-model/service-caller/index.js +1 -3
  152. package/dist/lib/ai-model/service-caller/index.js.map +1 -1
  153. package/dist/lib/ai-model/shared/model-locate-result/coordinate-distance.js +44 -0
  154. package/dist/lib/ai-model/shared/model-locate-result/coordinate-distance.js.map +1 -0
  155. package/dist/lib/ai-model/shared/model-locate-result/factory.js +5 -4
  156. package/dist/lib/ai-model/shared/model-locate-result/factory.js.map +1 -1
  157. package/dist/lib/ai-model/shared/model-locate-result/index.js +7 -0
  158. package/dist/lib/ai-model/shared/planning-action.js +40 -0
  159. package/dist/lib/ai-model/shared/planning-action.js.map +1 -0
  160. package/dist/lib/ai-model/workflows/inspect/planning-action-locate.js +129 -0
  161. package/dist/lib/ai-model/workflows/inspect/planning-action-locate.js.map +1 -0
  162. package/dist/lib/ai-model/workflows/planning/custom-planning.js +163 -0
  163. package/dist/lib/ai-model/workflows/planning/custom-planning.js.map +1 -0
  164. package/dist/lib/ai-model/workflows/planning/locate-normalization.js +65 -0
  165. package/dist/lib/ai-model/workflows/planning/locate-normalization.js.map +1 -0
  166. package/dist/lib/common.js +13 -6
  167. package/dist/lib/common.js.map +1 -1
  168. package/dist/lib/element-describer.js +223 -0
  169. package/dist/lib/element-describer.js.map +1 -0
  170. package/dist/lib/index.js +14 -1
  171. package/dist/lib/index.js.map +1 -1
  172. package/dist/lib/report-generator.js +4 -6
  173. package/dist/lib/report-generator.js.map +1 -1
  174. package/dist/lib/service/index.js +3 -2
  175. package/dist/lib/service/index.js.map +1 -1
  176. package/dist/lib/skill/index.js +1 -1
  177. package/dist/lib/skill/index.js.map +1 -1
  178. package/dist/lib/types.js.map +1 -1
  179. package/dist/lib/utils.js +2 -2
  180. package/dist/lib/yaml/player.js +7 -0
  181. package/dist/lib/yaml/player.js.map +1 -1
  182. package/dist/types/agent/agent.d.ts +4 -18
  183. package/dist/types/agent/index.d.ts +3 -2
  184. package/dist/types/agent/prompt-context.d.ts +2 -0
  185. package/dist/types/agent/run-gherkin-scenario.d.ts +26 -0
  186. package/dist/types/agent/tasks.d.ts +3 -1
  187. package/dist/types/ai-model/index.d.ts +0 -2
  188. package/dist/types/ai-model/inspect.d.ts +3 -2
  189. package/dist/types/ai-model/model-adapter/chat-completion.d.ts +3 -0
  190. package/dist/types/ai-model/model-adapter/custom-planning-types.d.ts +32 -0
  191. package/dist/types/ai-model/model-adapter/index.d.ts +2 -0
  192. package/dist/types/ai-model/model-adapter/locate.d.ts +3 -0
  193. package/dist/types/ai-model/model-adapter/planning.d.ts +4 -0
  194. package/dist/types/ai-model/{models → model-adapter}/types.d.ts +39 -4
  195. package/dist/types/ai-model/models/auto-glm/actions.d.ts +8 -5
  196. package/dist/types/ai-model/models/auto-glm/adapter.d.ts +1 -1
  197. package/dist/types/ai-model/models/auto-glm/locate.d.ts +2 -3
  198. package/dist/types/ai-model/models/auto-glm/parser.d.ts +6 -10
  199. package/dist/types/ai-model/models/auto-glm/planning.d.ts +5 -4
  200. package/dist/types/ai-model/models/default.d.ts +1 -1
  201. package/dist/types/ai-model/models/doubao.d.ts +1 -1
  202. package/dist/types/ai-model/models/gemini.d.ts +1 -1
  203. package/dist/types/ai-model/models/glm.d.ts +1 -1
  204. package/dist/types/ai-model/models/gpt.d.ts +1 -1
  205. package/dist/types/ai-model/models/index.d.ts +1 -1
  206. package/dist/types/ai-model/models/kimi.d.ts +1 -1
  207. package/dist/types/ai-model/models/mimo.d.ts +1 -1
  208. package/dist/types/ai-model/models/qwen.d.ts +1 -1
  209. package/dist/types/ai-model/models/registry.d.ts +10 -10
  210. package/dist/types/ai-model/models/ui-tars/actions.d.ts +3 -0
  211. package/dist/types/ai-model/models/ui-tars/adapter.d.ts +1 -1
  212. package/dist/types/ai-model/models/ui-tars/parser.d.ts +72 -0
  213. package/dist/types/ai-model/models/ui-tars/planning.d.ts +3 -68
  214. package/dist/types/ai-model/service-caller/index.d.ts +4 -5
  215. package/dist/types/ai-model/shared/model-locate-result/coordinate-distance.d.ts +4 -0
  216. package/dist/types/ai-model/shared/model-locate-result/factory.d.ts +2 -1
  217. package/dist/types/ai-model/shared/model-locate-result/index.d.ts +4 -2
  218. package/dist/types/ai-model/shared/model-locate-result/types.d.ts +0 -1
  219. package/dist/types/ai-model/shared/planning-action.d.ts +20 -0
  220. package/dist/types/ai-model/workflows/inspect/planning-action-locate.d.ts +4 -0
  221. package/dist/types/ai-model/workflows/inspect/types.d.ts +21 -2
  222. package/dist/types/ai-model/workflows/planning/custom-planning.d.ts +7 -0
  223. package/dist/types/ai-model/workflows/planning/locate-normalization.d.ts +9 -0
  224. package/dist/types/common.d.ts +1 -0
  225. package/dist/types/device/index.d.ts +17 -17
  226. package/dist/types/element-describer.d.ts +46 -0
  227. package/dist/types/index.d.ts +2 -1
  228. package/dist/types/service/index.d.ts +3 -1
  229. package/dist/types/types.d.ts +5 -0
  230. package/dist/types/yaml.d.ts +4 -1
  231. package/package.json +3 -3
  232. package/dist/es/ai-model/models/chat-content.mjs +0 -14
  233. package/dist/es/ai-model/models/chat-content.mjs.map +0 -1
  234. package/dist/es/ai-model/models/resolved.mjs +0 -107
  235. package/dist/es/ai-model/models/resolved.mjs.map +0 -1
  236. package/dist/es/ai-model/prompt/recorder-ui-describer.mjs +0 -56
  237. package/dist/es/ai-model/prompt/recorder-ui-describer.mjs.map +0 -1
  238. package/dist/es/ai-model/prompt/ui-tars-planning.mjs.map +0 -1
  239. package/dist/es/recorder-ui-describer.mjs +0 -379
  240. package/dist/es/recorder-ui-describer.mjs.map +0 -1
  241. package/dist/lib/ai-model/models/chat-content.js.map +0 -1
  242. package/dist/lib/ai-model/models/resolved.js +0 -141
  243. package/dist/lib/ai-model/models/resolved.js.map +0 -1
  244. package/dist/lib/ai-model/models/types.js.map +0 -1
  245. package/dist/lib/ai-model/prompt/recorder-ui-describer.js +0 -90
  246. package/dist/lib/ai-model/prompt/recorder-ui-describer.js.map +0 -1
  247. package/dist/lib/ai-model/prompt/ui-tars-planning.js.map +0 -1
  248. package/dist/lib/recorder-ui-describer.js +0 -419
  249. package/dist/lib/recorder-ui-describer.js.map +0 -1
  250. package/dist/types/ai-model/models/chat-content.d.ts +0 -2
  251. package/dist/types/ai-model/prompt/recorder-ui-describer.d.ts +0 -1
  252. package/dist/types/recorder-ui-describer.d.ts +0 -20
  253. /package/dist/es/ai-model/{models/types.mjs → model-adapter/custom-planning-types.mjs} +0 -0
  254. /package/dist/lib/ai-model/{models → model-adapter}/types.js +0 -0
  255. /package/dist/types/ai-model/{models/resolved.d.ts → model-adapter/resolve.d.ts} +0 -0
  256. /package/dist/types/ai-model/{prompt/ui-tars-planning.d.ts → models/ui-tars/prompt.d.ts} +0 -0
@@ -27,27 +27,7 @@ __webpack_require__.d(__webpack_exports__, {
27
27
  transformAutoGLMAction: ()=>transformAutoGLMAction
28
28
  });
29
29
  const logger_namespaceObject = require("@midscene/shared/logger");
30
- const bbox_js_namespaceObject = require("../../shared/model-locate-result/bbox.js");
31
- const pixel_bbox_mapper_js_namespaceObject = require("../../shared/model-locate-result/pixel-bbox-mapper.js");
32
30
  const debug = (0, logger_namespaceObject.getDebug)('auto-glm-actions');
33
- const AUTO_GLM_COORDINATE_MAX = 1000;
34
- function autoGLMCoordinateToLocateParam(coordinate, size) {
35
- const ctx = {
36
- preparedSize: size
37
- };
38
- const pixelBbox = (0, pixel_bbox_mapper_js_namespaceObject.mapLocateResultToPixelBboxByCoordinates)({
39
- type: 'point',
40
- coordinates: coordinate
41
- }, ctx, {
42
- shape: 'point',
43
- order: 'xy',
44
- normalizedBy: AUTO_GLM_COORDINATE_MAX
45
- });
46
- return {
47
- prompt: '',
48
- locatedPixelBbox: (0, bbox_js_namespaceObject.finalizePixelBbox)(pixelBbox, coordinate, ctx)
49
- };
50
- }
51
31
  const BACK_BUTTON_NAMES = [
52
32
  'AndroidBackButton',
53
33
  'HarmonyBackButton'
@@ -61,7 +41,7 @@ function findActionName(actionSpace, knownNames, defaultName) {
61
41
  const match = actionSpace.find((a)=>knownNames.includes(a.name));
62
42
  return match ? match.name : defaultName;
63
43
  }
64
- function transformAutoGLMAction(action, size, actionSpace) {
44
+ function transformAutoGLMAction(action, { actionSpace, coordinateDistanceToPixels }) {
65
45
  try {
66
46
  switch(action._metadata){
67
47
  case 'finish':
@@ -84,12 +64,14 @@ function transformAutoGLMAction(action, size, actionSpace) {
84
64
  {
85
65
  const tapAction = doAction;
86
66
  debug('Transform Tap action:', tapAction);
87
- const locate = autoGLMCoordinateToLocateParam(tapAction.element, size);
88
67
  return [
89
68
  {
90
69
  type: 'Tap',
91
70
  param: {
92
- locate
71
+ locate: {
72
+ point: tapAction.element,
73
+ prompt: ''
74
+ }
93
75
  }
94
76
  }
95
77
  ];
@@ -98,12 +80,14 @@ function transformAutoGLMAction(action, size, actionSpace) {
98
80
  {
99
81
  const doubleTapAction = doAction;
100
82
  debug('Transform Double Tap action:', doubleTapAction);
101
- const locate = autoGLMCoordinateToLocateParam(doubleTapAction.element, size);
102
83
  return [
103
84
  {
104
85
  type: 'DoubleClick',
105
86
  param: {
106
- locate
87
+ locate: {
88
+ point: doubleTapAction.element,
89
+ prompt: ''
90
+ }
107
91
  }
108
92
  }
109
93
  ];
@@ -125,7 +109,6 @@ function transformAutoGLMAction(action, size, actionSpace) {
125
109
  {
126
110
  const swipeAction = doAction;
127
111
  debug('Transform Swipe action:', swipeAction);
128
- const locate = autoGLMCoordinateToLocateParam(swipeAction.start, size);
129
112
  const deltaX = swipeAction.end[0] - swipeAction.start[0];
130
113
  const deltaY = swipeAction.end[1] - swipeAction.start[1];
131
114
  let direction;
@@ -133,10 +116,10 @@ function transformAutoGLMAction(action, size, actionSpace) {
133
116
  const absDeltaX = Math.abs(deltaX);
134
117
  const absDeltaY = Math.abs(deltaY);
135
118
  if (absDeltaY > absDeltaX) {
136
- distance = Math.round(absDeltaY * size.height / AUTO_GLM_COORDINATE_MAX);
119
+ distance = coordinateDistanceToPixels(deltaY, 'y');
137
120
  direction = deltaY > 0 ? 'up' : 'down';
138
121
  } else {
139
- distance = Math.round(absDeltaX * size.width / AUTO_GLM_COORDINATE_MAX);
122
+ distance = coordinateDistanceToPixels(deltaX, 'x');
140
123
  direction = deltaX > 0 ? 'left' : 'right';
141
124
  }
142
125
  debug(`Calculate swipe direction: ${direction}, distance: ${distance}`);
@@ -144,7 +127,10 @@ function transformAutoGLMAction(action, size, actionSpace) {
144
127
  {
145
128
  type: 'Scroll',
146
129
  param: {
147
- locate,
130
+ locate: {
131
+ point: swipeAction.start,
132
+ prompt: ''
133
+ },
148
134
  distance,
149
135
  direction
150
136
  },
@@ -156,12 +142,14 @@ function transformAutoGLMAction(action, size, actionSpace) {
156
142
  {
157
143
  const longPressAction = doAction;
158
144
  debug('Transform Long Press action:', longPressAction);
159
- const locate = autoGLMCoordinateToLocateParam(longPressAction.element, size);
160
145
  return [
161
146
  {
162
147
  type: 'LongPress',
163
148
  param: {
164
- locate
149
+ locate: {
150
+ point: longPressAction.element,
151
+ prompt: ''
152
+ }
165
153
  },
166
154
  thought: longPressAction.think || ''
167
155
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ai-model/models/auto-glm/actions.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/auto-glm/actions.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 { DeviceAction } from '@/device';\nimport type {\n PlanningAction,\n PlanningLocateParamWithLocatedPixelBbox,\n} from '@/types';\nimport { getDebug } from '@midscene/shared/logger';\nimport { finalizePixelBbox } from '../../shared/model-locate-result/bbox';\nimport { mapLocateResultToPixelBboxByCoordinates } from '../../shared/model-locate-result/pixel-bbox-mapper';\n\nconst debug = getDebug('auto-glm-actions');\n\n/**\n * Auto-GLM coordinate system range: [0, AUTO_GLM_COORDINATE_MAX]\n */\nconst AUTO_GLM_COORDINATE_MAX = 1000;\n\nfunction autoGLMCoordinateToLocateParam(\n coordinate: [number, number],\n size: { width: number; height: number },\n): PlanningLocateParamWithLocatedPixelBbox {\n const ctx = { preparedSize: size };\n const pixelBbox = mapLocateResultToPixelBboxByCoordinates(\n { type: 'point', coordinates: coordinate },\n ctx,\n { shape: 'point', order: 'xy', normalizedBy: AUTO_GLM_COORDINATE_MAX },\n );\n\n return {\n prompt: '',\n locatedPixelBbox: finalizePixelBbox(pixelBbox, coordinate, ctx),\n };\n}\n\nexport interface BaseAction {\n _metadata: string;\n think?: string;\n}\n\nexport interface TapAction extends BaseAction {\n _metadata: 'do';\n action: 'Tap';\n element: [number, number];\n}\n\nexport interface DoubleTapAction extends BaseAction {\n _metadata: 'do';\n action: 'Double Tap';\n element: [number, number];\n}\n\nexport interface TypeAction extends BaseAction {\n _metadata: 'do';\n action: 'Type';\n text: string;\n}\n\nexport interface SwipeAction extends BaseAction {\n _metadata: 'do';\n action: 'Swipe';\n start: [number, number];\n end: [number, number];\n}\n\nexport interface LongPressAction extends BaseAction {\n _metadata: 'do';\n action: 'Long Press';\n element: [number, number];\n}\n\nexport interface LaunchAction extends BaseAction {\n _metadata: 'do';\n action: 'Launch';\n app: string;\n}\n\nexport interface BackAction extends BaseAction {\n _metadata: 'do';\n action: 'Back';\n}\n\nexport interface HomeAction extends BaseAction {\n _metadata: 'do';\n action: 'Home';\n}\n\nexport interface WaitAction extends BaseAction {\n _metadata: 'do';\n action: 'Wait';\n durationMs: number;\n}\n\nexport interface InteractAction extends BaseAction {\n _metadata: 'do';\n action: 'Interact';\n}\n\nexport interface CallAPIAction extends BaseAction {\n _metadata: 'do';\n action: 'Call_API';\n instruction: string;\n}\n\nexport interface TakeoverAction extends BaseAction {\n _metadata: 'do';\n action: 'Take_over';\n message: string;\n}\n\nexport interface NoteAction extends BaseAction {\n _metadata: 'do';\n action: 'Note';\n message: string;\n}\n\nexport interface FinishAction extends BaseAction {\n _metadata: 'finish';\n message: string;\n}\n\nexport type ParsedAction =\n | TapAction\n | DoubleTapAction\n | TypeAction\n | SwipeAction\n | LongPressAction\n | LaunchAction\n | BackAction\n | HomeAction\n | WaitAction\n | InteractAction\n | CallAPIAction\n | TakeoverAction\n | NoteAction\n | FinishAction;\n\nconst BACK_BUTTON_NAMES = ['AndroidBackButton', 'HarmonyBackButton'];\nconst HOME_BUTTON_NAMES = ['AndroidHomeButton', 'HarmonyHomeButton'];\n\n/**\n * Find the action name in actionSpace that matches one of the known names.\n * Falls back to defaultName if no match found or actionSpace is not provided.\n */\nfunction findActionName(\n actionSpace: DeviceAction[] | undefined,\n knownNames: string[],\n defaultName: string,\n): string {\n if (!actionSpace) return defaultName;\n const match = actionSpace.find((a) => knownNames.includes(a.name));\n return match ? match.name : defaultName;\n}\n\nexport function transformAutoGLMAction(\n action: ParsedAction,\n size: { width: number; height: number },\n actionSpace?: DeviceAction[],\n): PlanningAction[] {\n try {\n switch (action._metadata) {\n case 'finish': {\n const finishAction = action as FinishAction;\n debug('Transform finish action:', finishAction);\n return [\n {\n type: 'Finished',\n param: {},\n thought: finishAction.message,\n },\n ];\n }\n case 'do': {\n const doAction = action as\n | TapAction\n | DoubleTapAction\n | TypeAction\n | SwipeAction\n | LongPressAction\n | LaunchAction\n | BackAction\n | HomeAction\n | WaitAction\n | InteractAction\n | CallAPIAction\n | TakeoverAction\n | NoteAction;\n\n switch ((doAction as any).action) {\n case 'Tap': {\n const tapAction = doAction as TapAction;\n debug('Transform Tap action:', tapAction);\n const locate = autoGLMCoordinateToLocateParam(\n tapAction.element,\n size,\n );\n\n return [\n {\n type: 'Tap',\n param: {\n locate,\n },\n },\n ];\n }\n case 'Double Tap': {\n const doubleTapAction = doAction as DoubleTapAction;\n debug('Transform Double Tap action:', doubleTapAction);\n const locate = autoGLMCoordinateToLocateParam(\n doubleTapAction.element,\n size,\n );\n\n return [\n {\n type: 'DoubleClick',\n param: {\n locate,\n },\n },\n ];\n }\n case 'Type': {\n const typeAction = doAction as TypeAction;\n debug('Transform Type action:', typeAction);\n\n return [\n {\n type: 'Input',\n param: {\n value: typeAction.text,\n },\n },\n ];\n }\n case 'Swipe': {\n const swipeAction = doAction as SwipeAction;\n debug('Transform Swipe action:', swipeAction);\n\n const locate = autoGLMCoordinateToLocateParam(\n swipeAction.start,\n size,\n );\n\n // Calculate horizontal and vertical delta in [0,AUTO_GLM_COORDINATE_MAX] coordinate system\n const deltaX = swipeAction.end[0] - swipeAction.start[0];\n const deltaY = swipeAction.end[1] - swipeAction.start[1];\n\n // Determine direction and distance\n let direction: 'up' | 'down' | 'left' | 'right';\n let distance: number;\n\n const absDeltaX = Math.abs(deltaX);\n const absDeltaY = Math.abs(deltaY);\n\n if (absDeltaY > absDeltaX) {\n // Vertical scroll\n distance = Math.round(\n (absDeltaY * size.height) / AUTO_GLM_COORDINATE_MAX,\n );\n direction = deltaY > 0 ? 'up' : 'down';\n } else {\n // Horizontal scroll\n distance = Math.round(\n (absDeltaX * size.width) / AUTO_GLM_COORDINATE_MAX,\n );\n direction = deltaX > 0 ? 'left' : 'right';\n }\n\n debug(\n `Calculate swipe direction: ${direction}, distance: ${distance}`,\n );\n\n return [\n {\n type: 'Scroll',\n param: {\n locate,\n // The scrolling direction here all refers to which direction of the page's content will appear on the screen.\n distance,\n direction,\n },\n thought: swipeAction.think || '',\n },\n ];\n }\n case 'Long Press': {\n const longPressAction = doAction as LongPressAction;\n debug('Transform Long Press action:', longPressAction);\n const locate = autoGLMCoordinateToLocateParam(\n longPressAction.element,\n size,\n );\n\n return [\n {\n type: 'LongPress',\n param: {\n locate,\n },\n thought: longPressAction.think || '',\n },\n ];\n }\n case 'Back': {\n const backAction = doAction as BackAction;\n debug('Transform Back action:', backAction);\n return [\n {\n type: findActionName(\n actionSpace,\n BACK_BUTTON_NAMES,\n 'AndroidBackButton',\n ),\n param: {},\n thought: backAction.think || '',\n },\n ];\n }\n case 'Home': {\n const homeAction = doAction as HomeAction;\n debug('Transform Home action:', homeAction);\n return [\n {\n type: findActionName(\n actionSpace,\n HOME_BUTTON_NAMES,\n 'AndroidHomeButton',\n ),\n param: {},\n thought: homeAction.think || '',\n },\n ];\n }\n case 'Wait': {\n const waitAction = doAction as WaitAction;\n debug('Transform Wait action:', waitAction);\n return [\n {\n type: 'Sleep',\n param: {\n timeMs: waitAction.durationMs,\n },\n thought: waitAction.think || '',\n },\n ];\n }\n case 'Launch': {\n const launchAction = doAction as LaunchAction;\n debug('Transform Launch action:', launchAction);\n return [\n {\n type: 'Launch',\n param: { uri: launchAction.app },\n thought: launchAction.think || '',\n },\n ];\n }\n case 'Interact': {\n throw new Error(\n `Action \"Interact\" from auto-glm is not supported in the current implementation.`,\n );\n }\n case 'Call_API': {\n throw new Error(\n `Action \"Call_API\" from auto-glm is not supported in the current implementation.`,\n );\n }\n case 'Take_over': {\n throw new Error(\n `Action \"Take_over\" from auto-glm is not supported in the current implementation.`,\n );\n }\n case 'Note': {\n throw new Error(\n `Action \"Note\" from auto-glm is not supported in the current implementation.`,\n );\n }\n default:\n throw new Error(\n `Unknown do() action type: ${(doAction as any).action}`,\n );\n }\n }\n default:\n throw new Error(\n `Unknown action metadata: ${(action as any)._metadata}`,\n );\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n debug('Transform error:', errorMessage);\n throw new Error(`Failed to transform action: ${errorMessage}`);\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debug","getDebug","AUTO_GLM_COORDINATE_MAX","autoGLMCoordinateToLocateParam","coordinate","size","ctx","pixelBbox","mapLocateResultToPixelBboxByCoordinates","finalizePixelBbox","BACK_BUTTON_NAMES","HOME_BUTTON_NAMES","findActionName","actionSpace","knownNames","defaultName","match","a","transformAutoGLMAction","action","finishAction","doAction","tapAction","locate","doubleTapAction","typeAction","swipeAction","deltaX","deltaY","direction","distance","absDeltaX","Math","absDeltaY","longPressAction","backAction","homeAction","waitAction","launchAction","Error","error","errorMessage","String"],"mappings":"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"}
1
+ {"version":3,"file":"ai-model/models/auto-glm/actions.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/auto-glm/actions.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 { DeviceAction } from '@/device';\nimport type { PlanningAction } from '@/types';\nimport { getDebug } from '@midscene/shared/logger';\nimport type { CoordinateDistanceAxis } from '../../shared/model-locate-result';\nimport type {\n LocatePlanningAction,\n ScrollPlanningAction,\n} from '../../shared/planning-action';\n\nconst debug = getDebug('auto-glm-actions');\n\ntype CoordinateDistanceToPixels = (\n delta: number,\n axis: CoordinateDistanceAxis,\n) => number;\n\nexport interface BaseAction {\n _metadata: string;\n think?: string;\n}\n\nexport interface TapAction extends BaseAction {\n _metadata: 'do';\n action: 'Tap';\n element: [number, number];\n}\n\nexport interface DoubleTapAction extends BaseAction {\n _metadata: 'do';\n action: 'Double Tap';\n element: [number, number];\n}\n\nexport interface TypeAction extends BaseAction {\n _metadata: 'do';\n action: 'Type';\n text: string;\n}\n\nexport interface SwipeAction extends BaseAction {\n _metadata: 'do';\n action: 'Swipe';\n start: [number, number];\n end: [number, number];\n}\n\nexport interface LongPressAction extends BaseAction {\n _metadata: 'do';\n action: 'Long Press';\n element: [number, number];\n}\n\nexport interface LaunchAction extends BaseAction {\n _metadata: 'do';\n action: 'Launch';\n app: string;\n}\n\nexport interface BackAction extends BaseAction {\n _metadata: 'do';\n action: 'Back';\n}\n\nexport interface HomeAction extends BaseAction {\n _metadata: 'do';\n action: 'Home';\n}\n\nexport interface WaitAction extends BaseAction {\n _metadata: 'do';\n action: 'Wait';\n durationMs: number;\n}\n\nexport interface InteractAction extends BaseAction {\n _metadata: 'do';\n action: 'Interact';\n}\n\nexport interface CallAPIAction extends BaseAction {\n _metadata: 'do';\n action: 'Call_API';\n instruction: string;\n}\n\nexport interface TakeoverAction extends BaseAction {\n _metadata: 'do';\n action: 'Take_over';\n message: string;\n}\n\nexport interface NoteAction extends BaseAction {\n _metadata: 'do';\n action: 'Note';\n message: string;\n}\n\nexport interface FinishAction extends BaseAction {\n _metadata: 'finish';\n message: string;\n}\n\nexport type AutoGLMParsedAction =\n | TapAction\n | DoubleTapAction\n | TypeAction\n | SwipeAction\n | LongPressAction\n | LaunchAction\n | BackAction\n | HomeAction\n | WaitAction\n | InteractAction\n | CallAPIAction\n | TakeoverAction\n | NoteAction\n | FinishAction;\n\nconst BACK_BUTTON_NAMES = ['AndroidBackButton', 'HarmonyBackButton'];\nconst HOME_BUTTON_NAMES = ['AndroidHomeButton', 'HarmonyHomeButton'];\n\n/**\n * Find the action name in actionSpace that matches one of the known names.\n * Falls back to defaultName if no match found or actionSpace is not provided.\n */\nfunction findActionName(\n actionSpace: DeviceAction[] | undefined,\n knownNames: string[],\n defaultName: string,\n): string {\n if (!actionSpace) return defaultName;\n const match = actionSpace.find((a) => knownNames.includes(a.name));\n return match ? match.name : defaultName;\n}\n\nexport function transformAutoGLMAction(\n action: AutoGLMParsedAction,\n {\n actionSpace,\n coordinateDistanceToPixels,\n }: {\n actionSpace?: DeviceAction[];\n coordinateDistanceToPixels: CoordinateDistanceToPixels;\n },\n): PlanningAction[] {\n try {\n switch (action._metadata) {\n case 'finish': {\n const finishAction = action as FinishAction;\n debug('Transform finish action:', finishAction);\n return [\n {\n type: 'Finished',\n param: {},\n thought: finishAction.message,\n },\n ];\n }\n case 'do': {\n const doAction = action as\n | TapAction\n | DoubleTapAction\n | TypeAction\n | SwipeAction\n | LongPressAction\n | LaunchAction\n | BackAction\n | HomeAction\n | WaitAction\n | InteractAction\n | CallAPIAction\n | TakeoverAction\n | NoteAction;\n\n switch ((doAction as any).action) {\n case 'Tap': {\n const tapAction = doAction as TapAction;\n debug('Transform Tap action:', tapAction);\n\n return [\n {\n type: 'Tap',\n param: {\n locate: {\n point: tapAction.element,\n prompt: '',\n },\n },\n } satisfies LocatePlanningAction<'Tap'>,\n ];\n }\n case 'Double Tap': {\n const doubleTapAction = doAction as DoubleTapAction;\n debug('Transform Double Tap action:', doubleTapAction);\n\n return [\n {\n type: 'DoubleClick',\n param: {\n locate: {\n point: doubleTapAction.element,\n prompt: '',\n },\n },\n } satisfies LocatePlanningAction<'DoubleClick'>,\n ];\n }\n case 'Type': {\n const typeAction = doAction as TypeAction;\n debug('Transform Type action:', typeAction);\n\n return [\n {\n type: 'Input',\n param: {\n value: typeAction.text,\n },\n },\n ];\n }\n case 'Swipe': {\n const swipeAction = doAction as SwipeAction;\n debug('Transform Swipe action:', swipeAction);\n\n // Calculate horizontal and vertical delta in the model coordinate system.\n const deltaX = swipeAction.end[0] - swipeAction.start[0];\n const deltaY = swipeAction.end[1] - swipeAction.start[1];\n\n // Determine direction and distance\n let direction: 'up' | 'down' | 'left' | 'right';\n let distance: number;\n\n const absDeltaX = Math.abs(deltaX);\n const absDeltaY = Math.abs(deltaY);\n\n if (absDeltaY > absDeltaX) {\n // Vertical scroll\n distance = coordinateDistanceToPixels(deltaY, 'y');\n direction = deltaY > 0 ? 'up' : 'down';\n } else {\n // Horizontal scroll\n distance = coordinateDistanceToPixels(deltaX, 'x');\n direction = deltaX > 0 ? 'left' : 'right';\n }\n\n debug(\n `Calculate swipe direction: ${direction}, distance: ${distance}`,\n );\n\n return [\n {\n type: 'Scroll',\n param: {\n locate: {\n point: swipeAction.start,\n prompt: '',\n },\n // The scrolling direction here all refers to which direction of the page's content will appear on the screen.\n distance,\n direction,\n },\n thought: swipeAction.think || '',\n } satisfies ScrollPlanningAction,\n ];\n }\n case 'Long Press': {\n const longPressAction = doAction as LongPressAction;\n debug('Transform Long Press action:', longPressAction);\n\n return [\n {\n type: 'LongPress',\n param: {\n locate: {\n point: longPressAction.element,\n prompt: '',\n },\n },\n thought: longPressAction.think || '',\n } satisfies LocatePlanningAction<'LongPress'>,\n ];\n }\n case 'Back': {\n const backAction = doAction as BackAction;\n debug('Transform Back action:', backAction);\n return [\n {\n type: findActionName(\n actionSpace,\n BACK_BUTTON_NAMES,\n 'AndroidBackButton',\n ),\n param: {},\n thought: backAction.think || '',\n },\n ];\n }\n case 'Home': {\n const homeAction = doAction as HomeAction;\n debug('Transform Home action:', homeAction);\n return [\n {\n type: findActionName(\n actionSpace,\n HOME_BUTTON_NAMES,\n 'AndroidHomeButton',\n ),\n param: {},\n thought: homeAction.think || '',\n },\n ];\n }\n case 'Wait': {\n const waitAction = doAction as WaitAction;\n debug('Transform Wait action:', waitAction);\n return [\n {\n type: 'Sleep',\n param: {\n timeMs: waitAction.durationMs,\n },\n thought: waitAction.think || '',\n },\n ];\n }\n case 'Launch': {\n const launchAction = doAction as LaunchAction;\n debug('Transform Launch action:', launchAction);\n return [\n {\n type: 'Launch',\n param: { uri: launchAction.app },\n thought: launchAction.think || '',\n },\n ];\n }\n case 'Interact': {\n throw new Error(\n `Action \"Interact\" from auto-glm is not supported in the current implementation.`,\n );\n }\n case 'Call_API': {\n throw new Error(\n `Action \"Call_API\" from auto-glm is not supported in the current implementation.`,\n );\n }\n case 'Take_over': {\n throw new Error(\n `Action \"Take_over\" from auto-glm is not supported in the current implementation.`,\n );\n }\n case 'Note': {\n throw new Error(\n `Action \"Note\" from auto-glm is not supported in the current implementation.`,\n );\n }\n default:\n throw new Error(\n `Unknown do() action type: ${(doAction as any).action}`,\n );\n }\n }\n default:\n throw new Error(\n `Unknown action metadata: ${(action as any)._metadata}`,\n );\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n debug('Transform error:', errorMessage);\n throw new Error(`Failed to transform action: ${errorMessage}`);\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debug","getDebug","BACK_BUTTON_NAMES","HOME_BUTTON_NAMES","findActionName","actionSpace","knownNames","defaultName","match","a","transformAutoGLMAction","action","coordinateDistanceToPixels","finishAction","doAction","tapAction","doubleTapAction","typeAction","swipeAction","deltaX","deltaY","direction","distance","absDeltaX","Math","absDeltaY","longPressAction","backAction","homeAction","waitAction","launchAction","Error","error","errorMessage","String"],"mappings":"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"}
@@ -28,9 +28,7 @@ __webpack_require__.d(__webpack_exports__, {
28
28
  });
29
29
  const external_locate_js_namespaceObject = require("./locate.js");
30
30
  const external_planning_js_namespaceObject = require("./planning.js");
31
- const external_prompt_js_namespaceObject = require("./prompt.js");
32
- const defaultAutoGlmReplanningCycleLimit = 100;
33
- function createAutoGlmAdapter({ getPlanPrompt, getLocatePrompt }) {
31
+ function createAutoGlmAdapter(isMultilingual) {
34
32
  return {
35
33
  chatCompletion: {
36
34
  unsupportedUserConfig: [
@@ -57,24 +55,18 @@ function createAutoGlmAdapter({ getPlanPrompt, getLocatePrompt }) {
57
55
  planning: {
58
56
  kind: 'custom',
59
57
  cacheEnabled: false,
60
- defaultReplanningCycleLimit: defaultAutoGlmReplanningCycleLimit,
61
- planFn: (userInstruction, options)=>(0, external_planning_js_namespaceObject.autoGlmPlanning)(userInstruction, options, getPlanPrompt)
58
+ defaultReplanningCycleLimit: 100,
59
+ planner: (0, external_planning_js_namespaceObject.createAutoGlmPlanner)(isMultilingual)
62
60
  },
63
61
  locate: {
64
62
  kind: 'custom',
65
- locateFn: (elementDescription, options)=>(0, external_locate_js_namespaceObject.autoGlmLocate)(elementDescription, options, getLocatePrompt)
63
+ planningTapLocator: (0, external_locate_js_namespaceObject.createAutoGlmPlanningTapLocator)(isMultilingual)
66
64
  }
67
65
  };
68
66
  }
69
67
  const autoGlmAdapters = {
70
- 'auto-glm': createAutoGlmAdapter({
71
- getPlanPrompt: external_prompt_js_namespaceObject.getAutoGLMChinesePlanPrompt,
72
- getLocatePrompt: external_prompt_js_namespaceObject.getAutoGLMChineseLocatePrompt
73
- }),
74
- 'auto-glm-multilingual': createAutoGlmAdapter({
75
- getPlanPrompt: external_prompt_js_namespaceObject.getAutoGLMMultilingualPlanPrompt,
76
- getLocatePrompt: external_prompt_js_namespaceObject.getAutoGLMMultilingualLocatePrompt
77
- })
68
+ 'auto-glm': createAutoGlmAdapter(false),
69
+ 'auto-glm-multilingual': createAutoGlmAdapter(true)
78
70
  };
79
71
  exports.autoGlmAdapters = __webpack_exports__.autoGlmAdapters;
80
72
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -1 +1 @@
1
- {"version":3,"file":"ai-model/models/auto-glm/adapter.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/auto-glm/adapter.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 { TModelFamily } from '@midscene/shared/env';\nimport type { ModelAdapterDefinition } from '../types';\nimport { autoGlmLocate } from './locate';\nimport { autoGlmPlanning } from './planning';\nimport {\n getAutoGLMChineseLocatePrompt,\n getAutoGLMChinesePlanPrompt,\n getAutoGLMMultilingualLocatePrompt,\n getAutoGLMMultilingualPlanPrompt,\n} from './prompt';\n\nconst defaultAutoGlmReplanningCycleLimit = 100;\n\nfunction createAutoGlmAdapter({\n getPlanPrompt,\n getLocatePrompt,\n}: {\n getPlanPrompt: () => string;\n getLocatePrompt: () => string;\n}): ModelAdapterDefinition {\n return {\n chatCompletion: {\n unsupportedUserConfig: [\n 'reasoningEnabled',\n 'reasoningEffort',\n 'reasoningBudget',\n ],\n buildChatCompletionParams: ({ midsceneDefaults, userConfig }) => {\n const commonOverrideConfig: Record<string, unknown> = {};\n\n if (userConfig.temperature !== undefined) {\n commonOverrideConfig.temperature = userConfig.temperature;\n }\n\n const modelSpecificConfig = {\n top_p: 0.85,\n frequency_penalty: 0.2,\n };\n\n return {\n config: {\n ...midsceneDefaults,\n ...commonOverrideConfig,\n ...modelSpecificConfig,\n },\n };\n },\n },\n planning: {\n kind: 'custom',\n cacheEnabled: false,\n defaultReplanningCycleLimit: defaultAutoGlmReplanningCycleLimit,\n planFn: (userInstruction, options) =>\n autoGlmPlanning(userInstruction, options, getPlanPrompt),\n },\n locate: {\n kind: 'custom',\n locateFn: (elementDescription, options) =>\n autoGlmLocate(elementDescription, options, getLocatePrompt),\n },\n };\n}\n\nexport const autoGlmAdapters = {\n 'auto-glm': createAutoGlmAdapter({\n getPlanPrompt: getAutoGLMChinesePlanPrompt,\n getLocatePrompt: getAutoGLMChineseLocatePrompt,\n }),\n 'auto-glm-multilingual': createAutoGlmAdapter({\n getPlanPrompt: getAutoGLMMultilingualPlanPrompt,\n getLocatePrompt: getAutoGLMMultilingualLocatePrompt,\n }),\n} satisfies Pick<\n Record<TModelFamily, ModelAdapterDefinition>,\n 'auto-glm' | 'auto-glm-multilingual'\n>;\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","defaultAutoGlmReplanningCycleLimit","createAutoGlmAdapter","getPlanPrompt","getLocatePrompt","midsceneDefaults","userConfig","commonOverrideConfig","undefined","modelSpecificConfig","userInstruction","options","autoGlmPlanning","elementDescription","autoGlmLocate","autoGlmAdapters","getAutoGLMChinesePlanPrompt","getAutoGLMChineseLocatePrompt","getAutoGLMMultilingualPlanPrompt","getAutoGLMMultilingualLocatePrompt"],"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;;;;;;;;;;ACKA,MAAMI,qCAAqC;AAE3C,SAASC,qBAAqB,EAC5BC,aAAa,EACbC,eAAe,EAIhB;IACC,OAAO;QACL,gBAAgB;YACd,uBAAuB;gBACrB;gBACA;gBACA;aACD;YACD,2BAA2B,CAAC,EAAEC,gBAAgB,EAAEC,UAAU,EAAE;gBAC1D,MAAMC,uBAAgD,CAAC;gBAEvD,IAAID,AAA2BE,WAA3BF,WAAW,WAAW,EACxBC,qBAAqB,WAAW,GAAGD,WAAW,WAAW;gBAG3D,MAAMG,sBAAsB;oBAC1B,OAAO;oBACP,mBAAmB;gBACrB;gBAEA,OAAO;oBACL,QAAQ;wBACN,GAAGJ,gBAAgB;wBACnB,GAAGE,oBAAoB;wBACvB,GAAGE,mBAAmB;oBACxB;gBACF;YACF;QACF;QACA,UAAU;YACR,MAAM;YACN,cAAc;YACd,6BAA6BR;YAC7B,QAAQ,CAACS,iBAAiBC,UACxBC,AAAAA,IAAAA,qCAAAA,eAAAA,AAAAA,EAAgBF,iBAAiBC,SAASR;QAC9C;QACA,QAAQ;YACN,MAAM;YACN,UAAU,CAACU,oBAAoBF,UAC7BG,AAAAA,IAAAA,mCAAAA,aAAAA,AAAAA,EAAcD,oBAAoBF,SAASP;QAC/C;IACF;AACF;AAEO,MAAMW,kBAAkB;IAC7B,YAAYb,qBAAqB;QAC/B,eAAec,mCAAAA,2BAA2BA;QAC1C,iBAAiBC,mCAAAA,6BAA6BA;IAChD;IACA,yBAAyBf,qBAAqB;QAC5C,eAAegB,mCAAAA,gCAAgCA;QAC/C,iBAAiBC,mCAAAA,kCAAkCA;IACrD;AACF"}
1
+ {"version":3,"file":"ai-model/models/auto-glm/adapter.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/auto-glm/adapter.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 { TModelFamily } from '@midscene/shared/env';\nimport type { ModelAdapterDefinition } from '../../model-adapter/types';\nimport { createAutoGlmPlanningTapLocator } from './locate';\nimport { createAutoGlmPlanner } from './planning';\n\nfunction createAutoGlmAdapter(isMultilingual: boolean): ModelAdapterDefinition {\n return {\n chatCompletion: {\n unsupportedUserConfig: [\n 'reasoningEnabled',\n 'reasoningEffort',\n 'reasoningBudget',\n ],\n buildChatCompletionParams: ({ midsceneDefaults, userConfig }) => {\n const commonOverrideConfig: Record<string, unknown> = {};\n\n if (userConfig.temperature !== undefined) {\n commonOverrideConfig.temperature = userConfig.temperature;\n }\n\n const modelSpecificConfig = {\n top_p: 0.85,\n frequency_penalty: 0.2,\n };\n\n return {\n config: {\n ...midsceneDefaults,\n ...commonOverrideConfig,\n ...modelSpecificConfig,\n },\n };\n },\n },\n planning: {\n kind: 'custom',\n cacheEnabled: false,\n defaultReplanningCycleLimit: 100,\n planner: createAutoGlmPlanner(isMultilingual),\n },\n locate: {\n kind: 'custom',\n planningTapLocator: createAutoGlmPlanningTapLocator(isMultilingual),\n },\n };\n}\n\nexport const autoGlmAdapters = {\n 'auto-glm': createAutoGlmAdapter(false),\n 'auto-glm-multilingual': createAutoGlmAdapter(true),\n} satisfies Pick<\n Record<TModelFamily, ModelAdapterDefinition>,\n 'auto-glm' | 'auto-glm-multilingual'\n>;\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","createAutoGlmAdapter","isMultilingual","midsceneDefaults","userConfig","commonOverrideConfig","undefined","modelSpecificConfig","createAutoGlmPlanner","createAutoGlmPlanningTapLocator","autoGlmAdapters"],"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;;;;;;;;;ACDA,SAASI,qBAAqBC,cAAuB;IACnD,OAAO;QACL,gBAAgB;YACd,uBAAuB;gBACrB;gBACA;gBACA;aACD;YACD,2BAA2B,CAAC,EAAEC,gBAAgB,EAAEC,UAAU,EAAE;gBAC1D,MAAMC,uBAAgD,CAAC;gBAEvD,IAAID,AAA2BE,WAA3BF,WAAW,WAAW,EACxBC,qBAAqB,WAAW,GAAGD,WAAW,WAAW;gBAG3D,MAAMG,sBAAsB;oBAC1B,OAAO;oBACP,mBAAmB;gBACrB;gBAEA,OAAO;oBACL,QAAQ;wBACN,GAAGJ,gBAAgB;wBACnB,GAAGE,oBAAoB;wBACvB,GAAGE,mBAAmB;oBACxB;gBACF;YACF;QACF;QACA,UAAU;YACR,MAAM;YACN,cAAc;YACd,6BAA6B;YAC7B,SAASC,AAAAA,IAAAA,qCAAAA,oBAAAA,AAAAA,EAAqBN;QAChC;QACA,QAAQ;YACN,MAAM;YACN,oBAAoBO,AAAAA,IAAAA,mCAAAA,+BAAAA,AAAAA,EAAgCP;QACtD;IACF;AACF;AAEO,MAAMQ,kBAAkB;IAC7B,YAAYT,qBAAqB;IACjC,yBAAyBA,qBAAqB;AAChD"}
@@ -24,121 +24,19 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- autoGlmLocate: ()=>autoGlmLocate
27
+ createAutoGlmPlanningTapLocator: ()=>createAutoGlmPlanningTapLocator
28
28
  });
29
- const extractor_namespaceObject = require("@midscene/shared/extractor");
30
- const logger_namespaceObject = require("@midscene/shared/logger");
31
- const utils_namespaceObject = require("@midscene/shared/utils");
32
- const external_inspect_js_namespaceObject = require("../../inspect.js");
33
- const llm_locator_js_namespaceObject = require("../../prompt/llm-locator.js");
34
- const index_js_namespaceObject = require("../../service-caller/index.js");
35
- const bbox_js_namespaceObject = require("../../shared/model-locate-result/bbox.js");
36
- const pixel_bbox_mapper_js_namespaceObject = require("../../shared/model-locate-result/pixel-bbox-mapper.js");
37
- const locate_result_rect_js_namespaceObject = require("../../workflows/inspect/locate-result-rect.js");
38
- const search_area_mapping_js_namespaceObject = require("../../workflows/inspect/search-area-mapping.js");
39
- const external_parser_js_namespaceObject = require("./parser.js");
40
- const debugInspect = (0, logger_namespaceObject.getDebug)('ai:inspect');
41
- async function autoGlmLocate(elementDescription, options, getSystemPrompt) {
42
- const { context, modelRuntime } = options;
43
- const screenshotBase64 = context.screenshot.base64;
44
- (0, utils_namespaceObject.assert)(elementDescription, "cannot find the target element description");
45
- const elementDescriptionText = (0, external_inspect_js_namespaceObject.extraTextFromUserPrompt)(elementDescription);
46
- const userInstructionPrompt = (0, llm_locator_js_namespaceObject.findElementPrompt)(elementDescriptionText);
47
- const locateImage = options.searchConfig?.image ?? {
48
- imageBase64: screenshotBase64,
49
- width: context.shotSize.width,
50
- height: context.shotSize.height
51
- };
52
- const imagePayload = locateImage.imageBase64;
53
- const imageWidth = locateImage.width;
54
- const imageHeight = locateImage.height;
55
- const msgs = [
56
- {
57
- role: 'system',
58
- content: getSystemPrompt()
59
- },
60
- {
61
- role: 'user',
62
- content: [
63
- {
64
- type: 'image_url',
65
- image_url: {
66
- url: imagePayload,
67
- detail: 'high'
68
- }
69
- },
70
- {
71
- type: 'text',
72
- text: `Tap: ${userInstructionPrompt}`
73
- }
74
- ]
75
- }
76
- ];
77
- if ('string' != typeof elementDescription) {
78
- const addOns = await (0, external_inspect_js_namespaceObject.promptsToChatParam)({
79
- images: elementDescription.images,
80
- convertHttpImage2Base64: elementDescription.convertHttpImage2Base64
81
- });
82
- msgs.push(...addOns);
83
- }
84
- const { content: rawResponseContent, usage, rawChoiceMessage } = await (0, index_js_namespaceObject.callAIWithStringResponse)(msgs, modelRuntime, {
85
- abortSignal: options.abortSignal
86
- });
87
- debugInspect('auto-glm rawResponse:', rawResponseContent);
88
- const parsed = (0, external_parser_js_namespaceObject.parseAutoGLMLocateResponse)(rawResponseContent);
89
- debugInspect('auto-glm thinking:', parsed.think);
90
- debugInspect('auto-glm coordinates:', parsed.coordinates);
91
- let resRect;
92
- let matchedElement;
93
- let errors = [];
94
- if (parsed.error || !parsed.coordinates) {
95
- errors = [
96
- parsed.error || 'Failed to parse auto-glm response'
97
- ];
98
- debugInspect('auto-glm parse error:', errors[0]);
99
- } else {
100
- const { x, y } = parsed.coordinates;
101
- debugInspect('auto-glm coordinates [0-999]:', {
102
- x,
103
- y
104
- });
105
- const ctx = {
106
- preparedSize: {
107
- width: imageWidth,
108
- height: imageHeight
109
- }
110
- };
111
- const targetPixelBbox = (0, bbox_js_namespaceObject.finalizePixelBbox)((0, pixel_bbox_mapper_js_namespaceObject.mapLocateResultToPixelBboxByCoordinates)({
112
- type: 'point',
113
- coordinates: [
114
- x,
115
- y
116
- ]
117
- }, ctx, {
118
- shape: 'point',
119
- order: 'xy',
120
- normalizedBy: 1000
121
- }), parsed.coordinates, ctx);
122
- resRect = (0, locate_result_rect_js_namespaceObject.pixelBboxToRect)((0, search_area_mapping_js_namespaceObject.mapSearchAreaPixelBboxToOriginalPixelBbox)(targetPixelBbox, options.searchConfig?.mapping));
123
- debugInspect('auto-glm resRect:', resRect);
124
- const element = (0, extractor_namespaceObject.generateElementByRect)(resRect, elementDescriptionText);
125
- if (element) matchedElement = element;
126
- }
29
+ const planning_action_js_namespaceObject = require("../../shared/planning-action.js");
30
+ const external_prompt_js_namespaceObject = require("./prompt.js");
31
+ function createAutoGlmPlanningTapLocator(isMultilingual) {
127
32
  return {
128
- rect: resRect,
129
- parseResult: {
130
- element: matchedElement,
131
- errors
132
- },
133
- rawResponse: rawResponseContent,
134
- rawChoiceMessage,
135
- usage,
136
- reasoning_content: parsed.think
33
+ buildSystemPrompt: ()=>isMultilingual ? (0, external_prompt_js_namespaceObject.getAutoGLMMultilingualLocatePrompt)() : (0, external_prompt_js_namespaceObject.getAutoGLMChineseLocatePrompt)(),
34
+ getLocatedPixelBbox: planning_action_js_namespaceObject.getTapLocatedPixelBbox
137
35
  };
138
36
  }
139
- exports.autoGlmLocate = __webpack_exports__.autoGlmLocate;
37
+ exports.createAutoGlmPlanningTapLocator = __webpack_exports__.createAutoGlmPlanningTapLocator;
140
38
  for(var __rspack_i in __webpack_exports__)if (-1 === [
141
- "autoGlmLocate"
39
+ "createAutoGlmPlanningTapLocator"
142
40
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
143
41
  Object.defineProperty(exports, '__esModule', {
144
42
  value: true
@@ -1 +1 @@
1
- {"version":3,"file":"ai-model/models/auto-glm/locate.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/auto-glm/locate.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 { Rect } from '@/types';\nimport { generateElementByRect } from '@midscene/shared/extractor';\nimport { getDebug } from '@midscene/shared/logger';\nimport type { LocateResultElement } from '@midscene/shared/types';\nimport { assert } from '@midscene/shared/utils';\nimport type { TUserPrompt } from '../../../common';\nimport {\n type InspectAIArgs,\n extraTextFromUserPrompt,\n promptsToChatParam,\n} from '../../inspect';\nimport { findElementPrompt } from '../../prompt/llm-locator';\nimport { callAIWithStringResponse } from '../../service-caller/index';\nimport { finalizePixelBbox } from '../../shared/model-locate-result/bbox';\nimport { mapLocateResultToPixelBboxByCoordinates } from '../../shared/model-locate-result/pixel-bbox-mapper';\nimport { pixelBboxToRect } from '../../workflows/inspect/locate-result-rect';\nimport { mapSearchAreaPixelBboxToOriginalPixelBbox } from '../../workflows/inspect/search-area-mapping';\nimport type {\n LocateOptions,\n LocateResult,\n} from '../../workflows/inspect/types';\nimport { parseAutoGLMLocateResponse } from './parser';\n\nconst debugInspect = getDebug('ai:inspect');\n\nexport async function autoGlmLocate(\n elementDescription: TUserPrompt,\n options: LocateOptions,\n getSystemPrompt: () => string,\n): Promise<LocateResult> {\n const { context, modelRuntime } = options;\n const screenshotBase64 = context.screenshot.base64;\n\n assert(elementDescription, 'cannot find the target element description');\n const elementDescriptionText = extraTextFromUserPrompt(elementDescription);\n const userInstructionPrompt = findElementPrompt(elementDescriptionText);\n\n const locateImage = options.searchConfig?.image ?? {\n imageBase64: screenshotBase64,\n width: context.shotSize.width,\n height: context.shotSize.height,\n };\n const imagePayload = locateImage.imageBase64;\n const imageWidth = locateImage.width;\n const imageHeight = locateImage.height;\n\n const msgs: InspectAIArgs = [\n { role: 'system', content: getSystemPrompt() },\n {\n role: 'user',\n content: [\n {\n type: 'image_url',\n image_url: {\n url: imagePayload,\n detail: 'high',\n },\n },\n {\n type: 'text',\n text: `Tap: ${userInstructionPrompt}`,\n },\n ],\n },\n ];\n\n if (typeof elementDescription !== 'string') {\n const addOns = await promptsToChatParam({\n images: elementDescription.images,\n convertHttpImage2Base64: elementDescription.convertHttpImage2Base64,\n });\n msgs.push(...addOns);\n }\n\n const {\n content: rawResponseContent,\n usage,\n rawChoiceMessage,\n } = await callAIWithStringResponse(msgs, modelRuntime, {\n abortSignal: options.abortSignal,\n });\n\n debugInspect('auto-glm rawResponse:', rawResponseContent);\n\n const parsed = parseAutoGLMLocateResponse(rawResponseContent);\n\n debugInspect('auto-glm thinking:', parsed.think);\n debugInspect('auto-glm coordinates:', parsed.coordinates);\n\n let resRect: Rect | undefined;\n let matchedElement: LocateResultElement | undefined;\n let errors: string[] = [];\n\n if (parsed.error || !parsed.coordinates) {\n errors = [parsed.error || 'Failed to parse auto-glm response'];\n debugInspect('auto-glm parse error:', errors[0]);\n } else {\n const { x, y } = parsed.coordinates;\n\n debugInspect('auto-glm coordinates [0-999]:', { x, y });\n\n const ctx = { preparedSize: { width: imageWidth, height: imageHeight } };\n const targetPixelBbox = finalizePixelBbox(\n mapLocateResultToPixelBboxByCoordinates(\n { type: 'point', coordinates: [x, y] },\n ctx,\n { shape: 'point', order: 'xy', normalizedBy: 1000 },\n ),\n parsed.coordinates,\n ctx,\n );\n resRect = pixelBboxToRect(\n mapSearchAreaPixelBboxToOriginalPixelBbox(\n targetPixelBbox,\n options.searchConfig?.mapping,\n ),\n );\n\n debugInspect('auto-glm resRect:', resRect);\n\n const element: LocateResultElement = generateElementByRect(\n resRect,\n elementDescriptionText as string,\n );\n\n if (element) {\n matchedElement = element;\n }\n }\n\n return {\n rect: resRect,\n parseResult: {\n element: matchedElement,\n errors,\n },\n rawResponse: rawResponseContent,\n rawChoiceMessage,\n usage,\n reasoning_content: parsed.think,\n };\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debugInspect","getDebug","autoGlmLocate","elementDescription","options","getSystemPrompt","context","modelRuntime","screenshotBase64","assert","elementDescriptionText","extraTextFromUserPrompt","userInstructionPrompt","findElementPrompt","locateImage","imagePayload","imageWidth","imageHeight","msgs","addOns","promptsToChatParam","rawResponseContent","usage","rawChoiceMessage","callAIWithStringResponse","parsed","parseAutoGLMLocateResponse","resRect","matchedElement","errors","x","y","ctx","targetPixelBbox","finalizePixelBbox","mapLocateResultToPixelBboxByCoordinates","pixelBboxToRect","mapSearchAreaPixelBboxToOriginalPixelBbox","element","generateElementByRect"],"mappings":"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"}
1
+ {"version":3,"file":"ai-model/models/auto-glm/locate.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/auto-glm/locate.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 { PlanningTapLocatorDefinition } from '../../model-adapter/types';\nimport { getTapLocatedPixelBbox } from '../../shared/planning-action';\nimport {\n getAutoGLMChineseLocatePrompt,\n getAutoGLMMultilingualLocatePrompt,\n} from './prompt';\n\nexport function createAutoGlmPlanningTapLocator(\n isMultilingual: boolean,\n): PlanningTapLocatorDefinition {\n return {\n buildSystemPrompt: () =>\n isMultilingual\n ? getAutoGLMMultilingualLocatePrompt()\n : getAutoGLMChineseLocatePrompt(),\n getLocatedPixelBbox: getTapLocatedPixelBbox,\n };\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","createAutoGlmPlanningTapLocator","isMultilingual","getAutoGLMMultilingualLocatePrompt","getAutoGLMChineseLocatePrompt","getTapLocatedPixelBbox"],"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;;;;;;;;;ACCO,SAASI,gCACdC,cAAuB;IAEvB,OAAO;QACL,mBAAmB,IACjBA,iBACIC,AAAAA,IAAAA,mCAAAA,kCAAAA,AAAAA,MACAC,AAAAA,IAAAA,mCAAAA,6BAAAA,AAAAA;QACN,qBAAqBC,mCAAAA,sBAAsBA;IAC7C;AACF"}
@@ -25,8 +25,8 @@ var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
27
  extractValueAfter: ()=>extractValueAfter,
28
- parseAction: ()=>parseAction,
29
- parseAutoGLMLocateResponse: ()=>parseAutoGLMLocateResponse,
28
+ parseAutoGLMPlanningResponse: ()=>parseAutoGLMPlanningResponse,
29
+ parseAutoGLMPlanningAction: ()=>parseAutoGLMPlanningAction,
30
30
  parseAutoGLMResponse: ()=>parseAutoGLMResponse
31
31
  });
32
32
  const logger_namespaceObject = require("@midscene/shared/logger");
@@ -38,7 +38,7 @@ const extractValueAfter = (src, key)=>{
38
38
  if (rest.endsWith('")')) rest = rest.slice(0, -2);
39
39
  return rest;
40
40
  };
41
- function parseAction(response) {
41
+ function parseAutoGLMPlanningAction(response) {
42
42
  debug('Parsing action:', response);
43
43
  let trimmedResponse = '';
44
44
  try {
@@ -201,78 +201,56 @@ function parseAction(response) {
201
201
  }
202
202
  }
203
203
  function parseAutoGLMResponse(content) {
204
+ let parsedResponse;
204
205
  if (content.includes('finish(message=')) {
205
206
  const parts = content.split('finish(message=');
206
207
  const think = parts[0].trim();
207
208
  const actionContent = `finish(message=${parts[1]}`;
208
- return {
209
+ parsedResponse = {
209
210
  think,
210
211
  content: actionContent
211
212
  };
212
- }
213
- if (content.includes('do(action=')) {
213
+ } else if (content.includes('do(action=')) {
214
214
  const parts = content.split('do(action=');
215
215
  const think = parts[0].trim();
216
216
  const actionContent = `do(action=${parts[1]}`;
217
- return {
217
+ parsedResponse = {
218
218
  think,
219
219
  content: actionContent
220
220
  };
221
- }
222
- if (content.includes('<answer>')) {
221
+ } else if (content.includes('<answer>')) {
223
222
  const parts = content.split('<answer>');
224
223
  const think = parts[0].replace(/<think>/g, '').replace(/<\/think>/g, '').trim();
225
224
  const actionContent = parts[1].replace(/<\/answer>/g, '').trim();
226
- return {
225
+ parsedResponse = {
227
226
  think,
228
227
  content: actionContent
229
228
  };
230
- }
231
- return {
229
+ } else parsedResponse = {
232
230
  think: '',
233
231
  content
234
232
  };
233
+ debug('autoGLM rawResponse:', content);
234
+ debug('thinking in response:', parsedResponse.think);
235
+ debug('action in response:', parsedResponse.content);
236
+ return parsedResponse;
235
237
  }
236
- function parseAutoGLMLocateResponse(rawResponse) {
237
- const { think, content: actionContent } = parseAutoGLMResponse(rawResponse);
238
- if (!actionContent.startsWith('do(action="Tap"')) return {
239
- think,
240
- coordinates: null,
241
- error: `Unexpected action type in auto-glm locate response: ${actionContent}`
238
+ function parseAutoGLMPlanningResponse(content) {
239
+ const response = parseAutoGLMResponse(content);
240
+ const action = parseAutoGLMPlanningAction(response);
241
+ return {
242
+ response,
243
+ action
242
244
  };
243
- try {
244
- const elementMatch = actionContent.match(/element=\[(\d+),(\d+)\]/);
245
- if (!elementMatch) return {
246
- think,
247
- coordinates: null,
248
- error: `Failed to extract element coordinates from auto-glm response: ${actionContent}`
249
- };
250
- const x = Number(elementMatch[1]);
251
- const y = Number(elementMatch[2]);
252
- return {
253
- think,
254
- coordinates: {
255
- x,
256
- y
257
- }
258
- };
259
- } catch (e) {
260
- const errorMessage = e instanceof Error ? e.message : String(e);
261
- return {
262
- think,
263
- coordinates: null,
264
- error: `Failed to parse coordinates "${actionContent}" with errorMessage: ${errorMessage}`
265
- };
266
- }
267
245
  }
268
246
  exports.extractValueAfter = __webpack_exports__.extractValueAfter;
269
- exports.parseAction = __webpack_exports__.parseAction;
270
- exports.parseAutoGLMLocateResponse = __webpack_exports__.parseAutoGLMLocateResponse;
247
+ exports.parseAutoGLMPlanningAction = __webpack_exports__.parseAutoGLMPlanningAction;
248
+ exports.parseAutoGLMPlanningResponse = __webpack_exports__.parseAutoGLMPlanningResponse;
271
249
  exports.parseAutoGLMResponse = __webpack_exports__.parseAutoGLMResponse;
272
250
  for(var __rspack_i in __webpack_exports__)if (-1 === [
273
251
  "extractValueAfter",
274
- "parseAction",
275
- "parseAutoGLMLocateResponse",
252
+ "parseAutoGLMPlanningAction",
253
+ "parseAutoGLMPlanningResponse",
276
254
  "parseAutoGLMResponse"
277
255
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
278
256
  Object.defineProperty(exports, '__esModule', {