@jsonstudio/rcc 0.89.1121 → 0.89.1136
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/dist/build-info.js +2 -2
- package/dist/cli.js +39 -1
- package/dist/cli.js.map +1 -1
- package/dist/client/gemini/gemini-protocol-client.js +5 -0
- package/dist/client/gemini/gemini-protocol-client.js.map +1 -1
- package/dist/commands/provider-update.js +355 -5
- package/dist/commands/provider-update.js.map +1 -1
- package/dist/docs/daemon-admin-ui.html +583 -87
- package/dist/index.js +32 -1
- package/dist/index.js.map +1 -1
- package/dist/manager/modules/quota/index.d.ts +19 -1
- package/dist/manager/modules/quota/index.js +109 -1
- package/dist/manager/modules/quota/index.js.map +1 -1
- package/dist/manager/types.d.ts +5 -0
- package/dist/providers/core/config/service-profiles.js +1 -1
- package/dist/providers/core/config/service-profiles.js.map +1 -1
- package/dist/providers/core/runtime/gemini-cli-http-provider.js +0 -1
- package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
- package/dist/providers/core/runtime/http-transport-provider.js +26 -38
- package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
- package/dist/server/handlers/handler-utils.d.ts +1 -1
- package/dist/server/handlers/handler-utils.js +4 -4
- package/dist/server/handlers/handler-utils.js.map +1 -1
- package/dist/server/handlers/responses-handler.js +2 -1
- package/dist/server/handlers/responses-handler.js.map +1 -1
- package/dist/server/handlers/sse-dispatcher.js +1 -4
- package/dist/server/handlers/sse-dispatcher.js.map +1 -1
- package/dist/server/runtime/http-server/colored-logger.d.ts +1 -1
- package/dist/server/runtime/http-server/colored-logger.js +22 -10
- package/dist/server/runtime/http-server/colored-logger.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +12 -6
- package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js +116 -98
- package/dist/server/runtime/http-server/daemon-admin/providers-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/quota-handler.js +108 -15
- package/dist/server/runtime/http-server/daemon-admin/quota-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/restart-handler.js +2 -1
- package/dist/server/runtime/http-server/daemon-admin/restart-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin/stats-handler.d.ts +3 -0
- package/dist/server/runtime/http-server/daemon-admin/stats-handler.js +56 -0
- package/dist/server/runtime/http-server/daemon-admin/stats-handler.js.map +1 -0
- package/dist/server/runtime/http-server/daemon-admin/status-handler.js +8 -4
- package/dist/server/runtime/http-server/daemon-admin/status-handler.js.map +1 -1
- package/dist/server/runtime/http-server/daemon-admin-routes.d.ts +9 -0
- package/dist/server/runtime/http-server/daemon-admin-routes.js +3 -0
- package/dist/server/runtime/http-server/daemon-admin-routes.js.map +1 -1
- package/dist/server/runtime/http-server/executor-provider.js +74 -0
- package/dist/server/runtime/http-server/executor-provider.js.map +1 -1
- package/dist/server/runtime/http-server/index.d.ts +1 -0
- package/dist/server/runtime/http-server/index.js +42 -11
- package/dist/server/runtime/http-server/index.js.map +1 -1
- package/dist/server/runtime/http-server/request-executor.js +9 -10
- package/dist/server/runtime/http-server/request-executor.js.map +1 -1
- package/dist/server/runtime/http-server/routes.d.ts +5 -0
- package/dist/server/runtime/http-server/routes.js +9 -0
- package/dist/server/runtime/http-server/routes.js.map +1 -1
- package/dist/server/runtime/http-server/stats-manager.d.ts +7 -0
- package/dist/server/runtime/http-server/stats-manager.js +22 -3
- package/dist/server/runtime/http-server/stats-manager.js.map +1 -1
- package/dist/server/runtime/http-server/types.d.ts +5 -0
- package/dist/server/utils/http-error-mapper.js +70 -9
- package/dist/server/utils/http-error-mapper.js.map +1 -1
- package/dist/server/utils/request-id-manager.js +9 -5
- package/dist/server/utils/request-id-manager.js.map +1 -1
- package/dist/server/utils/sse-request-parser.js +2 -1
- package/dist/server/utils/sse-request-parser.js.map +1 -1
- package/dist/server/utils/utf8-chunk-buffer.d.ts +15 -30
- package/dist/server/utils/utf8-chunk-buffer.js +78 -88
- package/dist/server/utils/utf8-chunk-buffer.js.map +1 -1
- package/dist/server/utils/warmup-storm-tracker.js +1 -1
- package/dist/server/utils/warmup-storm-tracker.js.map +1 -1
- package/dist/tools/provider-update/fetch-models.js +8 -5
- package/dist/tools/provider-update/fetch-models.js.map +1 -1
- package/dist/tools/provider-update/probe-context.d.ts +24 -0
- package/dist/tools/provider-update/probe-context.js +199 -0
- package/dist/tools/provider-update/probe-context.js.map +1 -0
- package/dist/tools/provider-update/types.d.ts +1 -0
- package/package.json +3 -3
- package/scripts/scan-apply-patch-samples.mjs +148 -7
|
@@ -1,113 +1,101 @@
|
|
|
1
|
+
import { Transform } from 'stream';
|
|
1
2
|
/**
|
|
2
|
-
* UTF-8
|
|
3
|
+
* A buffer helper that handles splitting UTF-8 characters across chunks.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* It accumulates incoming chunks (Buffer or string) and pushes complete
|
|
6
|
+
* UTF-8 strings downstream. If a chunk ends in the middle of a multi-byte
|
|
7
|
+
* sequence, the bytes are buffered until the next chunk completes it.
|
|
8
|
+
*
|
|
9
|
+
* This uses the utf8-chunk-buffer package implementation logic but wrapped
|
|
10
|
+
* in a stream.Transform for easy piping.
|
|
7
11
|
*/
|
|
8
12
|
export class Utf8ChunkBuffer {
|
|
9
|
-
buffer =
|
|
10
|
-
minChunkSize;
|
|
11
|
-
constructor(minChunkSize = 64) {
|
|
12
|
-
this.minChunkSize = minChunkSize;
|
|
13
|
-
}
|
|
13
|
+
buffer = null;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* @returns Array of complete UTF-8 strings ready to be sent
|
|
15
|
+
* Pushes a new chunk into the buffer.
|
|
16
|
+
* Returns an array of complete UTF-8 strings found so far.
|
|
18
17
|
*/
|
|
19
18
|
push(chunk) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
//
|
|
25
|
-
this.buffer
|
|
26
|
-
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
19
|
+
const data = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
20
|
+
if (!data.length) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
// Combine with pending buffer if any
|
|
24
|
+
const buffer = this.buffer ? Buffer.concat([this.buffer, data]) : data;
|
|
25
|
+
this.buffer = null;
|
|
26
|
+
// Check for incomplete UTF-8 sequence at the end
|
|
27
|
+
// UTF-8 logic:
|
|
28
|
+
// 1-byte: 0xxxxxxx
|
|
29
|
+
// 2-byte: 110xxxxx 10xxxxxx
|
|
30
|
+
// 3-byte: 1110xxxx 10xxxxxx 10xxxxxx
|
|
31
|
+
// 4-byte: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
|
32
|
+
// We scan from the end to find the start byte of the last sequence
|
|
33
|
+
let i = buffer.length - 1;
|
|
34
|
+
let lookback = 0;
|
|
35
|
+
// Look back at most 3 bytes (since max utf8 char is 4 bytes)
|
|
36
|
+
while (i >= 0 && lookback < 4) {
|
|
37
|
+
const byte = buffer[i];
|
|
38
|
+
if ((byte & 0xc0) === 0x80) {
|
|
39
|
+
// Continuation byte (10xxxxxx), keep looking back
|
|
40
|
+
i--;
|
|
41
|
+
lookback++;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Found a start byte or ASCII
|
|
45
|
+
if ((byte & 0x80) === 0x00) {
|
|
46
|
+
// ASCII (0xxxxxxx), complete char. No split at this byte.
|
|
47
|
+
// If we looked back some bytes, those were continuation bytes without a start,
|
|
48
|
+
// which is invalid UTF-8 but we treat it as complete to avoid stuck buffer.
|
|
33
49
|
break;
|
|
34
50
|
}
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
51
|
+
// Multi-byte start
|
|
52
|
+
let charLength = 0;
|
|
53
|
+
if ((byte & 0xe0) === 0xc0)
|
|
54
|
+
charLength = 2;
|
|
55
|
+
else if ((byte & 0xf0) === 0xe0)
|
|
56
|
+
charLength = 3;
|
|
57
|
+
else if ((byte & 0xf8) === 0xf0)
|
|
58
|
+
charLength = 4;
|
|
59
|
+
if (charLength > 0) {
|
|
60
|
+
// We found a start byte. Check if we have enough bytes.
|
|
61
|
+
const available = buffer.length - i;
|
|
62
|
+
if (available < charLength) {
|
|
63
|
+
// Incomplete sequence
|
|
64
|
+
this.buffer = buffer.subarray(i);
|
|
65
|
+
return [buffer.subarray(0, i).toString('utf8')];
|
|
66
|
+
}
|
|
42
67
|
}
|
|
68
|
+
break;
|
|
43
69
|
}
|
|
44
|
-
return
|
|
70
|
+
return [buffer.toString('utf8')];
|
|
45
71
|
}
|
|
46
72
|
/**
|
|
47
|
-
*
|
|
48
|
-
* @returns Remaining buffered text
|
|
73
|
+
* Flushes any remaining bytes in the buffer as a string.
|
|
49
74
|
*/
|
|
50
75
|
flush() {
|
|
51
|
-
if (this.buffer.length
|
|
52
|
-
|
|
76
|
+
if (this.buffer && this.buffer.length > 0) {
|
|
77
|
+
const str = this.buffer.toString('utf8');
|
|
78
|
+
this.buffer = null;
|
|
79
|
+
return [str];
|
|
53
80
|
}
|
|
54
|
-
|
|
55
|
-
this.buffer = Buffer.alloc(0);
|
|
56
|
-
return text;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Find a safe chunk size that doesn't split multibyte UTF-8 characters
|
|
60
|
-
* @param targetSize - Desired chunk size
|
|
61
|
-
* @returns Safe chunk size
|
|
62
|
-
*/
|
|
63
|
-
findSafeChunkSize(targetSize) {
|
|
64
|
-
if (this.buffer.length < targetSize) {
|
|
65
|
-
return 0;
|
|
66
|
-
}
|
|
67
|
-
let size = targetSize;
|
|
68
|
-
// Walk backward from target size to find a safe boundary
|
|
69
|
-
// A safe boundary is where we're not in the middle of a multibyte sequence
|
|
70
|
-
while (size > 0) {
|
|
71
|
-
if (this.isCharBoundary(size)) {
|
|
72
|
-
return size;
|
|
73
|
-
}
|
|
74
|
-
size--;
|
|
75
|
-
}
|
|
76
|
-
return 0;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Check if a position is a character boundary (not in the middle of a multibyte sequence)
|
|
80
|
-
* @param pos - Position to check
|
|
81
|
-
* @returns true if position is a character boundary
|
|
82
|
-
*/
|
|
83
|
-
isCharBoundary(pos) {
|
|
84
|
-
if (pos >= this.buffer.length) {
|
|
85
|
-
return true;
|
|
86
|
-
}
|
|
87
|
-
const byte = this.buffer[pos];
|
|
88
|
-
// If the byte is not a continuation byte (0x80-0xBF), it's a boundary
|
|
89
|
-
// UTF-8 continuation bytes have the pattern 10xxxxxx (0x80-0xBF)
|
|
90
|
-
return (byte & 0xC0) !== 0x80;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Get current buffer size
|
|
94
|
-
*/
|
|
95
|
-
get bufferSize() {
|
|
96
|
-
return this.buffer.length;
|
|
81
|
+
return [];
|
|
97
82
|
}
|
|
98
83
|
}
|
|
99
84
|
/**
|
|
100
|
-
*
|
|
85
|
+
* Creates a Node.js Transform stream that ensures chunks emitted are complete UTF-8 strings.
|
|
86
|
+
* This is useful for processing SSE streams where a chunk might split a multi-byte character.
|
|
101
87
|
*/
|
|
102
|
-
export function
|
|
103
|
-
const buffer = new Utf8ChunkBuffer(
|
|
104
|
-
const { Transform } = require('stream');
|
|
88
|
+
export function createUtf8TransformStream() {
|
|
89
|
+
const buffer = new Utf8ChunkBuffer();
|
|
105
90
|
return new Transform({
|
|
91
|
+
objectMode: true, // We emit strings, not buffers
|
|
106
92
|
transform(chunk, encoding, callback) {
|
|
107
93
|
try {
|
|
108
94
|
const chunks = buffer.push(chunk);
|
|
109
95
|
for (const text of chunks) {
|
|
110
|
-
|
|
96
|
+
if (text) {
|
|
97
|
+
this.push(text);
|
|
98
|
+
}
|
|
111
99
|
}
|
|
112
100
|
callback();
|
|
113
101
|
}
|
|
@@ -117,9 +105,11 @@ export function createUtf8ChunkStream(minChunkSize = 64) {
|
|
|
117
105
|
},
|
|
118
106
|
flush(callback) {
|
|
119
107
|
try {
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
108
|
+
const chunks = buffer.flush();
|
|
109
|
+
for (const text of chunks) {
|
|
110
|
+
if (text) {
|
|
111
|
+
this.push(text);
|
|
112
|
+
}
|
|
123
113
|
}
|
|
124
114
|
callback();
|
|
125
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utf8-chunk-buffer.js","sourceRoot":"","sources":["../../../src/server/utils/utf8-chunk-buffer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"utf8-chunk-buffer.js","sourceRoot":"","sources":["../../../src/server/utils/utf8-chunk-buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ export function flushWarmupStormSummary() {
|
|
|
34
34
|
const durationMs = Math.max(0, stats.lastTimestamp - stats.firstTimestamp);
|
|
35
35
|
const endpointList = Array.from(stats.endpoints);
|
|
36
36
|
const userAgentList = Array.from(stats.userAgents);
|
|
37
|
-
const
|
|
37
|
+
const _reasonList = Array.from(stats.reasons);
|
|
38
38
|
const firstId = stats.firstRequestId ?? 'n/a';
|
|
39
39
|
const lastId = stats.lastRequestId ?? 'n/a';
|
|
40
40
|
console.log(`[warmup-storm] requests=${stats.count} durationMs=${durationMs} endpoints=${endpointList.join(',') || 'unknown'} ua=${userAgentList.join(',') || 'unknown'} first=${firstId} last=${lastId}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warmup-storm-tracker.js","sourceRoot":"","sources":["../../../src/server/utils/warmup-storm-tracker.ts"],"names":[],"mappings":"AAmBA,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,IAAI,KAAK,GAAqB,gBAAgB,EAAE,CAAC;AACjD,IAAI,YAAwC,CAAC;AAE7C,MAAM,UAAU,qBAAqB,CAAC,KAAsB;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC;QAC3B,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC;IACzC,CAAC;IACD,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IACjB,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;IAC1B,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC;IACtC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,oBAAoB,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,oBAAoB;IAC3B,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IACD,YAAY,GAAG,UAAU,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACvC,UAAU,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,
|
|
1
|
+
{"version":3,"file":"warmup-storm-tracker.js","sourceRoot":"","sources":["../../../src/server/utils/warmup-storm-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,12 +64,15 @@ async function buildOAuthHeaders(provider, providerKind, verbose = false) {
|
|
|
64
64
|
overrides.client = client;
|
|
65
65
|
}
|
|
66
66
|
// 统一 tokenFile 路径,避免与运行时 OAuth 流程使用不同文件导致重复授权:
|
|
67
|
-
// -
|
|
68
|
-
// -
|
|
67
|
+
// - 若显式提供 auth.tokenFile,则优先使用;
|
|
68
|
+
// - qwen: 默认 ~/.routecodex/auth/qwen-oauth.json(对齐 oauth-lifecycle 默认);
|
|
69
|
+
// - iflow: 默认保持 upstream/strategy 内置(通常为 ~/.iflow/oauth_creds.json)。
|
|
69
70
|
const home = process.env.HOME || '';
|
|
70
|
-
const tokenFile =
|
|
71
|
-
?
|
|
72
|
-
:
|
|
71
|
+
const tokenFile = (typeof auth.tokenFile === 'string' && auth.tokenFile.trim())
|
|
72
|
+
? auth.tokenFile.trim()
|
|
73
|
+
: kind === 'qwen'
|
|
74
|
+
? path.join(home, '.routecodex', 'auth', 'qwen-oauth.json')
|
|
75
|
+
: undefined;
|
|
73
76
|
const strategy = createProviderOAuthStrategy(kind, overrides, tokenFile);
|
|
74
77
|
// Try existing token first
|
|
75
78
|
let token = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-models.js","sourceRoot":"","sources":["../../../src/tools/provider-update/fetch-models.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"fetch-models.js","sourceRoot":"","sources":["../../../src/tools/provider-update/fetch-models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type ContextProbeFailure = {
|
|
2
|
+
threshold: number;
|
|
3
|
+
status: number;
|
|
4
|
+
statusText?: string;
|
|
5
|
+
message?: string;
|
|
6
|
+
responseSnippet?: string;
|
|
7
|
+
};
|
|
8
|
+
export type ContextProbeModelResult = {
|
|
9
|
+
modelId: string;
|
|
10
|
+
thresholds: number[];
|
|
11
|
+
passed: number[];
|
|
12
|
+
maxPassedTokens: number | null;
|
|
13
|
+
firstFailure?: ContextProbeFailure;
|
|
14
|
+
};
|
|
15
|
+
export declare function buildTextForExactTokenCount(targetTokens: number, encoderModel?: string): string;
|
|
16
|
+
export declare function countTokens(text: string, encoderModel?: string): number;
|
|
17
|
+
export declare function probeContextForModel(modelId: string, thresholds: number[], { endpoint, apiKey, timeoutMs, fetcher, maxRetries, encoderModel }: {
|
|
18
|
+
endpoint: string;
|
|
19
|
+
apiKey?: string;
|
|
20
|
+
timeoutMs?: number;
|
|
21
|
+
fetcher?: typeof fetch;
|
|
22
|
+
maxRetries?: number;
|
|
23
|
+
encoderModel?: string;
|
|
24
|
+
}): Promise<ContextProbeModelResult>;
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { encoding_for_model } from 'tiktoken';
|
|
2
|
+
const encoderCache = new Map();
|
|
3
|
+
function getEncoder(model) {
|
|
4
|
+
const key = model.trim() || 'gpt-4o';
|
|
5
|
+
const existing = encoderCache.get(key);
|
|
6
|
+
if (existing) {
|
|
7
|
+
return existing;
|
|
8
|
+
}
|
|
9
|
+
// tiktoken's TS types restrict this to a known model union; allow override for local experiments.
|
|
10
|
+
const created = encoding_for_model(key);
|
|
11
|
+
encoderCache.set(key, created);
|
|
12
|
+
return created;
|
|
13
|
+
}
|
|
14
|
+
const UNIT_TEXT = 'a ';
|
|
15
|
+
export function buildTextForExactTokenCount(targetTokens, encoderModel = 'gpt-4o') {
|
|
16
|
+
if (!Number.isFinite(targetTokens) || targetTokens <= 0) {
|
|
17
|
+
throw new Error(`Invalid targetTokens: ${targetTokens}`);
|
|
18
|
+
}
|
|
19
|
+
// We deliberately generate text from plain strings (not decode(tokens)) because
|
|
20
|
+
// decode() is not guaranteed to round-trip back to the same token count via encode().
|
|
21
|
+
//
|
|
22
|
+
// Empirically for tiktoken (e.g. 'gpt-4o'), UNIT_TEXT repeat has stable linear growth:
|
|
23
|
+
// encode('a '.repeat(n)).length == n + k
|
|
24
|
+
// We detect k at runtime and compute n to hit targetTokens exactly.
|
|
25
|
+
const encoder = getEncoder(encoderModel);
|
|
26
|
+
if (Math.floor(targetTokens) === 1) {
|
|
27
|
+
return 'a';
|
|
28
|
+
}
|
|
29
|
+
const f1 = encoder.encode(UNIT_TEXT).length;
|
|
30
|
+
const f99 = encoder.encode(UNIT_TEXT.repeat(99)).length;
|
|
31
|
+
const f100 = encoder.encode(UNIT_TEXT.repeat(100)).length;
|
|
32
|
+
const slope = f100 - f99;
|
|
33
|
+
const offset = slope === 1 ? (f1 - 1) : 0;
|
|
34
|
+
let repeats = slope === 1 ? Math.max(1, Math.floor(targetTokens) - offset) : Math.max(1, Math.floor(targetTokens));
|
|
35
|
+
// Fine-tune with minimal extra encodes (should converge immediately for slope=1).
|
|
36
|
+
for (let i = 0; i < 20; i++) {
|
|
37
|
+
const text = UNIT_TEXT.repeat(repeats);
|
|
38
|
+
const tokens = encoder.encode(text).length;
|
|
39
|
+
if (tokens === Math.floor(targetTokens)) {
|
|
40
|
+
return text;
|
|
41
|
+
}
|
|
42
|
+
if (tokens < Math.floor(targetTokens)) {
|
|
43
|
+
repeats += Math.max(1, Math.floor(targetTokens) - tokens);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
repeats -= Math.max(1, tokens - Math.floor(targetTokens));
|
|
47
|
+
if (repeats <= 0) {
|
|
48
|
+
repeats = 1;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Last resort: return best-effort (caller will validate).
|
|
53
|
+
return UNIT_TEXT.repeat(repeats);
|
|
54
|
+
}
|
|
55
|
+
export function countTokens(text, encoderModel = 'gpt-4o') {
|
|
56
|
+
const encoder = getEncoder(encoderModel);
|
|
57
|
+
return encoder.encode(text).length;
|
|
58
|
+
}
|
|
59
|
+
function sleep(ms) {
|
|
60
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
61
|
+
}
|
|
62
|
+
async function requestOnce(modelId, threshold, text, opts) {
|
|
63
|
+
const fetcher = opts.fetcher ?? fetch;
|
|
64
|
+
const controller = new AbortController();
|
|
65
|
+
const timeout = setTimeout(() => controller.abort(), opts.timeoutMs);
|
|
66
|
+
try {
|
|
67
|
+
const headers = {
|
|
68
|
+
'Content-Type': 'application/json',
|
|
69
|
+
Accept: 'application/json'
|
|
70
|
+
};
|
|
71
|
+
const key = typeof opts.apiKey === 'string' ? opts.apiKey.trim() : '';
|
|
72
|
+
if (key) {
|
|
73
|
+
headers.Authorization = `Bearer ${key}`;
|
|
74
|
+
}
|
|
75
|
+
const body = {
|
|
76
|
+
model: modelId,
|
|
77
|
+
input: [
|
|
78
|
+
{
|
|
79
|
+
role: 'user',
|
|
80
|
+
content: [
|
|
81
|
+
{
|
|
82
|
+
type: 'input_text',
|
|
83
|
+
text
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
stream: false,
|
|
89
|
+
max_output_tokens: 1
|
|
90
|
+
};
|
|
91
|
+
return await fetcher(opts.endpoint, {
|
|
92
|
+
method: 'POST',
|
|
93
|
+
headers,
|
|
94
|
+
body: JSON.stringify(body),
|
|
95
|
+
signal: controller.signal
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
clearTimeout(timeout);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function requestWithRetries(modelId, threshold, text, opts) {
|
|
103
|
+
let lastError = null;
|
|
104
|
+
for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
|
|
105
|
+
try {
|
|
106
|
+
const resp = await requestOnce(modelId, threshold, text, opts);
|
|
107
|
+
if (resp.status !== 429 && resp.status !== 503 && resp.status !== 504) {
|
|
108
|
+
return resp;
|
|
109
|
+
}
|
|
110
|
+
lastError = new Error(`HTTP ${resp.status}`);
|
|
111
|
+
// Drain body to free sockets.
|
|
112
|
+
try {
|
|
113
|
+
await resp.text();
|
|
114
|
+
}
|
|
115
|
+
catch { /* ignore */ }
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
lastError = err;
|
|
119
|
+
}
|
|
120
|
+
if (attempt < opts.maxRetries) {
|
|
121
|
+
await sleep(500 * (attempt + 1));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
throw lastError instanceof Error ? lastError : new Error(String(lastError ?? 'request failed'));
|
|
125
|
+
}
|
|
126
|
+
export async function probeContextForModel(modelId, thresholds, { endpoint, apiKey, timeoutMs = 60_000, fetcher, maxRetries = 2, encoderModel = 'gpt-4o' }) {
|
|
127
|
+
const model = (modelId || '').trim();
|
|
128
|
+
if (!model) {
|
|
129
|
+
throw new Error('probeContextForModel: modelId is required');
|
|
130
|
+
}
|
|
131
|
+
const normalizedEndpoint = (endpoint || '').trim();
|
|
132
|
+
if (!normalizedEndpoint) {
|
|
133
|
+
throw new Error('probeContextForModel: endpoint is required');
|
|
134
|
+
}
|
|
135
|
+
const sorted = thresholds
|
|
136
|
+
.map((value) => Math.floor(Number(value)))
|
|
137
|
+
.filter((value) => Number.isFinite(value) && value > 0);
|
|
138
|
+
if (!sorted.length) {
|
|
139
|
+
throw new Error('probeContextForModel: thresholds must be non-empty');
|
|
140
|
+
}
|
|
141
|
+
const passed = [];
|
|
142
|
+
let firstFailure;
|
|
143
|
+
for (const threshold of sorted) {
|
|
144
|
+
const text = buildTextForExactTokenCount(threshold, encoderModel);
|
|
145
|
+
const check = countTokens(text, encoderModel);
|
|
146
|
+
if (check !== threshold) {
|
|
147
|
+
throw new Error(`probeContextForModel: internal token mismatch: want=${threshold} got=${check}`);
|
|
148
|
+
}
|
|
149
|
+
let resp;
|
|
150
|
+
try {
|
|
151
|
+
resp = await requestWithRetries(model, threshold, text, {
|
|
152
|
+
endpoint: normalizedEndpoint,
|
|
153
|
+
apiKey,
|
|
154
|
+
timeoutMs,
|
|
155
|
+
fetcher,
|
|
156
|
+
maxRetries
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
firstFailure = {
|
|
161
|
+
threshold,
|
|
162
|
+
status: 0,
|
|
163
|
+
message: err instanceof Error ? err.message : String(err)
|
|
164
|
+
};
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
if (resp.ok) {
|
|
168
|
+
passed.push(threshold);
|
|
169
|
+
// Drain body to reuse socket; but keep it small.
|
|
170
|
+
try {
|
|
171
|
+
await resp.text();
|
|
172
|
+
}
|
|
173
|
+
catch { /* ignore */ }
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
let responseText = '';
|
|
177
|
+
try {
|
|
178
|
+
responseText = await resp.text();
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
responseText = '';
|
|
182
|
+
}
|
|
183
|
+
firstFailure = {
|
|
184
|
+
threshold,
|
|
185
|
+
status: resp.status,
|
|
186
|
+
statusText: resp.statusText,
|
|
187
|
+
responseSnippet: responseText ? responseText.slice(0, 2000) : undefined
|
|
188
|
+
};
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
modelId: model,
|
|
193
|
+
thresholds: sorted,
|
|
194
|
+
passed,
|
|
195
|
+
maxPassedTokens: passed.length ? passed[passed.length - 1] : null,
|
|
196
|
+
...(firstFailure ? { firstFailure } : {})
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=probe-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe-context.js","sourceRoot":"","sources":["../../../src/tools/provider-update/probe-context.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsonstudio/rcc",
|
|
3
|
-
"version": "0.89.
|
|
3
|
+
"version": "0.89.1136",
|
|
4
4
|
"description": "Multi-provider OpenAI proxy server with anthropic/responses/chat support (release)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"dev": "tsx watch src/index.ts",
|
|
38
38
|
"jest:run": "node --experimental-vm-modules ./node_modules/jest/bin/jest.js",
|
|
39
39
|
"test": "npm run test:routing-instructions && npm run mock:regressions",
|
|
40
|
-
"test:routing-instructions": "npm run jest:run -- --runTestsByPath tests/server/runtime/request-executor.single-attempt.spec.ts tests/servertool/virtual-router-series-cooldown.spec.ts tests/servertool/virtual-router-quota-routing.spec.ts tests/servertool/virtual-router-engine-update-deps.spec.ts tests/manager/quota/provider-quota-center.spec.ts tests/manager/quota/provider-quota-store.spec.ts tests/server/http-server/daemon-admin.e2e.spec.ts tests/server/http-server/quota-view-injection.spec.ts tests/server/handlers/sse-timeout.spec.ts tests/utils/is-direct-execution.test.ts tests/utils/windows-netstat.test.ts",
|
|
40
|
+
"test:routing-instructions": "npm run jest:run -- --runTestsByPath tests/server/runtime/request-executor.single-attempt.spec.ts tests/server/runtime/executor-provider.retryable.spec.ts tests/servertool/virtual-router-series-cooldown.spec.ts tests/servertool/virtual-router-quota-routing.spec.ts tests/servertool/virtual-router-engine-update-deps.spec.ts tests/manager/quota/provider-quota-center.spec.ts tests/manager/quota/provider-quota-store.spec.ts tests/server/http-server/daemon-admin.e2e.spec.ts tests/server/http-server/quota-view-injection.spec.ts tests/server/handlers/sse-timeout.spec.ts tests/utils/is-direct-execution.test.ts tests/utils/windows-netstat.test.ts",
|
|
41
41
|
"test:watch": "npm run jest:run -- --watch",
|
|
42
42
|
"test:coverage": "npm run jest:run -- --coverage",
|
|
43
43
|
"test:integration": "npm run jest:run -- --testPathPattern=integration",
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
},
|
|
132
132
|
"dependencies": {
|
|
133
133
|
"@anthropic-ai/sdk": "^0.65.0",
|
|
134
|
-
"@jsonstudio/llms": "^0.6.
|
|
134
|
+
"@jsonstudio/llms": "^0.6.802",
|
|
135
135
|
"@jsonstudio/rcc": "^0.89.555",
|
|
136
136
|
"@lmstudio/sdk": "^1.5.0",
|
|
137
137
|
"@radix-ui/react-switch": "^1.2.6",
|