@rpascene/shared 0.30.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/es/baseDB.mjs +109 -0
- package/dist/es/build/copy-static.mjs +29 -0
- package/dist/es/common.mjs +37 -0
- package/dist/es/constants/example-code.mjs +202 -0
- package/dist/es/constants/index.mjs +74 -0
- package/dist/es/env/basic.mjs +6 -0
- package/dist/es/env/constants.mjs +97 -0
- package/dist/es/env/decide-model-config.mjs +172 -0
- package/dist/es/env/global-config-manager.mjs +82 -0
- package/dist/es/env/helper.mjs +45 -0
- package/dist/es/env/index.mjs +5 -0
- package/dist/es/env/init-debug.mjs +18 -0
- package/dist/es/env/model-config-manager.mjs +99 -0
- package/dist/es/env/parse.mjs +69 -0
- package/dist/es/env/types.mjs +265 -0
- package/dist/es/env/utils.mjs +18 -0
- package/dist/es/extractor/constants.mjs +2 -0
- package/dist/es/extractor/cs_postmessage.mjs +61 -0
- package/dist/es/extractor/customLocator.mjs +646 -0
- package/dist/es/extractor/debug.mjs +6 -0
- package/dist/es/extractor/dom-util.mjs +92 -0
- package/dist/es/extractor/index.mjs +7 -0
- package/dist/es/extractor/locator.mjs +95 -0
- package/dist/es/extractor/tree.mjs +81 -0
- package/dist/es/extractor/util.mjs +244 -0
- package/dist/es/extractor/web-extractor.mjs +361 -0
- package/dist/es/img/box-select.mjs +184 -0
- package/dist/es/img/draw-box.mjs +42 -0
- package/dist/es/img/get-jimp.mjs +10 -0
- package/dist/es/img/get-photon.mjs +19 -0
- package/dist/es/img/get-sharp.mjs +11 -0
- package/dist/es/img/index.mjs +5 -0
- package/dist/es/img/info.mjs +32 -0
- package/dist/es/img/transform.mjs +192 -0
- package/dist/es/index.mjs +3 -0
- package/dist/es/logger.mjs +61 -0
- package/dist/es/node/fs.mjs +44 -0
- package/dist/es/node/index.mjs +1 -0
- package/dist/es/polyfills/async-hooks.mjs +2 -0
- package/dist/es/polyfills/index.mjs +1 -0
- package/dist/es/types/index.mjs +3 -0
- package/dist/es/us-keyboard-layout.mjs +1414 -0
- package/dist/es/us-keyboard-layout.mjs.LICENSE.txt +5 -0
- package/dist/es/utils.mjs +66 -0
- package/dist/lib/baseDB.js +149 -0
- package/dist/lib/build/copy-static.js +77 -0
- package/dist/lib/common.js +93 -0
- package/dist/lib/constants/example-code.js +239 -0
- package/dist/lib/constants/index.js +153 -0
- package/dist/lib/env/basic.js +40 -0
- package/dist/lib/env/constants.js +143 -0
- package/dist/lib/env/decide-model-config.js +212 -0
- package/dist/lib/env/global-config-manager.js +116 -0
- package/dist/lib/env/helper.js +85 -0
- package/dist/lib/env/index.js +94 -0
- package/dist/lib/env/init-debug.js +52 -0
- package/dist/lib/env/model-config-manager.js +133 -0
- package/dist/lib/env/parse.js +106 -0
- package/dist/lib/env/types.js +650 -0
- package/dist/lib/env/utils.js +61 -0
- package/dist/lib/extractor/constants.js +42 -0
- package/dist/lib/extractor/cs_postmessage.js +98 -0
- package/dist/lib/extractor/customLocator.js +698 -0
- package/dist/lib/extractor/debug.js +12 -0
- package/dist/lib/extractor/dom-util.js +150 -0
- package/dist/lib/extractor/index.js +153 -0
- package/dist/lib/extractor/locator.js +141 -0
- package/dist/lib/extractor/tree.js +127 -0
- package/dist/lib/extractor/util.js +335 -0
- package/dist/lib/extractor/web-extractor.js +407 -0
- package/dist/lib/img/box-select.js +232 -0
- package/dist/lib/img/draw-box.js +89 -0
- package/dist/lib/img/get-jimp.js +72 -0
- package/dist/lib/img/get-photon.js +76 -0
- package/dist/lib/img/get-sharp.js +63 -0
- package/dist/lib/img/index.js +102 -0
- package/dist/lib/img/info.js +86 -0
- package/dist/lib/img/transform.js +279 -0
- package/dist/lib/index.js +43 -0
- package/dist/lib/logger.js +114 -0
- package/dist/lib/node/fs.js +97 -0
- package/dist/lib/node/index.js +60 -0
- package/dist/lib/polyfills/async-hooks.js +36 -0
- package/dist/lib/polyfills/index.js +60 -0
- package/dist/lib/types/index.js +37 -0
- package/dist/lib/us-keyboard-layout.js +1457 -0
- package/dist/lib/us-keyboard-layout.js.LICENSE.txt +5 -0
- package/dist/lib/utils.js +136 -0
- package/dist/types/baseDB.d.ts +25 -0
- package/dist/types/build/copy-static.d.ts +31 -0
- package/dist/types/common.d.ts +12 -0
- package/dist/types/constants/example-code.d.ts +2 -0
- package/dist/types/constants/index.d.ts +23 -0
- package/dist/types/env/basic.d.ts +6 -0
- package/dist/types/env/constants.d.ts +40 -0
- package/dist/types/env/decide-model-config.d.ts +14 -0
- package/dist/types/env/global-config-manager.d.ts +32 -0
- package/dist/types/env/helper.d.ts +6 -0
- package/dist/types/env/index.d.ts +4 -0
- package/dist/types/env/init-debug.d.ts +1 -0
- package/dist/types/env/model-config-manager.d.ts +24 -0
- package/dist/types/env/parse.d.ts +12 -0
- package/dist/types/env/types.d.ts +295 -0
- package/dist/types/env/utils.d.ts +7 -0
- package/dist/types/extractor/constants.d.ts +1 -0
- package/dist/types/extractor/cs_postmessage.d.ts +2 -0
- package/dist/types/extractor/customLocator.d.ts +69 -0
- package/dist/types/extractor/debug.d.ts +1 -0
- package/dist/types/extractor/dom-util.d.ts +26 -0
- package/dist/types/extractor/index.d.ts +36 -0
- package/dist/types/extractor/locator.d.ts +7 -0
- package/dist/types/extractor/tree.d.ts +9 -0
- package/dist/types/extractor/util.d.ts +43 -0
- package/dist/types/extractor/web-extractor.d.ts +19 -0
- package/dist/types/img/box-select.d.ts +25 -0
- package/dist/types/img/draw-box.d.ts +15 -0
- package/dist/types/img/get-jimp.d.ts +2 -0
- package/dist/types/img/get-photon.d.ts +8 -0
- package/dist/types/img/get-sharp.d.ts +3 -0
- package/dist/types/img/index.d.ts +4 -0
- package/dist/types/img/info.d.ts +29 -0
- package/dist/types/img/transform.d.ts +88 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/logger.d.ts +4 -0
- package/dist/types/node/fs.d.ts +15 -0
- package/dist/types/node/index.d.ts +1 -0
- package/dist/types/polyfills/async-hooks.d.ts +6 -0
- package/dist/types/polyfills/index.d.ts +4 -0
- package/dist/types/types/index.d.ts +37 -0
- package/dist/types/us-keyboard-layout.d.ts +32 -0
- package/dist/types/utils.d.ts +22 -0
- package/package.json +102 -0
- package/src/baseDB.ts +158 -0
- package/src/build/copy-static.ts +62 -0
- package/src/common.ts +67 -0
- package/src/constants/example-code.ts +202 -0
- package/src/constants/index.ts +81 -0
- package/src/env/basic.ts +12 -0
- package/src/env/constants.ts +291 -0
- package/src/env/decide-model-config.ts +319 -0
- package/src/env/global-config-manager.ts +174 -0
- package/src/env/helper.ts +80 -0
- package/src/env/index.ts +4 -0
- package/src/env/init-debug.ts +29 -0
- package/src/env/model-config-manager.ts +145 -0
- package/src/env/parse.ts +131 -0
- package/src/env/types.ts +573 -0
- package/src/env/utils.ts +39 -0
- package/src/extractor/constants.ts +5 -0
- package/src/extractor/cs_postmessage.ts +101 -0
- package/src/extractor/customLocator.ts +1138 -0
- package/src/extractor/debug.ts +10 -0
- package/src/extractor/dom-util.ts +141 -0
- package/src/extractor/index.ts +54 -0
- package/src/extractor/locator.ts +179 -0
- package/src/extractor/tree.ts +179 -0
- package/src/extractor/util.ts +468 -0
- package/src/extractor/web-extractor.ts +559 -0
- package/src/img/box-select.ts +346 -0
- package/src/img/draw-box.ts +60 -0
- package/src/img/get-jimp.ts +12 -0
- package/src/img/get-photon.ts +48 -0
- package/src/img/get-sharp.ts +18 -0
- package/src/img/index.ts +24 -0
- package/src/img/info.ts +79 -0
- package/src/img/jimp.d.ts +4 -0
- package/src/img/transform.ts +396 -0
- package/src/index.ts +6 -0
- package/src/logger.ts +93 -0
- package/src/node/fs.ts +84 -0
- package/src/node/index.ts +1 -0
- package/src/polyfills/async-hooks.ts +6 -0
- package/src/polyfills/index.ts +4 -0
- package/src/types/index.ts +53 -0
- package/src/us-keyboard-layout.ts +723 -0
- package/src/utils.ts +127 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import {
|
|
2
|
+
decideModelConfigFromEnv,
|
|
3
|
+
decideModelConfigFromIntentConfig,
|
|
4
|
+
} from './decide-model-config';
|
|
5
|
+
import type { GlobalConfigManager } from './global-config-manager';
|
|
6
|
+
|
|
7
|
+
import type { IModelConfig, TIntent, TModelConfigFn } from './types';
|
|
8
|
+
|
|
9
|
+
const ALL_INTENTS: TIntent[] = ['VQA', 'default', 'grounding', 'planning'];
|
|
10
|
+
|
|
11
|
+
export type TIntentConfigMap = Record<
|
|
12
|
+
TIntent,
|
|
13
|
+
ReturnType<TModelConfigFn> | undefined
|
|
14
|
+
>;
|
|
15
|
+
|
|
16
|
+
export class ModelConfigManager {
|
|
17
|
+
private modelConfigMap: Record<TIntent, IModelConfig> | undefined = undefined;
|
|
18
|
+
|
|
19
|
+
// once modelConfigFn is set, isolatedMode will be true
|
|
20
|
+
// modelConfigMap will only depend on modelConfigFn and not effect by process.env
|
|
21
|
+
private isolatedMode = false;
|
|
22
|
+
|
|
23
|
+
private globalConfigManager: GlobalConfigManager | undefined = undefined;
|
|
24
|
+
|
|
25
|
+
constructor(modelConfigFn?: TModelConfigFn) {
|
|
26
|
+
if (modelConfigFn) {
|
|
27
|
+
this.isolatedMode = true;
|
|
28
|
+
const intentConfigMap = this.calcIntentConfigMap(modelConfigFn);
|
|
29
|
+
this.modelConfigMap =
|
|
30
|
+
this.calcModelConfigMapBaseOnIntent(intentConfigMap);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
private calcIntentConfigMap(modelConfigFn: TModelConfigFn): TIntentConfigMap {
|
|
35
|
+
const intentConfigMap: TIntentConfigMap = {
|
|
36
|
+
VQA: undefined,
|
|
37
|
+
default: undefined,
|
|
38
|
+
grounding: undefined,
|
|
39
|
+
planning: undefined,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
for (const i of ALL_INTENTS) {
|
|
43
|
+
const result = modelConfigFn({ intent: i });
|
|
44
|
+
if (!result) {
|
|
45
|
+
throw new Error(
|
|
46
|
+
`The agent has an option named modelConfig is a function, but it return ${result} when call with intent ${i}, which should be a object.`,
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
intentConfigMap[i] = result;
|
|
50
|
+
}
|
|
51
|
+
return intentConfigMap;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private calcModelConfigMapBaseOnIntent(intentConfigMap: TIntentConfigMap) {
|
|
55
|
+
const modelConfigMap: Record<TIntent, IModelConfig | undefined> = {
|
|
56
|
+
VQA: undefined,
|
|
57
|
+
default: undefined,
|
|
58
|
+
grounding: undefined,
|
|
59
|
+
planning: undefined,
|
|
60
|
+
};
|
|
61
|
+
for (const i of ALL_INTENTS) {
|
|
62
|
+
const result = decideModelConfigFromIntentConfig(
|
|
63
|
+
i,
|
|
64
|
+
intentConfigMap[i] as unknown as Record<string, string | undefined>,
|
|
65
|
+
);
|
|
66
|
+
modelConfigMap[i] = result;
|
|
67
|
+
}
|
|
68
|
+
return modelConfigMap as Record<TIntent, IModelConfig>;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private calcModelConfigMapBaseOnEnv(
|
|
72
|
+
allEnvConfig: Record<string, string | undefined>,
|
|
73
|
+
) {
|
|
74
|
+
const modelConfigMap: Record<TIntent, IModelConfig | undefined> = {
|
|
75
|
+
VQA: undefined,
|
|
76
|
+
default: undefined,
|
|
77
|
+
grounding: undefined,
|
|
78
|
+
planning: undefined,
|
|
79
|
+
};
|
|
80
|
+
for (const i of ALL_INTENTS) {
|
|
81
|
+
const result = decideModelConfigFromEnv(i, allEnvConfig);
|
|
82
|
+
modelConfigMap[i] = result;
|
|
83
|
+
}
|
|
84
|
+
return modelConfigMap as Record<TIntent, IModelConfig>;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* should only be called by GlobalConfigManager
|
|
89
|
+
*/
|
|
90
|
+
clearModelConfigMap() {
|
|
91
|
+
if (this.isolatedMode) {
|
|
92
|
+
throw new Error(
|
|
93
|
+
'ModelConfigManager work in isolated mode, so clearModelConfigMap should not be called',
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
this.modelConfigMap = undefined;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* if isolatedMode is true, modelConfigMap was initialized in constructor and can't be changed
|
|
101
|
+
* if isolatedMode is false, modelConfigMap can be changed by process.env so we need to recalculate it when it's undefined
|
|
102
|
+
*/
|
|
103
|
+
getModelConfig(intent: TIntent): IModelConfig {
|
|
104
|
+
if (this.isolatedMode) {
|
|
105
|
+
if (!this.modelConfigMap) {
|
|
106
|
+
throw new Error(
|
|
107
|
+
'modelConfigMap is not initialized in isolated mode, which should not happen',
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
return this.modelConfigMap[intent];
|
|
111
|
+
} else {
|
|
112
|
+
if (!this.modelConfigMap) {
|
|
113
|
+
if (!this.globalConfigManager) {
|
|
114
|
+
throw new Error(
|
|
115
|
+
'globalConfigManager is not registered, which should not happen',
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
this.modelConfigMap = this.calcModelConfigMapBaseOnEnv(
|
|
119
|
+
this.globalConfigManager.getAllEnvConfig(),
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
return this.modelConfigMap[intent];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
getUploadTestServerUrl(): string | undefined {
|
|
127
|
+
const { openaiExtraConfig } = this.getModelConfig('default');
|
|
128
|
+
const serverUrl = openaiExtraConfig?.REPORT_SERVER_URL as string;
|
|
129
|
+
return serverUrl;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
registerGlobalConfigManager(globalConfigManager: GlobalConfigManager) {
|
|
133
|
+
this.globalConfigManager = globalConfigManager;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
throwErrorIfNonVLModel(intent: TIntent = 'grounding') {
|
|
137
|
+
const modelConfig = this.getModelConfig(intent);
|
|
138
|
+
|
|
139
|
+
if (!modelConfig.vlMode) {
|
|
140
|
+
throw new Error(
|
|
141
|
+
'No visual language model (VL model) detected for the current scenario. Element localization may be inaccurate. Please verify your model configuration. Learn more: https://rpascenejs.com/choose-a-model',
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
package/src/env/parse.ts
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RPASCENE_USE_DOUBAO_VISION,
|
|
3
|
+
RPASCENE_USE_GEMINI,
|
|
4
|
+
RPASCENE_USE_QWEN3_VL,
|
|
5
|
+
RPASCENE_USE_QWEN_VL,
|
|
6
|
+
RPASCENE_USE_VLM_UI_TARS,
|
|
7
|
+
type TVlModeTypes,
|
|
8
|
+
type TVlModeValues,
|
|
9
|
+
UITarsModelVersion,
|
|
10
|
+
VL_MODE_RAW_VALID_VALUES,
|
|
11
|
+
} from './types';
|
|
12
|
+
|
|
13
|
+
export const parseVlModeAndUiTarsModelVersionFromRawValue = (
|
|
14
|
+
vlModeRaw?: string,
|
|
15
|
+
): {
|
|
16
|
+
vlMode?: TVlModeTypes;
|
|
17
|
+
uiTarsVersion?: UITarsModelVersion;
|
|
18
|
+
} => {
|
|
19
|
+
if (!vlModeRaw) {
|
|
20
|
+
return {
|
|
21
|
+
vlMode: undefined,
|
|
22
|
+
uiTarsVersion: undefined,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (!VL_MODE_RAW_VALID_VALUES.includes(vlModeRaw as never)) {
|
|
27
|
+
throw new Error(
|
|
28
|
+
`the value ${vlModeRaw} is not a valid VL_MODE value, must be one of ${VL_MODE_RAW_VALID_VALUES}`,
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
const raw = vlModeRaw as TVlModeValues;
|
|
32
|
+
|
|
33
|
+
if (raw === 'vlm-ui-tars') {
|
|
34
|
+
return {
|
|
35
|
+
vlMode: 'vlm-ui-tars',
|
|
36
|
+
uiTarsVersion: UITarsModelVersion.V1_0,
|
|
37
|
+
};
|
|
38
|
+
} else if (raw === 'vlm-ui-tars-doubao' || raw === 'vlm-ui-tars-doubao-1.5') {
|
|
39
|
+
return {
|
|
40
|
+
vlMode: 'vlm-ui-tars',
|
|
41
|
+
uiTarsVersion: UITarsModelVersion.DOUBAO_1_5_20B,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
vlMode: raw as TVlModeTypes,
|
|
47
|
+
uiTarsVersion: undefined,
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* legacy logic of how to detect vlMode from process.env without intent
|
|
53
|
+
*/
|
|
54
|
+
export const parseVlModeAndUiTarsFromGlobalConfig = (
|
|
55
|
+
provider: Record<string, string | undefined>,
|
|
56
|
+
): {
|
|
57
|
+
vlMode?: TVlModeTypes;
|
|
58
|
+
uiTarsVersion?: UITarsModelVersion;
|
|
59
|
+
} => {
|
|
60
|
+
const isDoubao = provider[RPASCENE_USE_DOUBAO_VISION];
|
|
61
|
+
const isQwen = provider[RPASCENE_USE_QWEN_VL];
|
|
62
|
+
const isQwen3 = provider[RPASCENE_USE_QWEN3_VL];
|
|
63
|
+
const isUiTars = provider[RPASCENE_USE_VLM_UI_TARS];
|
|
64
|
+
const isGemini = provider[RPASCENE_USE_GEMINI];
|
|
65
|
+
|
|
66
|
+
const enabledModes = [
|
|
67
|
+
isDoubao && RPASCENE_USE_DOUBAO_VISION,
|
|
68
|
+
isQwen && RPASCENE_USE_QWEN_VL,
|
|
69
|
+
isQwen3 && RPASCENE_USE_QWEN3_VL,
|
|
70
|
+
isUiTars && RPASCENE_USE_VLM_UI_TARS,
|
|
71
|
+
isGemini && RPASCENE_USE_GEMINI,
|
|
72
|
+
].filter(Boolean);
|
|
73
|
+
|
|
74
|
+
if (enabledModes.length > 1) {
|
|
75
|
+
throw new Error(
|
|
76
|
+
`Only one vision mode can be enabled at a time. Currently enabled modes: ${enabledModes.join(', ')}. Please disable all but one mode.`,
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (isQwen3) {
|
|
81
|
+
return {
|
|
82
|
+
vlMode: 'qwen3-vl',
|
|
83
|
+
uiTarsVersion: undefined,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (isQwen) {
|
|
88
|
+
return {
|
|
89
|
+
vlMode: 'qwen-vl',
|
|
90
|
+
uiTarsVersion: undefined,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (isDoubao) {
|
|
95
|
+
return {
|
|
96
|
+
vlMode: 'doubao-vision',
|
|
97
|
+
uiTarsVersion: undefined,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (isGemini) {
|
|
102
|
+
return {
|
|
103
|
+
vlMode: 'gemini',
|
|
104
|
+
uiTarsVersion: undefined,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (isUiTars) {
|
|
109
|
+
if (isUiTars === '1') {
|
|
110
|
+
return {
|
|
111
|
+
vlMode: 'vlm-ui-tars',
|
|
112
|
+
uiTarsVersion: UITarsModelVersion.V1_0,
|
|
113
|
+
};
|
|
114
|
+
} else if (isUiTars === 'DOUBAO' || isUiTars === 'DOUBAO-1.5') {
|
|
115
|
+
return {
|
|
116
|
+
vlMode: 'vlm-ui-tars',
|
|
117
|
+
uiTarsVersion: UITarsModelVersion.DOUBAO_1_5_20B,
|
|
118
|
+
};
|
|
119
|
+
} else {
|
|
120
|
+
return {
|
|
121
|
+
vlMode: 'vlm-ui-tars',
|
|
122
|
+
uiTarsVersion: `${isUiTars}` as UITarsModelVersion,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return {
|
|
128
|
+
vlMode: undefined,
|
|
129
|
+
uiTarsVersion: undefined,
|
|
130
|
+
};
|
|
131
|
+
};
|