@wudao-org/providers 0.0.0-stage → 0.4.21
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 +21 -0
- package/README.md +8 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/anthropic.d.ts +19 -0
- package/dist/anthropic.d.ts.map +1 -0
- package/dist/anthropic.js +621 -0
- package/dist/anthropic.js.map +1 -0
- package/dist/balance.d.ts +28 -0
- package/dist/balance.d.ts.map +1 -0
- package/dist/balance.js +105 -0
- package/dist/balance.js.map +1 -0
- package/dist/config.d.ts +328 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +623 -0
- package/dist/config.js.map +1 -0
- package/dist/dispatcher.d.ts +5 -0
- package/dist/dispatcher.d.ts.map +1 -0
- package/dist/dispatcher.js +21 -0
- package/dist/dispatcher.js.map +1 -0
- package/dist/effort-catalog.d.ts +17 -0
- package/dist/effort-catalog.d.ts.map +1 -0
- package/dist/effort-catalog.js +73 -0
- package/dist/effort-catalog.js.map +1 -0
- package/dist/error-body.d.ts +32 -0
- package/dist/error-body.d.ts.map +1 -0
- package/dist/error-body.js +74 -0
- package/dist/error-body.js.map +1 -0
- package/dist/header-validation.d.ts +57 -0
- package/dist/header-validation.d.ts.map +1 -0
- package/dist/header-validation.js +130 -0
- package/dist/header-validation.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +110 -0
- package/dist/index.js.map +1 -0
- package/dist/json-arguments.d.ts +17 -0
- package/dist/json-arguments.d.ts.map +1 -0
- package/dist/json-arguments.js +227 -0
- package/dist/json-arguments.js.map +1 -0
- package/dist/key-pool.d.ts +66 -0
- package/dist/key-pool.d.ts.map +1 -0
- package/dist/key-pool.js +207 -0
- package/dist/key-pool.js.map +1 -0
- package/dist/missing-reasoning-circuit.d.ts +17 -0
- package/dist/missing-reasoning-circuit.d.ts.map +1 -0
- package/dist/missing-reasoning-circuit.js +38 -0
- package/dist/missing-reasoning-circuit.js.map +1 -0
- package/dist/model-failure.d.ts +156 -0
- package/dist/model-failure.d.ts.map +1 -0
- package/dist/model-failure.js +253 -0
- package/dist/model-failure.js.map +1 -0
- package/dist/model-fallback.d.ts +18 -0
- package/dist/model-fallback.d.ts.map +1 -0
- package/dist/model-fallback.js +87 -0
- package/dist/model-fallback.js.map +1 -0
- package/dist/models.d.ts +20 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +55 -0
- package/dist/models.js.map +1 -0
- package/dist/openai-compatible.d.ts +87 -0
- package/dist/openai-compatible.d.ts.map +1 -0
- package/dist/openai-compatible.js +368 -0
- package/dist/openai-compatible.js.map +1 -0
- package/dist/openai-engine.d.ts +18 -0
- package/dist/openai-engine.d.ts.map +1 -0
- package/dist/openai-engine.js +515 -0
- package/dist/openai-engine.js.map +1 -0
- package/dist/openai-images.d.ts +38 -0
- package/dist/openai-images.d.ts.map +1 -0
- package/dist/openai-images.js +301 -0
- package/dist/openai-images.js.map +1 -0
- package/dist/openai-messages.d.ts +40 -0
- package/dist/openai-messages.d.ts.map +1 -0
- package/dist/openai-messages.js +135 -0
- package/dist/openai-messages.js.map +1 -0
- package/dist/openai-wire.d.ts +93 -0
- package/dist/openai-wire.d.ts.map +1 -0
- package/dist/openai-wire.js +151 -0
- package/dist/openai-wire.js.map +1 -0
- package/dist/persona/apply.d.ts +19 -0
- package/dist/persona/apply.d.ts.map +1 -0
- package/dist/persona/apply.js +98 -0
- package/dist/persona/apply.js.map +1 -0
- package/dist/persona/builtins.d.ts +3 -0
- package/dist/persona/builtins.d.ts.map +1 -0
- package/dist/persona/builtins.js +180 -0
- package/dist/persona/builtins.js.map +1 -0
- package/dist/persona/decorator.d.ts +4 -0
- package/dist/persona/decorator.d.ts.map +1 -0
- package/dist/persona/decorator.js +112 -0
- package/dist/persona/decorator.js.map +1 -0
- package/dist/persona/files.d.ts +20 -0
- package/dist/persona/files.d.ts.map +1 -0
- package/dist/persona/files.js +84 -0
- package/dist/persona/files.js.map +1 -0
- package/dist/persona/ids.d.ts +9 -0
- package/dist/persona/ids.d.ts.map +1 -0
- package/dist/persona/ids.js +11 -0
- package/dist/persona/ids.js.map +1 -0
- package/dist/persona/registry.d.ts +12 -0
- package/dist/persona/registry.d.ts.map +1 -0
- package/dist/persona/registry.js +54 -0
- package/dist/persona/registry.js.map +1 -0
- package/dist/persona/runtime.d.ts +23 -0
- package/dist/persona/runtime.d.ts.map +1 -0
- package/dist/persona/runtime.js +32 -0
- package/dist/persona/runtime.js.map +1 -0
- package/dist/persona/schema.d.ts +27 -0
- package/dist/persona/schema.d.ts.map +1 -0
- package/dist/persona/schema.js +165 -0
- package/dist/persona/schema.js.map +1 -0
- package/dist/persona/types.d.ts +38 -0
- package/dist/persona/types.d.ts.map +1 -0
- package/dist/persona/types.js +2 -0
- package/dist/persona/types.js.map +1 -0
- package/dist/pricing.d.ts +40 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +70 -0
- package/dist/pricing.js.map +1 -0
- package/dist/quota-park.d.ts +53 -0
- package/dist/quota-park.d.ts.map +1 -0
- package/dist/quota-park.js +135 -0
- package/dist/quota-park.js.map +1 -0
- package/dist/rate-pause.d.ts +28 -0
- package/dist/rate-pause.d.ts.map +1 -0
- package/dist/rate-pause.js +72 -0
- package/dist/rate-pause.js.map +1 -0
- package/dist/registry.d.ts +142 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +471 -0
- package/dist/registry.js.map +1 -0
- package/dist/responses.d.ts +5 -0
- package/dist/responses.d.ts.map +1 -0
- package/dist/responses.js +290 -0
- package/dist/responses.js.map +1 -0
- package/dist/retry-after.d.ts +13 -0
- package/dist/retry-after.d.ts.map +1 -0
- package/dist/retry-after.js +64 -0
- package/dist/retry-after.js.map +1 -0
- package/dist/retry-ladder.d.ts +176 -0
- package/dist/retry-ladder.d.ts.map +1 -0
- package/dist/retry-ladder.js +664 -0
- package/dist/retry-ladder.js.map +1 -0
- package/dist/split-inband-thinking.d.ts +35 -0
- package/dist/split-inband-thinking.d.ts.map +1 -0
- package/dist/split-inband-thinking.js +117 -0
- package/dist/split-inband-thinking.js.map +1 -0
- package/dist/stream-idle.d.ts +97 -0
- package/dist/stream-idle.d.ts.map +1 -0
- package/dist/stream-idle.js +127 -0
- package/dist/stream-idle.js.map +1 -0
- package/dist/tool-call-ids.d.ts +16 -0
- package/dist/tool-call-ids.d.ts.map +1 -0
- package/dist/tool-call-ids.js +36 -0
- package/dist/tool-call-ids.js.map +1 -0
- package/package.json +32 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-ladder.js","sourceRoot":"","sources":["../src/retry-ladder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ProviderConfig } from "./config.js";
|
|
2
|
+
/** One push's classification: absent keys carry nothing (never ""). */
|
|
3
|
+
export interface SplitOutput {
|
|
4
|
+
readonly reasoning?: string;
|
|
5
|
+
readonly content?: string;
|
|
6
|
+
}
|
|
7
|
+
/** The pure streaming state machine. Not tied to SSE, fetch, or config —
|
|
8
|
+
* feed content deltas, get classifications, call finish() once at stream
|
|
9
|
+
* end. Single-turn: one instance per assistant turn (loop resets per call). */
|
|
10
|
+
export declare class InbandThinkSplitter {
|
|
11
|
+
private state;
|
|
12
|
+
private held;
|
|
13
|
+
private finished;
|
|
14
|
+
push(delta: string): SplitOutput;
|
|
15
|
+
/** Stream end: flush what the holdback still owes. Seeking-held bytes were
|
|
16
|
+
* never a tag → content; reasoning-held bytes (including a dangling
|
|
17
|
+
* close-tag prefix) → reasoning (the unterminated-block rule). */
|
|
18
|
+
finish(): SplitOutput;
|
|
19
|
+
private take;
|
|
20
|
+
/** Turn start: decide armed-or-not. Leading whitespace is template
|
|
21
|
+
* artifact — held (and swallowed) while a tag might still follow,
|
|
22
|
+
* flushed as content the moment real prose arrives. */
|
|
23
|
+
private stepSeeking;
|
|
24
|
+
/** Inside the block: everything up to `</think>` is reasoning; a possible
|
|
25
|
+
* straddling close-tag prefix is held back for the next delta. */
|
|
26
|
+
private stepReasoning;
|
|
27
|
+
}
|
|
28
|
+
/** 夜移 011: whether this config's content stream needs the in-band peel.
|
|
29
|
+
* The `qwen-chat-template` format IS the vLLM inline-CoT lane — selecting
|
|
30
|
+
* it turns the splitter on with no extra knob. An explicit
|
|
31
|
+
* `splitInbandThinking` beats the format default in both directions (a
|
|
32
|
+
* misbehaving gateway on another format can opt in; a qwen-chat-template
|
|
33
|
+
* deployment that reports reasoning properly can opt out). */
|
|
34
|
+
export declare function resolveSplitInbandThinking(config: ProviderConfig): boolean;
|
|
35
|
+
//# sourceMappingURL=split-inband-thinking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-inband-thinking.d.ts","sourceRoot":"","sources":["../src/split-inband-thinking.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AA2B3E,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAaD;;gFAEgF;AAChF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAkD;IAC/D,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,QAAQ,CAAS;IAEzB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAQhC;;uEAEmE;IACnE,MAAM,IAAI,WAAW;IAQrB,OAAO,CAAC,IAAI;IAMZ;;4DAEwD;IACxD,OAAO,CAAC,WAAW;IAcnB;uEACmE;IACnE,OAAO,CAAC,aAAa;CAgBtB;AAED;;;;;+DAK+D;AAC/D,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAE1E"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { resolveReasoningContext } from "./config.js";
|
|
2
|
+
// 夜移 011 (DeepSeek-Reasonix internal/provider/openai/think.go:18-98): the
|
|
3
|
+
// in-band `<think>` splitter. vLLM chat-template lanes (`qwen-chat-template`
|
|
4
|
+
// format — `chat_template_kwargs.enable_thinking`) inline the model's CoT
|
|
5
|
+
// into the CONTENT channel as a turn-initial `<think>…</think>` block instead
|
|
6
|
+
// of a separate reasoning field. Without peeling, that CoT pollutes the
|
|
7
|
+
// assistant content — it replays forever, immune to the reasoning-replay
|
|
8
|
+
// contract (夜移 011's whole point), and double-bills every turn after the
|
|
9
|
+
// first. The machine routes the block into the reasoning channel, where the
|
|
10
|
+
// existing replay/effort machinery governs it like native reasoning.
|
|
11
|
+
//
|
|
12
|
+
// Three rules, straight from Reasonix:
|
|
13
|
+
// 1. ARMED ONLY AT TURN START — a `<think>` mentioned mid-prose (docs,
|
|
14
|
+
// code about think tags) is never hijacked; only a block at the very
|
|
15
|
+
// beginning of the content stream peels.
|
|
16
|
+
// 2. DELTA-BOUNDARY HOLDBACK — either tag can straddle SSE deltas
|
|
17
|
+
// (`…</th` + `ink>…`); the longest marker-prefix suffix is held back
|
|
18
|
+
// until the next delta resolves it, so no tag fragment ever leaks into
|
|
19
|
+
// either channel.
|
|
20
|
+
// 3. UNTERMINATED BLOCK = REASONING TO THE END — a stream that dies inside
|
|
21
|
+
// an open think block classifies everything it emitted as reasoning
|
|
22
|
+
// (never silently drops, never dumps CoT into content).
|
|
23
|
+
const OPEN_TAG = "<think>";
|
|
24
|
+
const CLOSE_TAG = "</think>";
|
|
25
|
+
/** Longest suffix of `s` that is a PROPER prefix of `marker` ("" if none) —
|
|
26
|
+
* the holdback rule. A full marker is not held (it IS the tag; the caller
|
|
27
|
+
* consumes it), and `s` itself shorter than the marker can be held whole. */
|
|
28
|
+
function heldPrefix(s, marker) {
|
|
29
|
+
const max = Math.min(s.length, marker.length - 1);
|
|
30
|
+
for (let k = max; k > 0; k--) {
|
|
31
|
+
if (s.endsWith(marker.slice(0, k)))
|
|
32
|
+
return s.slice(s.length - k);
|
|
33
|
+
}
|
|
34
|
+
return "";
|
|
35
|
+
}
|
|
36
|
+
/** The pure streaming state machine. Not tied to SSE, fetch, or config —
|
|
37
|
+
* feed content deltas, get classifications, call finish() once at stream
|
|
38
|
+
* end. Single-turn: one instance per assistant turn (loop resets per call). */
|
|
39
|
+
export class InbandThinkSplitter {
|
|
40
|
+
state = "seeking";
|
|
41
|
+
held = "";
|
|
42
|
+
finished = false;
|
|
43
|
+
push(delta) {
|
|
44
|
+
if (delta === "" || this.finished)
|
|
45
|
+
return {};
|
|
46
|
+
this.held += delta;
|
|
47
|
+
if (this.state === "seeking")
|
|
48
|
+
return this.stepSeeking();
|
|
49
|
+
if (this.state === "reasoning")
|
|
50
|
+
return this.stepReasoning();
|
|
51
|
+
return { content: this.take() };
|
|
52
|
+
}
|
|
53
|
+
/** Stream end: flush what the holdback still owes. Seeking-held bytes were
|
|
54
|
+
* never a tag → content; reasoning-held bytes (including a dangling
|
|
55
|
+
* close-tag prefix) → reasoning (the unterminated-block rule). */
|
|
56
|
+
finish() {
|
|
57
|
+
if (this.finished)
|
|
58
|
+
return {};
|
|
59
|
+
this.finished = true;
|
|
60
|
+
if (this.held === "")
|
|
61
|
+
return {};
|
|
62
|
+
if (this.state === "reasoning")
|
|
63
|
+
return { reasoning: this.take() };
|
|
64
|
+
return { content: this.take() };
|
|
65
|
+
}
|
|
66
|
+
take() {
|
|
67
|
+
const out = this.held;
|
|
68
|
+
this.held = "";
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
/** Turn start: decide armed-or-not. Leading whitespace is template
|
|
72
|
+
* artifact — held (and swallowed) while a tag might still follow,
|
|
73
|
+
* flushed as content the moment real prose arrives. */
|
|
74
|
+
stepSeeking() {
|
|
75
|
+
const idx = this.held.search(/\S/);
|
|
76
|
+
if (idx === -1)
|
|
77
|
+
return {}; // whitespace only — cannot decide yet
|
|
78
|
+
const rest = this.held.slice(idx);
|
|
79
|
+
if (rest.startsWith(OPEN_TAG)) {
|
|
80
|
+
this.state = "reasoning";
|
|
81
|
+
this.held = rest.slice(OPEN_TAG.length);
|
|
82
|
+
return this.stepReasoning();
|
|
83
|
+
}
|
|
84
|
+
if (OPEN_TAG.startsWith(rest))
|
|
85
|
+
return {}; // still could become the open tag
|
|
86
|
+
this.state = "content";
|
|
87
|
+
return { content: this.take() }; // prose (or a partial that can't be the tag)
|
|
88
|
+
}
|
|
89
|
+
/** Inside the block: everything up to `</think>` is reasoning; a possible
|
|
90
|
+
* straddling close-tag prefix is held back for the next delta. */
|
|
91
|
+
stepReasoning() {
|
|
92
|
+
const close = this.held.indexOf(CLOSE_TAG);
|
|
93
|
+
if (close >= 0) {
|
|
94
|
+
const before = this.held.slice(0, close);
|
|
95
|
+
this.held = this.held.slice(close + CLOSE_TAG.length);
|
|
96
|
+
this.state = "content";
|
|
97
|
+
// Remainder after the tag is content — but it might itself end in a
|
|
98
|
+
// partial NOTHING (content state has no markers), so emit it directly.
|
|
99
|
+
const after = this.take();
|
|
100
|
+
return { ...(before !== "" ? { reasoning: before } : {}), ...(after !== "" ? { content: after } : {}) };
|
|
101
|
+
}
|
|
102
|
+
const hold = heldPrefix(this.held, CLOSE_TAG);
|
|
103
|
+
const emit = this.held.slice(0, this.held.length - hold.length);
|
|
104
|
+
this.held = hold;
|
|
105
|
+
return emit !== "" ? { reasoning: emit } : {};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** 夜移 011: whether this config's content stream needs the in-band peel.
|
|
109
|
+
* The `qwen-chat-template` format IS the vLLM inline-CoT lane — selecting
|
|
110
|
+
* it turns the splitter on with no extra knob. An explicit
|
|
111
|
+
* `splitInbandThinking` beats the format default in both directions (a
|
|
112
|
+
* misbehaving gateway on another format can opt in; a qwen-chat-template
|
|
113
|
+
* deployment that reports reasoning properly can opt out). */
|
|
114
|
+
export function resolveSplitInbandThinking(config) {
|
|
115
|
+
return config.splitInbandThinking ?? resolveReasoningContext(config).format === "qwen-chat-template";
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=split-inband-thinking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-inband-thinking.js","sourceRoot":"","sources":["../src/split-inband-thinking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/** ω99-315: soft 档缺省 90s —— 推理模型的长静默是合法的,先警示不取消。 */
|
|
2
|
+
export declare const DEFAULT_STREAM_IDLE_SOFT_MS = 90000;
|
|
3
|
+
/** ω99-315: hard 档缺省 300s —— 真挂死不超过用户容忍(5 分钟无字节)。 */
|
|
4
|
+
export declare const DEFAULT_STREAM_IDLE_HARD_MS = 300000;
|
|
5
|
+
/** Node's setTimeout wraps beyond 2^31-1 ms into an IMMEDIATE fire — a
|
|
6
|
+
* garbage-large idle value must degrade to "wait as long as possible", not
|
|
7
|
+
* "abort instantly". */
|
|
8
|
+
export declare const MAX_STREAM_IDLE_TIMEOUT_MS = 2147483647;
|
|
9
|
+
/**
|
|
10
|
+
* M58 §B 引入的 hard 档缺省(当年 45s 单档)。ω99-315 双档化后它就是 hard
|
|
11
|
+
* 档的缺省(300s)——legacy 名字与 import 面保留(`WUDAO_STREAM_IDLE_MS` 与
|
|
12
|
+
* `streamIdleTimeoutMs` 选项仍指 hard 档)。
|
|
13
|
+
*/
|
|
14
|
+
export declare const DEFAULT_STREAM_IDLE_TIMEOUT_MS = 300000;
|
|
15
|
+
/** WUDAO_STREAM_IDLE_MS (integer ms ≥ 0); junk falls back to the default,
|
|
16
|
+
* 0 disables the watchdog (both tiers when it is the only override), values
|
|
17
|
+
* past the setTimeout limit clamp to it. ω99-315: still the HARD tier's env
|
|
18
|
+
* override — the soft tier has no env (it warns only; settings keys own it). */
|
|
19
|
+
export declare function defaultStreamIdleTimeoutMs(env?: NodeJS.ProcessEnv): number;
|
|
20
|
+
/** ω99-315: 一次软警告的可观测载荷。`softWarns` 是本流自开始起每次软警告
|
|
21
|
+
* 的相对时刻(ms)——硬超时抛出的 StreamIdleError 携带同一时间线。 */
|
|
22
|
+
export interface StreamIdleWarningInfo {
|
|
23
|
+
/** The soft budget that lapsed (the configured softMs, not wall-elapsed). */
|
|
24
|
+
readonly idleMs: number;
|
|
25
|
+
/** Wire bytes received since the stream started (attribution). */
|
|
26
|
+
readonly bytesSoFar: number;
|
|
27
|
+
/** Elapsed-ms timeline (stream start) of every soft warning so far. */
|
|
28
|
+
readonly softWarns: readonly number[];
|
|
29
|
+
}
|
|
30
|
+
/** The typed idle-timeout abort. Retryable by the ladder (unlike a USER abort,
|
|
31
|
+
* which surfaces as AbortError and is never retried). ω99-315 enriches it with
|
|
32
|
+
* the forensic triple the brief demands: idle duration / received bytes / the
|
|
33
|
+
* soft-warning timeline. */
|
|
34
|
+
export declare class StreamIdleError extends Error {
|
|
35
|
+
readonly idleMs: number;
|
|
36
|
+
/** ω99-315: wire bytes received before the abort. */
|
|
37
|
+
readonly bytes: number;
|
|
38
|
+
/** ω99-315: elapsed-ms timeline of soft warnings before the abort. */
|
|
39
|
+
readonly softWarns: readonly number[];
|
|
40
|
+
constructor(idleMs: number, detail?: {
|
|
41
|
+
bytes?: number;
|
|
42
|
+
softWarns?: readonly number[];
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/** The resolved two-tier budget. 0 in a slot disables that tier. */
|
|
46
|
+
export interface StreamIdleBudget {
|
|
47
|
+
readonly softMs: number;
|
|
48
|
+
readonly hardMs: number;
|
|
49
|
+
}
|
|
50
|
+
/** What a factory resolves once and threads into its stream attempt: the
|
|
51
|
+
* budget plus the soft tier's warn hook. */
|
|
52
|
+
export type StreamIdleRuntime = StreamIdleBudget & {
|
|
53
|
+
readonly onSoftWarning?: (info: StreamIdleWarningInfo) => void;
|
|
54
|
+
};
|
|
55
|
+
/** ω99-315: option/env → the two-tier budget. Precedence:
|
|
56
|
+
* hard hardMs(新键) → legacyTimeoutMs(M58 单档选项)→ WUDAO_STREAM_IDLE_MS
|
|
57
|
+
* (M58 env)→ 300s 缺省;
|
|
58
|
+
* soft softMs(新键)→ 90s 缺省;但 legacyTimeoutMs === 0(M58 的「0 关
|
|
59
|
+
* 看门狗」逃生口)在没有新键时同时关掉 soft——老用户的 0 语义不变。 */
|
|
60
|
+
export declare function resolveStreamIdleBudget(opts: {
|
|
61
|
+
softMs?: number;
|
|
62
|
+
hardMs?: number;
|
|
63
|
+
legacyTimeoutMs?: number;
|
|
64
|
+
}, env?: NodeJS.ProcessEnv): StreamIdleBudget;
|
|
65
|
+
/**
|
|
66
|
+
* The per-stream dual-tier watchdog state machine (shared by the openai
|
|
67
|
+
* engine's inline SSE loop and the anthropic/responses sseDataLines).
|
|
68
|
+
*
|
|
69
|
+
* arm() (re)arm for a pending read. Idempotent WITHIN a gap: after a
|
|
70
|
+
* soft warning the hard timer keeps its original deadline.
|
|
71
|
+
* chunk(bytes) a read resolved with payload — the gap is over; both timers
|
|
72
|
+
* reset and the byte counter accrues.
|
|
73
|
+
* race(read) race the pending read against the HARD tier only (the soft
|
|
74
|
+
* tier is a pure side-effect callback — it never wakes the
|
|
75
|
+
* consumer, never yields an event, and therefore can never
|
|
76
|
+
* trip the retry ladder's produced guard).
|
|
77
|
+
* dispose() tear the timers down (finally seam).
|
|
78
|
+
*
|
|
79
|
+
* The hard timer rejects FIRST and cancels the body SECOND — Node resolves the
|
|
80
|
+
* pending read synchronously inside reader.cancel() (done:true), and the race
|
|
81
|
+
* must adopt the typed error, not the cancel's done. The user's abort signal
|
|
82
|
+
* stays untouched: a USER abort surfaces as AbortError (never retried); only
|
|
83
|
+
* idle-timeout aborts retry.
|
|
84
|
+
*/
|
|
85
|
+
export interface StreamIdleGuard {
|
|
86
|
+
arm(): void;
|
|
87
|
+
chunk(bytes: number): void;
|
|
88
|
+
race<T>(read: Promise<T>): Promise<T>;
|
|
89
|
+
dispose(): void;
|
|
90
|
+
}
|
|
91
|
+
export declare function createStreamIdleGuard(budget: StreamIdleBudget, opts?: {
|
|
92
|
+
/** The soft tier's warn hook — fires at most once per silent gap. */
|
|
93
|
+
onSoftWarning?: (info: StreamIdleWarningInfo) => void;
|
|
94
|
+
/** The hard tier's body teardown (reader.cancel) — reject first, then this. */
|
|
95
|
+
cancel?: () => void;
|
|
96
|
+
}): StreamIdleGuard;
|
|
97
|
+
//# sourceMappingURL=stream-idle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-idle.d.ts","sourceRoot":"","sources":["../src/stream-idle.ts"],"names":[],"mappings":"AAmBA,oDAAoD;AACpD,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAElD,qDAAqD;AACrD,eAAO,MAAM,2BAA2B,SAAU,CAAC;AAEnD;;yBAEyB;AACzB,eAAO,MAAM,0BAA0B,aAAgB,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,SAA8B,CAAC;AAE1E;;;iFAGiF;AACjF,wBAAgB,0BAA0B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAKvF;AAED;iDACiD;AACjD,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED;;;6BAG6B;AAC7B,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;gBAE1B,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAO;CAO3F;AAED,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;6CAC6C;AAC7C,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG;IACjD,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAChE,CAAC;AAEF;;;;oDAIoD;AACpD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,EACpE,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,gBAAgB,CAOlB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,IAAI,IAAI,CAAC;IACZ,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,GAAE;IACJ,qEAAqE;IACrE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACtD,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CAChB,GACL,eAAe,CAkDjB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// packages/providers/src/stream-idle.ts — ω99-315 流式看门狗双档化。
|
|
2
|
+
// M58 §B 的单档看门狗(45s 硬超时 → StreamIdleError 走既有梯子)演进为两档:
|
|
3
|
+
//
|
|
4
|
+
// soft 缺省 90s(DEFAULT_STREAM_IDLE_SOFT_MS)——只在静默 gap 超过阈值时
|
|
5
|
+
// 发一次 onStreamIdleWarning 回调,绝不取消、绝不产生额外模型请求。
|
|
6
|
+
// 推理模型(悟道/DeepSeek/GLM/Qwen)的长静默思考是合法的:先警示,
|
|
7
|
+
// 不动连接。每个 gap 至多警告一次(收到 chunk 即重置)。
|
|
8
|
+
// hard 缺省 300s(DEFAULT_STREAM_IDLE_HARD_MS)——abort 下载(reader.cancel)
|
|
9
|
+
// 并抛富化的 StreamIdleError(idleMs / 收到的字节数 / 软警告时间线),
|
|
10
|
+
// 走既有重试梯子。hard 锚定 gap 起点:soft 的唤配不滑移 hard 的死线。
|
|
11
|
+
//
|
|
12
|
+
// M24 前缀缓存不变量的直接变现:重试重发的是同一个 ModelInput 的同一份
|
|
13
|
+
// 序列化字节(各适配器的请求体构建是确定性的),重连命中 provider 前缀
|
|
14
|
+
// 缓存——重连成本≈增量 token,而不是冷缓存重算。
|
|
15
|
+
//
|
|
16
|
+
// 分层边界(ω99-315 钉死):看门狗只「检测挂死 + 取消」;恢复走既有两臂
|
|
17
|
+
// ——providers 的 pre-delta 重试梯子(withRetryStream)与 core 的
|
|
18
|
+
// callModelWithTurnRecovery 恢复臂(post-delta)。绝不在这造第二套重试。
|
|
19
|
+
/** ω99-315: soft 档缺省 90s —— 推理模型的长静默是合法的,先警示不取消。 */
|
|
20
|
+
export const DEFAULT_STREAM_IDLE_SOFT_MS = 90_000;
|
|
21
|
+
/** ω99-315: hard 档缺省 300s —— 真挂死不超过用户容忍(5 分钟无字节)。 */
|
|
22
|
+
export const DEFAULT_STREAM_IDLE_HARD_MS = 300_000;
|
|
23
|
+
/** Node's setTimeout wraps beyond 2^31-1 ms into an IMMEDIATE fire — a
|
|
24
|
+
* garbage-large idle value must degrade to "wait as long as possible", not
|
|
25
|
+
* "abort instantly". */
|
|
26
|
+
export const MAX_STREAM_IDLE_TIMEOUT_MS = 2_147_483_647;
|
|
27
|
+
/**
|
|
28
|
+
* M58 §B 引入的 hard 档缺省(当年 45s 单档)。ω99-315 双档化后它就是 hard
|
|
29
|
+
* 档的缺省(300s)——legacy 名字与 import 面保留(`WUDAO_STREAM_IDLE_MS` 与
|
|
30
|
+
* `streamIdleTimeoutMs` 选项仍指 hard 档)。
|
|
31
|
+
*/
|
|
32
|
+
export const DEFAULT_STREAM_IDLE_TIMEOUT_MS = DEFAULT_STREAM_IDLE_HARD_MS;
|
|
33
|
+
/** WUDAO_STREAM_IDLE_MS (integer ms ≥ 0); junk falls back to the default,
|
|
34
|
+
* 0 disables the watchdog (both tiers when it is the only override), values
|
|
35
|
+
* past the setTimeout limit clamp to it. ω99-315: still the HARD tier's env
|
|
36
|
+
* override — the soft tier has no env (it warns only; settings keys own it). */
|
|
37
|
+
export function defaultStreamIdleTimeoutMs(env = process.env) {
|
|
38
|
+
const raw = env.WUDAO_STREAM_IDLE_MS;
|
|
39
|
+
if (raw === undefined || raw === "")
|
|
40
|
+
return DEFAULT_STREAM_IDLE_TIMEOUT_MS;
|
|
41
|
+
const n = Number(raw);
|
|
42
|
+
return Number.isInteger(n) && n >= 0 ? Math.min(n, MAX_STREAM_IDLE_TIMEOUT_MS) : DEFAULT_STREAM_IDLE_TIMEOUT_MS;
|
|
43
|
+
}
|
|
44
|
+
/** The typed idle-timeout abort. Retryable by the ladder (unlike a USER abort,
|
|
45
|
+
* which surfaces as AbortError and is never retried). ω99-315 enriches it with
|
|
46
|
+
* the forensic triple the brief demands: idle duration / received bytes / the
|
|
47
|
+
* soft-warning timeline. */
|
|
48
|
+
export class StreamIdleError extends Error {
|
|
49
|
+
idleMs;
|
|
50
|
+
/** ω99-315: wire bytes received before the abort. */
|
|
51
|
+
bytes;
|
|
52
|
+
/** ω99-315: elapsed-ms timeline of soft warnings before the abort. */
|
|
53
|
+
softWarns;
|
|
54
|
+
constructor(idleMs, detail = {}) {
|
|
55
|
+
super(`stream idle for ${idleMs}ms without a chunk — watchdog abort`);
|
|
56
|
+
this.name = "StreamIdleError";
|
|
57
|
+
this.idleMs = idleMs;
|
|
58
|
+
this.bytes = detail.bytes ?? 0;
|
|
59
|
+
this.softWarns = detail.softWarns ?? [];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** ω99-315: option/env → the two-tier budget. Precedence:
|
|
63
|
+
* hard hardMs(新键) → legacyTimeoutMs(M58 单档选项)→ WUDAO_STREAM_IDLE_MS
|
|
64
|
+
* (M58 env)→ 300s 缺省;
|
|
65
|
+
* soft softMs(新键)→ 90s 缺省;但 legacyTimeoutMs === 0(M58 的「0 关
|
|
66
|
+
* 看门狗」逃生口)在没有新键时同时关掉 soft——老用户的 0 语义不变。 */
|
|
67
|
+
export function resolveStreamIdleBudget(opts, env = process.env) {
|
|
68
|
+
const hardMs = opts.hardMs ?? opts.legacyTimeoutMs ?? defaultStreamIdleTimeoutMs(env);
|
|
69
|
+
const softMs = opts.softMs ?? (opts.legacyTimeoutMs === 0 ? 0 : DEFAULT_STREAM_IDLE_SOFT_MS);
|
|
70
|
+
return {
|
|
71
|
+
softMs: Math.min(softMs, MAX_STREAM_IDLE_TIMEOUT_MS),
|
|
72
|
+
hardMs: Math.min(hardMs, MAX_STREAM_IDLE_TIMEOUT_MS),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export function createStreamIdleGuard(budget, opts = {}) {
|
|
76
|
+
const startedAt = Date.now();
|
|
77
|
+
let bytes = 0;
|
|
78
|
+
const softWarns = [];
|
|
79
|
+
let softTimer;
|
|
80
|
+
let hardTimer;
|
|
81
|
+
let hardRace;
|
|
82
|
+
let armed = false;
|
|
83
|
+
const clearTimers = () => {
|
|
84
|
+
if (softTimer !== undefined)
|
|
85
|
+
clearTimeout(softTimer);
|
|
86
|
+
if (hardTimer !== undefined)
|
|
87
|
+
clearTimeout(hardTimer);
|
|
88
|
+
softTimer = undefined;
|
|
89
|
+
hardTimer = undefined;
|
|
90
|
+
hardRace = undefined;
|
|
91
|
+
armed = false;
|
|
92
|
+
};
|
|
93
|
+
return {
|
|
94
|
+
arm() {
|
|
95
|
+
if (armed)
|
|
96
|
+
return; // hard keeps its original deadline across a soft wake
|
|
97
|
+
armed = true;
|
|
98
|
+
if (budget.softMs > 0) {
|
|
99
|
+
softTimer = setTimeout(() => {
|
|
100
|
+
softTimer = undefined;
|
|
101
|
+
softWarns.push(Date.now() - startedAt);
|
|
102
|
+
opts.onSoftWarning?.({ idleMs: budget.softMs, bytesSoFar: bytes, softWarns: [...softWarns] });
|
|
103
|
+
}, budget.softMs);
|
|
104
|
+
}
|
|
105
|
+
if (budget.hardMs > 0) {
|
|
106
|
+
hardRace = new Promise((_, reject) => {
|
|
107
|
+
hardTimer = setTimeout(() => {
|
|
108
|
+
// Reject FIRST, cancel second (see the interface comment).
|
|
109
|
+
reject(new StreamIdleError(budget.hardMs, { bytes, softWarns: [...softWarns] }));
|
|
110
|
+
opts.cancel?.();
|
|
111
|
+
}, budget.hardMs);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
chunk(b) {
|
|
116
|
+
bytes += b;
|
|
117
|
+
clearTimers();
|
|
118
|
+
},
|
|
119
|
+
race(read) {
|
|
120
|
+
return hardRace !== undefined ? Promise.race([read, hardRace]) : read;
|
|
121
|
+
},
|
|
122
|
+
dispose() {
|
|
123
|
+
clearTimers();
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=stream-idle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-idle.js","sourceRoot":"","sources":["../src/stream-idle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ToolCall } from "@wudao-org/core";
|
|
2
|
+
/** Inbound: dedupe parallel same-name tool calls from a name-as-id endpoint.
|
|
3
|
+
* Only the name-as-id shape is touched — within ONE assistant message the
|
|
4
|
+
* 2nd+ occurrence becomes `${name}#2`, `${name}#3`, …; an id that is not
|
|
5
|
+
* the function name (a real `call_*` id) passes through even when repeated
|
|
6
|
+
* and never consumes a counter slot. Order is preserved and no input object
|
|
7
|
+
* is mutated (unchanged elements keep their reference). */
|
|
8
|
+
export declare function dedupeToolCallIds(calls: readonly ToolCall[]): ToolCall[];
|
|
9
|
+
/** Outbound: restore the provider-native shape — strip the `#n` suffix when
|
|
10
|
+
* the id is EXACTLY `${name}#${integer}`; anything else returns as-is
|
|
11
|
+
* (idempotent, and a no-op on real provider ids). */
|
|
12
|
+
export declare function restoreToolCallIds(calls: readonly ToolCall[]): ToolCall[];
|
|
13
|
+
/** Outbound, single-id form — the tool_result message path, where the call
|
|
14
|
+
* list isn't at hand but the tool name rides the message itself. */
|
|
15
|
+
export declare function restoreToolCallId(id: string, name: string): string;
|
|
16
|
+
//# sourceMappingURL=tool-call-ids.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-call-ids.d.ts","sourceRoot":"","sources":["../src/tool-call-ids.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAahD;;;;;4DAK4D;AAC5D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAQxE;AAED;;sDAEsD;AACtD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAEzE;AAED;qEACqE;AACrE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAElE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Is this the name-as-id shape the dedupe applies to (id echoes the name)?
|
|
2
|
+
* Empty ids/names are excluded — a missing id on a missing name is
|
|
3
|
+
* degenerate, and a `#2` suffix on an empty name would be nonsense. */
|
|
4
|
+
const isNameAsId = (id, name) => id !== "" && id === name;
|
|
5
|
+
/** The exact `${name}#${integer}` shape `dedupeToolCallIds` mints (and the
|
|
6
|
+
* restore strips). `#` is not a function-name character for the providers
|
|
7
|
+
* in play, so a real provider id never collides with the shape. */
|
|
8
|
+
const hasSuffix = (id, name) => name !== "" && id.length > name.length + 1 && id.startsWith(`${name}#`) && /^\d+$/.test(id.slice(name.length + 1));
|
|
9
|
+
/** Inbound: dedupe parallel same-name tool calls from a name-as-id endpoint.
|
|
10
|
+
* Only the name-as-id shape is touched — within ONE assistant message the
|
|
11
|
+
* 2nd+ occurrence becomes `${name}#2`, `${name}#3`, …; an id that is not
|
|
12
|
+
* the function name (a real `call_*` id) passes through even when repeated
|
|
13
|
+
* and never consumes a counter slot. Order is preserved and no input object
|
|
14
|
+
* is mutated (unchanged elements keep their reference). */
|
|
15
|
+
export function dedupeToolCallIds(calls) {
|
|
16
|
+
const seen = new Map();
|
|
17
|
+
return calls.map((tc) => {
|
|
18
|
+
if (!isNameAsId(tc.id, tc.name))
|
|
19
|
+
return tc;
|
|
20
|
+
const n = (seen.get(tc.name) ?? 0) + 1;
|
|
21
|
+
seen.set(tc.name, n);
|
|
22
|
+
return n === 1 ? tc : { ...tc, id: `${tc.name}#${n}` };
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** Outbound: restore the provider-native shape — strip the `#n` suffix when
|
|
26
|
+
* the id is EXACTLY `${name}#${integer}`; anything else returns as-is
|
|
27
|
+
* (idempotent, and a no-op on real provider ids). */
|
|
28
|
+
export function restoreToolCallIds(calls) {
|
|
29
|
+
return calls.map((tc) => (hasSuffix(tc.id, tc.name) ? { ...tc, id: tc.name } : tc));
|
|
30
|
+
}
|
|
31
|
+
/** Outbound, single-id form — the tool_result message path, where the call
|
|
32
|
+
* list isn't at hand but the tool name rides the message itself. */
|
|
33
|
+
export function restoreToolCallId(id, name) {
|
|
34
|
+
return hasSuffix(id, name) ? name : id;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=tool-call-ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-call-ids.js","sourceRoot":"","sources":["../src/tool-call-ids.ts"],"names":[],"mappings":"AAoBA;;wEAEwE;AACxE,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,IAAY,EAAW,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AAEnF;;oEAEoE;AACpE,MAAM,SAAS,GAAG,CAAC,EAAU,EAAE,IAAY,EAAW,EAAE,CACtD,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAErH;;;;;4DAK4D;AAC5D,MAAM,UAAU,iBAAiB,CAAC,KAA0B;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;sDAEsD;AACtD,MAAM,UAAU,kBAAkB,CAAC,KAA0B;IAC3D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtF,CAAC;AAED;qEACqE;AACrE,MAAM,UAAU,iBAAiB,CAAC,EAAU,EAAE,IAAY;IACxD,OAAO,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AACzC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wudao-org/providers",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.4.21",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist"
|
|
15
|
+
],
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@wudao-org/core": "0.4.21"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"typescript": "5.6.3",
|
|
21
|
+
"vitest": "2.1.8"
|
|
22
|
+
},
|
|
23
|
+
"description": "OpenAI-compatible ModelClient providers for wudao-harness (DeepSeek/Wudao/GLM/Qwen).",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"author": "feiniaojin",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/feiniaojin/wudao-harness.git"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc -p tsconfig.json",
|
|
32
|
+
"test": "vitest run",
|
|
33
|
+
"test:watch": "vitest"
|
|
34
|
+
}
|
|
6
35
|
}
|