qwenproxy-cli 1.0.0 → 1.0.2
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/LICENSE +14 -14
- package/README.md +906 -906
- package/bin/qwenproxy.js +5 -1
- package/package.json +77 -78
- package/src/api/error-classifier.ts +159 -159
- package/src/api/error-helpers.ts +118 -118
- package/src/api/models.ts +261 -261
- package/src/api/server.ts +860 -859
- package/src/cache/memory-cache.ts +385 -385
- package/src/clean-cache.ts +204 -204
- package/src/core/account-concurrency.ts +671 -671
- package/src/core/account-manager.ts +301 -297
- package/src/core/account-priority.ts +163 -163
- package/src/core/accounts.ts +186 -186
- package/src/core/config.ts +383 -383
- package/src/core/crypto-utils.ts +79 -79
- package/src/core/database.ts +276 -276
- package/src/core/errors.ts +118 -118
- package/src/core/logger.ts +269 -269
- package/src/core/memory-usage.ts +84 -84
- package/src/core/metrics.ts +291 -291
- package/src/core/model-alias.ts +77 -77
- package/src/core/model-registry.ts +544 -544
- package/src/core/mutex.ts +119 -119
- package/src/core/paths.ts +199 -199
- package/src/core/prompt-limits.ts +214 -214
- package/src/core/reasoning-effort.ts +102 -102
- package/src/core/stream-registry.ts +96 -96
- package/src/core/waf-isolation.ts +117 -117
- package/src/core/watchdog.ts +195 -195
- package/src/delete-chats.ts +23 -23
- package/src/index.ts +65 -64
- package/src/login.ts +147 -147
- package/src/reset-cooldowns.ts +11 -11
- package/src/routes/anthropic/index.ts +355 -355
- package/src/routes/anthropic/translate.ts +522 -522
- package/src/routes/anthropic/types.ts +154 -154
- package/src/routes/anthropic/validation.ts +144 -144
- package/src/routes/chat/account.ts +1817 -1817
- package/src/routes/chat/context.ts +241 -241
- package/src/routes/chat/errors.ts +85 -85
- package/src/routes/chat/helpers.ts +268 -268
- package/src/routes/chat/index.ts +618 -618
- package/src/routes/chat/media.ts +285 -285
- package/src/routes/chat/retry-policy.ts +754 -754
- package/src/routes/chat/stop.ts +98 -98
- package/src/routes/chat/streaming.ts +2710 -2710
- package/src/routes/chat/validation.ts +526 -526
- package/src/routes/chat.ts +2 -2
- package/src/routes/completions.ts +290 -290
- package/src/routes/images.ts +139 -139
- package/src/routes/responses/adapter.ts +503 -503
- package/src/routes/responses/index.ts +405 -405
- package/src/routes/responses/state.ts +230 -230
- package/src/routes/responses/streaming.ts +528 -528
- package/src/routes/responses/types.ts +285 -285
- package/src/routes/responses/validation.ts +202 -202
- package/src/routes/upload.ts +731 -731
- package/src/routes/videos.ts +214 -214
- package/src/services/auth-playwright.ts +173 -173
- package/src/services/captcha-coordinator.ts +161 -161
- package/src/services/captcha-solver.ts +553 -553
- package/src/services/chat-cleanup.ts +80 -80
- package/src/services/context-meter.ts +317 -317
- package/src/services/fingerprint.ts +242 -242
- package/src/services/human-behavior.ts +173 -173
- package/src/services/media-generation.ts +1748 -1748
- package/src/services/playwright.ts +2878 -2800
- package/src/services/qwen-chat-pool.ts +345 -345
- package/src/services/qwen-errors.ts +133 -133
- package/src/services/qwen-headers.ts +79 -79
- package/src/services/qwen-thread-state.ts +393 -393
- package/src/services/qwen-url.ts +19 -19
- package/src/services/qwen.ts +3126 -3126
- package/src/services/session-keeper.ts +88 -88
- package/src/services/token-estimation-metrics.ts +118 -118
- package/src/sync/claude-code.ts +75 -75
- package/src/sync/codex.ts +123 -123
- package/src/sync/index.ts +362 -362
- package/src/sync/omp.ts +105 -105
- package/src/sync/opencode.ts +214 -214
- package/src/sync/types.ts +53 -53
- package/src/sync/utils.ts +27 -27
- package/src/sync-clients.ts +189 -189
- package/src/tools/instructions.ts +137 -137
- package/src/tools/manifest.ts +81 -81
- package/src/tools/parser.ts +2989 -2989
- package/src/tools/toolcall-tags.ts +142 -142
- package/src/tui/app.ts +259 -264
- package/src/tui/index.ts +61 -61
- package/src/tui/markdown.ts +258 -258
- package/src/tui/proxy-client.ts +331 -326
- package/src/tui/screen.ts +294 -278
- package/src/tui/server-manager.ts +270 -270
- package/src/tui/theme.ts +432 -432
- package/src/tui/types.ts +33 -33
- package/src/tui/views/accounts-view.ts +656 -656
- package/src/tui/views/chat-view.ts +1018 -823
- package/src/tui/views/logs-view.ts +479 -413
- package/src/tui/views/status-view.ts +204 -204
- package/src/tui/views/storage-view.ts +304 -291
- package/src/tui/views/sync-view.ts +409 -409
- package/src/types/ali-oss.d.ts +32 -32
- package/src/update-cli.ts +121 -0
- package/src/utils/context-truncation.ts +84 -84
- package/src/utils/json.ts +380 -380
- package/src/utils/session-id.ts +37 -37
- package/src/utils/tool-call-guard.ts +84 -84
- package/src/utils/types.ts +109 -109
package/src/core/model-alias.ts
CHANGED
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Modo de raciocínio para modelos Qwen:
|
|
3
|
-
* - "auto": Qwen decide se usa thinking (padrão)
|
|
4
|
-
* - "thinking": força thinking ON
|
|
5
|
-
* - "fast": força thinking OFF
|
|
6
|
-
*/
|
|
7
|
-
export type ReasoningMode = "auto" | "thinking" | "fast";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Resolução de variantes de raciocínio dos modelos Qwen públicos.
|
|
11
|
-
*
|
|
12
|
-
* Mapeamento padronizado de sufixos de esforço de raciocínio:
|
|
13
|
-
* - `-low`: força thinking OFF (Fast)
|
|
14
|
-
* - `-medium`: thinking AUTO (Qwen decide dinamicamente)
|
|
15
|
-
* - `-high`: força thinking ON (Thinking profundo)
|
|
16
|
-
*
|
|
17
|
-
* Sufixos legados (`-fast`, `-thinking`, `-no-thinking`) são mantidos
|
|
18
|
-
* para total compatibilidade regressiva. O modelo base limpo é sempre
|
|
19
|
-
* retornado para o upstream e publicado sem duplicatas em `/v1/models`.
|
|
20
|
-
*/
|
|
21
|
-
export function stripThinkingSuffix(model: string): {
|
|
22
|
-
baseModel: string;
|
|
23
|
-
enableThinking: boolean;
|
|
24
|
-
reasoningMode: ReasoningMode;
|
|
25
|
-
} {
|
|
26
|
-
const normalizedModel = model.trim();
|
|
27
|
-
|
|
28
|
-
// Fast / Low path (thinking off)
|
|
29
|
-
if (
|
|
30
|
-
normalizedModel.endsWith("-low") ||
|
|
31
|
-
normalizedModel.endsWith("-fast") ||
|
|
32
|
-
normalizedModel.endsWith("-no-thinking")
|
|
33
|
-
) {
|
|
34
|
-
return {
|
|
35
|
-
baseModel: normalizedModel.replace(/-(?:low|fast|no-thinking)$/, ""),
|
|
36
|
-
enableThinking: false,
|
|
37
|
-
reasoningMode: "fast",
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// Medium path (auto thinking - Qwen decides dynamically)
|
|
42
|
-
if (normalizedModel.endsWith("-medium")) {
|
|
43
|
-
return {
|
|
44
|
-
baseModel: normalizedModel.slice(0, -"-medium".length),
|
|
45
|
-
enableThinking: true,
|
|
46
|
-
reasoningMode: "auto",
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// High / Thinking path (thinking on)
|
|
51
|
-
if (
|
|
52
|
-
normalizedModel.endsWith("-high") ||
|
|
53
|
-
normalizedModel.endsWith("-thinking")
|
|
54
|
-
) {
|
|
55
|
-
return {
|
|
56
|
-
baseModel: normalizedModel.replace(/-(?:high|thinking)$/, ""),
|
|
57
|
-
enableThinking: true,
|
|
58
|
-
reasoningMode: "thinking",
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Default: auto thinking (Qwen decides)
|
|
63
|
-
return { baseModel: normalizedModel, enableThinking: true, reasoningMode: "auto" };
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Mapeia o id de modelo para o Qwen upstream.
|
|
68
|
-
* Ids `qwen*` passam direto (após remover o sufixo de raciocínio); ids de
|
|
69
|
-
* outros provedores (gpt-*, grok-*, etc.) também passam “as-is” — o Codex/Custom
|
|
70
|
-
* provider envia o id Qwen correto, e qualquer id desconhecido deve chegar ao
|
|
71
|
-
* upstream para que este responda um erro claro de modelo, em vez de ser
|
|
72
|
-
* silenciosamente roteado para um tier qualquer.
|
|
73
|
-
*/
|
|
74
|
-
export function mapClientModelToQwen(model: string): string {
|
|
75
|
-
if (!model) return model;
|
|
76
|
-
return stripThinkingSuffix(model.trim()).baseModel;
|
|
77
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Modo de raciocínio para modelos Qwen:
|
|
3
|
+
* - "auto": Qwen decide se usa thinking (padrão)
|
|
4
|
+
* - "thinking": força thinking ON
|
|
5
|
+
* - "fast": força thinking OFF
|
|
6
|
+
*/
|
|
7
|
+
export type ReasoningMode = "auto" | "thinking" | "fast";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Resolução de variantes de raciocínio dos modelos Qwen públicos.
|
|
11
|
+
*
|
|
12
|
+
* Mapeamento padronizado de sufixos de esforço de raciocínio:
|
|
13
|
+
* - `-low`: força thinking OFF (Fast)
|
|
14
|
+
* - `-medium`: thinking AUTO (Qwen decide dinamicamente)
|
|
15
|
+
* - `-high`: força thinking ON (Thinking profundo)
|
|
16
|
+
*
|
|
17
|
+
* Sufixos legados (`-fast`, `-thinking`, `-no-thinking`) são mantidos
|
|
18
|
+
* para total compatibilidade regressiva. O modelo base limpo é sempre
|
|
19
|
+
* retornado para o upstream e publicado sem duplicatas em `/v1/models`.
|
|
20
|
+
*/
|
|
21
|
+
export function stripThinkingSuffix(model: string): {
|
|
22
|
+
baseModel: string;
|
|
23
|
+
enableThinking: boolean;
|
|
24
|
+
reasoningMode: ReasoningMode;
|
|
25
|
+
} {
|
|
26
|
+
const normalizedModel = model.trim();
|
|
27
|
+
|
|
28
|
+
// Fast / Low path (thinking off)
|
|
29
|
+
if (
|
|
30
|
+
normalizedModel.endsWith("-low") ||
|
|
31
|
+
normalizedModel.endsWith("-fast") ||
|
|
32
|
+
normalizedModel.endsWith("-no-thinking")
|
|
33
|
+
) {
|
|
34
|
+
return {
|
|
35
|
+
baseModel: normalizedModel.replace(/-(?:low|fast|no-thinking)$/, ""),
|
|
36
|
+
enableThinking: false,
|
|
37
|
+
reasoningMode: "fast",
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Medium path (auto thinking - Qwen decides dynamically)
|
|
42
|
+
if (normalizedModel.endsWith("-medium")) {
|
|
43
|
+
return {
|
|
44
|
+
baseModel: normalizedModel.slice(0, -"-medium".length),
|
|
45
|
+
enableThinking: true,
|
|
46
|
+
reasoningMode: "auto",
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// High / Thinking path (thinking on)
|
|
51
|
+
if (
|
|
52
|
+
normalizedModel.endsWith("-high") ||
|
|
53
|
+
normalizedModel.endsWith("-thinking")
|
|
54
|
+
) {
|
|
55
|
+
return {
|
|
56
|
+
baseModel: normalizedModel.replace(/-(?:high|thinking)$/, ""),
|
|
57
|
+
enableThinking: true,
|
|
58
|
+
reasoningMode: "thinking",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Default: auto thinking (Qwen decides)
|
|
63
|
+
return { baseModel: normalizedModel, enableThinking: true, reasoningMode: "auto" };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Mapeia o id de modelo para o Qwen upstream.
|
|
68
|
+
* Ids `qwen*` passam direto (após remover o sufixo de raciocínio); ids de
|
|
69
|
+
* outros provedores (gpt-*, grok-*, etc.) também passam “as-is” — o Codex/Custom
|
|
70
|
+
* provider envia o id Qwen correto, e qualquer id desconhecido deve chegar ao
|
|
71
|
+
* upstream para que este responda um erro claro de modelo, em vez de ser
|
|
72
|
+
* silenciosamente roteado para um tier qualquer.
|
|
73
|
+
*/
|
|
74
|
+
export function mapClientModelToQwen(model: string): string {
|
|
75
|
+
if (!model) return model;
|
|
76
|
+
return stripThinkingSuffix(model.trim()).baseModel;
|
|
77
|
+
}
|