veryfront 0.1.1002 → 0.1.1003
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/esm/deno.js +1 -1
- package/esm/extensions/ext-llm-openai/src/openai-chat-request-builder.d.ts.map +1 -1
- package/esm/extensions/ext-llm-openai/src/openai-chat-request-builder.js +24 -7
- package/esm/extensions/ext-llm-openai/src/openai-reasoning-models.d.ts.map +1 -1
- package/esm/extensions/ext-llm-openai/src/openai-reasoning-models.js +3 -1
- package/esm/extensions/ext-llm-openai/src/openai-responses-request-builder.d.ts +1 -0
- package/esm/extensions/ext-llm-openai/src/openai-responses-request-builder.d.ts.map +1 -1
- package/esm/extensions/ext-llm-openai/src/openai-responses-request-builder.js +5 -1
- package/esm/src/agent/runtime/message-file-url-refresh.d.ts +2 -0
- package/esm/src/agent/runtime/message-file-url-refresh.d.ts.map +1 -1
- package/esm/src/agent/runtime/message-file-url-refresh.js +92 -18
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
package/esm/deno.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-chat-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-chat-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC/G,OAAO,EACL,KAAK,6BAA6B,EAGnC,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,qBAAqB,GAC7B;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB,GACC;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAEJ,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,6BAA6B,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACpD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EACX;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QACA,IAAI,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACL,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,KAAK,IAAI,KAAK,CAAC;QACb,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ,CAAC;AAUF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,gBAAgB,GACzB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"openai-chat-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-chat-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC/G,OAAO,EACL,KAAK,6BAA6B,EAGnC,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,qBAAqB,GAC7B;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB,GACC;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAEJ,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,6BAA6B,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACpD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EACX;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QACA,IAAI,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACL,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,KAAK,IAAI,KAAK,CAAC;QACb,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ,CAAC;AAUF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,gBAAgB,GACzB,2BAA2B,CAmH7B"}
|
|
@@ -98,14 +98,31 @@ export function buildOpenAIChatRequest(modelId, providerName, options, stream, w
|
|
|
98
98
|
}
|
|
99
99
|
: {}),
|
|
100
100
|
};
|
|
101
|
-
|
|
102
|
-
//
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
101
|
+
// Env-BYOK users historically registered options under "openai-compatible";
|
|
102
|
+
// keep merging that bucket at the lowest precedence. max_tokens is normalized
|
|
103
|
+
// per bucket BEFORE merging so a higher-precedence bucket's max_tokens
|
|
104
|
+
// override still beats a lower bucket's max_completion_tokens.
|
|
105
|
+
const bucketNames = [
|
|
106
|
+
...(providerName === "openai" ? ["openai-compatible"] : []),
|
|
107
|
+
"openai",
|
|
108
|
+
providerName,
|
|
109
|
+
];
|
|
110
|
+
const providerOpts = {};
|
|
111
|
+
for (const bucketName of bucketNames) {
|
|
112
|
+
Object.assign(providerOpts, normalizeNativeMaxTokens(readProviderOptions(options.providerOptions, bucketName), modelId));
|
|
108
113
|
}
|
|
109
114
|
Object.assign(body, providerOpts);
|
|
110
115
|
return body;
|
|
111
116
|
}
|
|
117
|
+
/** Normalizes max_tokens to max_completion_tokens for native OpenAI models. */
|
|
118
|
+
function normalizeNativeMaxTokens(bucket, modelId) {
|
|
119
|
+
if (!isNativeOpenAIModel(modelId) || !("max_tokens" in bucket)) {
|
|
120
|
+
return bucket;
|
|
121
|
+
}
|
|
122
|
+
const normalized = { ...bucket };
|
|
123
|
+
if (!("max_completion_tokens" in normalized)) {
|
|
124
|
+
normalized.max_completion_tokens = normalized.max_tokens;
|
|
125
|
+
}
|
|
126
|
+
delete normalized.max_tokens;
|
|
127
|
+
return normalized;
|
|
128
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-reasoning-models.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-reasoning-models.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,6BAA6B,GAAG,qBAAqB,GAAG,KAAK,CAAC;AAE1E,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,6BAA6B,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;CAChC,CAAC;AAIF,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAG5E;AAuBD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,YAAY,SAAW,GACtB,qBAAqB,GAAG,SAAS,CAwBnC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,6BAA6B,GAAG,SAAS,GAChD,uBAAuB,GAAG,SAAS,CAoBrC;AAED,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,uBAAuB,GACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"openai-reasoning-models.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-reasoning-models.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,6BAA6B,GAAG,qBAAqB,GAAG,KAAK,CAAC;AAE1E,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,6BAA6B,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;CAChC,CAAC;AAIF,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAG5E;AAuBD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,YAAY,SAAW,GACtB,qBAAqB,GAAG,SAAS,CAwBnC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,6BAA6B,GAAG,SAAS,GAChD,uBAAuB,GAAG,SAAS,CAoBrC;AAED,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAIT;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,SAAW,GAAG,OAAO,CAExF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIpE"}
|
|
@@ -59,7 +59,9 @@ export function resolveOpenAIReasoningConfig(modelId, providerName, option) {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
export function shouldRequestOpenAIReasoningSummary(providerName, reasoning) {
|
|
62
|
-
|
|
62
|
+
// Default-reasoning BYOK "openai" requests must not ask for summaries:
|
|
63
|
+
// unverified customer organizations get a 400 from the Responses API.
|
|
64
|
+
return reasoning.source === "explicit" || providerName.toLowerCase() === "veryfront-cloud";
|
|
63
65
|
}
|
|
64
66
|
export function isOpenAIReasoningModel(modelId, providerName = "openai") {
|
|
65
67
|
return getDefaultOpenAIReasoningEffort(modelId, providerName) !== undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-responses-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-responses-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,+BAA+B,EAEhC,MAAM,kCAAkC,CAAC;AAO1C,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/D,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,wBAAwB,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,KAAK,IAAI,KAAK,CAAC;QACb,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ,CAAC;AA6IF,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,gBAAgB,GACzB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"openai-responses-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-responses-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,+BAA+B,EAEhC,MAAM,kCAAkC,CAAC;AAO1C,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/D,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,wBAAwB,EAAE,CAAC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,KAAK,IAAI,KAAK,CAAC;QACb,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ,CAAC;AA6IF,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,gBAAgB,GACzB,sBAAsB,CAsGxB"}
|
|
@@ -162,6 +162,8 @@ export function buildOpenAIResponsesRequest(modelId, providerName, options, stre
|
|
|
162
162
|
const body = {
|
|
163
163
|
model: modelId,
|
|
164
164
|
input,
|
|
165
|
+
// Stay stateless: encrypted reasoning content is never round-tripped via include.
|
|
166
|
+
store: false,
|
|
165
167
|
...(instructions !== undefined ? { instructions } : {}),
|
|
166
168
|
...(stream ? { stream: true } : {}),
|
|
167
169
|
...(options.maxOutputTokens !== undefined
|
|
@@ -208,6 +210,8 @@ export function buildOpenAIResponsesRequest(modelId, providerName, options, stre
|
|
|
208
210
|
}
|
|
209
211
|
: {}),
|
|
210
212
|
};
|
|
211
|
-
|
|
213
|
+
// Env-BYOK users historically registered options under "openai-compatible";
|
|
214
|
+
// keep merging that bucket at the lowest precedence.
|
|
215
|
+
Object.assign(body, readProviderOptions(options.providerOptions, ...(providerName === "openai" ? ["openai-compatible"] : []), "openai", providerName));
|
|
212
216
|
return body;
|
|
213
217
|
}
|
|
@@ -34,4 +34,6 @@ export declare function inlineRuntimeMessageFileContents(messages: readonly Chat
|
|
|
34
34
|
abortSignal?: AbortSignal;
|
|
35
35
|
fetchTimeoutMs?: number;
|
|
36
36
|
}): Promise<ChatUiMessage[]>;
|
|
37
|
+
/** Composes abort signals manually for runtimes without AbortSignal.any (Node < 20.3). */
|
|
38
|
+
export declare function composeAbortSignals(signals: readonly AbortSignal[]): AbortSignal;
|
|
37
39
|
//# sourceMappingURL=message-file-url-refresh.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-file-url-refresh.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/message-file-url-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAE1B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"message-file-url-refresh.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/message-file-url-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAE1B,MAAM,qBAAqB,CAAC;AAM7B,mDAAmD;AACnD,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,2BAA2B,KAC/B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAEjC,sDAAsD;AACtD,MAAM,MAAM,8BAA8B,GAAG;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,yBAAyB,GAAG,CACtC,KAAK,EAAE,8BAA8B,KAClC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAEjC,mDAAmD;AACnD,wBAAgB,+BAA+B,CAC7C,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,yBAAyB,CAe3B;AAED,0CAA0C;AAC1C,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,cAAc,EAAE,sBAAsB,GACrC,OAAO,CAAC,aAAa,EAAE,CAAC,CAqC1B;AAED,2EAA2E;AAC3E,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,gBAAgB,GAAE,yBAA6D,EAC/E,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACpB,GACL,OAAO,CAAC,aAAa,EAAE,CAAC,CA0F1B;AAsLD,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,WAAW,CAuBhF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { isTextPreviewFile, } from "../../chat/types.js";
|
|
2
2
|
const MAX_INLINE_FILE_CONTENT_CHARS = 200_000;
|
|
3
|
+
const MAX_TOTAL_INLINE_FILE_CONTENT_CHARS = 400_000;
|
|
3
4
|
const DEFAULT_RUNTIME_FILE_CONTENT_FETCH_TIMEOUT_MS = 15_000;
|
|
4
5
|
/** Creates a safe runtime file content fetcher. */
|
|
5
6
|
export function createRuntimeFileContentFetcher(options = {}) {
|
|
@@ -51,16 +52,21 @@ export async function resolveRuntimeMessageFileUrls(messages, resolveFileUrl) {
|
|
|
51
52
|
/** Fetches text attachment bodies and adds them as adjacent text parts. */
|
|
52
53
|
export async function inlineRuntimeMessageFileContents(messages, fetchFileContent = createRuntimeFileContentFetcher(), options = {}) {
|
|
53
54
|
const contentByUrl = new Map();
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
55
|
+
const newestUserMessageIndex = findNewestUserMessageIndex(messages);
|
|
56
|
+
const inlineTextByPart = new Map();
|
|
57
|
+
let remainingBudget = MAX_TOTAL_INLINE_FILE_CONTENT_CHARS;
|
|
58
|
+
// Allocate the aggregate inline budget newest-first so the most recent
|
|
59
|
+
// attachments win, then skip fetching entirely once the budget is spent.
|
|
60
|
+
for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex--) {
|
|
61
|
+
const message = messages[messageIndex];
|
|
62
|
+
for (let partIndex = 0; partIndex < message.parts.length; partIndex++) {
|
|
63
|
+
const file = getInlineableFilePart(message.parts[partIndex]);
|
|
62
64
|
if (!file)
|
|
63
65
|
continue;
|
|
66
|
+
if (remainingBudget <= 0) {
|
|
67
|
+
inlineTextByPart.set(`${messageIndex}:${partIndex}`, "[attachment content omitted: inline budget exceeded]");
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
64
70
|
let contentPromise = contentByUrl.get(file.url);
|
|
65
71
|
if (!contentPromise) {
|
|
66
72
|
contentPromise = fetchFileContent({
|
|
@@ -76,16 +82,53 @@ export async function inlineRuntimeMessageFileContents(messages, fetchFileConten
|
|
|
76
82
|
}).then(normalizeInlineFileContent);
|
|
77
83
|
contentByUrl.set(file.url, contentPromise);
|
|
78
84
|
}
|
|
79
|
-
|
|
80
|
-
|
|
85
|
+
let inlineContent;
|
|
86
|
+
try {
|
|
87
|
+
inlineContent = await contentPromise;
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
// Attachments on the newest user message must stay hard failures, and
|
|
91
|
+
// caller aborts always propagate; stale history attachments degrade.
|
|
92
|
+
if (messageIndex === newestUserMessageIndex || options.abortSignal?.aborted) {
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
inlineTextByPart.set(`${messageIndex}:${partIndex}`, `[attachment unavailable: ${file.filename ?? file.uploadId ?? "file"}]`);
|
|
81
96
|
continue;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
97
|
+
}
|
|
98
|
+
if (!inlineContent)
|
|
99
|
+
continue;
|
|
100
|
+
let content = inlineContent.content;
|
|
101
|
+
let truncated = inlineContent.truncated;
|
|
102
|
+
if (content.length > remainingBudget) {
|
|
103
|
+
content = content.slice(0, remainingBudget);
|
|
104
|
+
truncated = true;
|
|
105
|
+
}
|
|
106
|
+
remainingBudget -= content.length;
|
|
107
|
+
inlineTextByPart.set(`${messageIndex}:${partIndex}`, buildInlineFileContentText(file, truncated ? `${content}\n\n[Attachment content truncated]` : content));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return messages.map((message, messageIndex) => {
|
|
111
|
+
if (!message.parts.some((part) => shouldInlineFileContent(part))) {
|
|
112
|
+
return message;
|
|
113
|
+
}
|
|
114
|
+
const parts = [];
|
|
115
|
+
for (let partIndex = 0; partIndex < message.parts.length; partIndex++) {
|
|
116
|
+
parts.push(message.parts[partIndex]);
|
|
117
|
+
const text = inlineTextByPart.get(`${messageIndex}:${partIndex}`);
|
|
118
|
+
if (text) {
|
|
119
|
+
parts.push({ type: "text", text });
|
|
120
|
+
}
|
|
86
121
|
}
|
|
87
122
|
return { ...message, parts };
|
|
88
|
-
})
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function findNewestUserMessageIndex(messages) {
|
|
126
|
+
for (let index = messages.length - 1; index >= 0; index--) {
|
|
127
|
+
if (messages[index]?.role === "user") {
|
|
128
|
+
return index;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return -1;
|
|
89
132
|
}
|
|
90
133
|
function isRecord(value) {
|
|
91
134
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -207,6 +250,37 @@ function appendRuntimeTextContentUntilInlineLimit(content, decoded) {
|
|
|
207
250
|
}
|
|
208
251
|
return { content: `${content}${decoded}`, reachedLimit: false };
|
|
209
252
|
}
|
|
253
|
+
/** Composes abort signals manually for runtimes without AbortSignal.any (Node < 20.3). */
|
|
254
|
+
export function composeAbortSignals(signals) {
|
|
255
|
+
const controller = new AbortController();
|
|
256
|
+
const removeListeners = [];
|
|
257
|
+
const detachAll = () => {
|
|
258
|
+
for (const removeListener of removeListeners) {
|
|
259
|
+
removeListener();
|
|
260
|
+
}
|
|
261
|
+
removeListeners.length = 0;
|
|
262
|
+
};
|
|
263
|
+
for (const signal of signals) {
|
|
264
|
+
if (signal.aborted) {
|
|
265
|
+
detachAll();
|
|
266
|
+
controller.abort(signal.reason);
|
|
267
|
+
return controller.signal;
|
|
268
|
+
}
|
|
269
|
+
const onAbort = () => controller.abort(signal.reason);
|
|
270
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
271
|
+
removeListeners.push(() => signal.removeEventListener("abort", onAbort));
|
|
272
|
+
}
|
|
273
|
+
// Detach listeners from the still-pending source signals once any of them
|
|
274
|
+
// fires, so long-lived caller signals don't accumulate stale listeners.
|
|
275
|
+
controller.signal.addEventListener("abort", detachAll, { once: true });
|
|
276
|
+
return controller.signal;
|
|
277
|
+
}
|
|
278
|
+
function anyAbortSignal(signals) {
|
|
279
|
+
if (typeof AbortSignal.any === "function") {
|
|
280
|
+
return AbortSignal.any([...signals]);
|
|
281
|
+
}
|
|
282
|
+
return composeAbortSignals(signals);
|
|
283
|
+
}
|
|
210
284
|
function createRuntimeFileContentFetchSignal(abortSignal, timeoutMs) {
|
|
211
285
|
const timeoutSignal = AbortSignal.timeout(Math.max(0, timeoutMs));
|
|
212
286
|
if (!abortSignal) {
|
|
@@ -217,7 +291,7 @@ function createRuntimeFileContentFetchSignal(abortSignal, timeoutMs) {
|
|
|
217
291
|
};
|
|
218
292
|
}
|
|
219
293
|
return {
|
|
220
|
-
signal:
|
|
294
|
+
signal: anyAbortSignal([abortSignal, timeoutSignal]),
|
|
221
295
|
wasAbortedByCaller: () => abortSignal.aborted,
|
|
222
296
|
didTimeout: () => timeoutSignal.aborted,
|
|
223
297
|
};
|
|
@@ -277,9 +351,9 @@ function normalizeInlineFileContent(content) {
|
|
|
277
351
|
if (!content || content.trim().length === 0)
|
|
278
352
|
return undefined;
|
|
279
353
|
if (content.length <= MAX_INLINE_FILE_CONTENT_CHARS) {
|
|
280
|
-
return content;
|
|
354
|
+
return { content, truncated: false };
|
|
281
355
|
}
|
|
282
|
-
return
|
|
356
|
+
return { content: content.slice(0, MAX_INLINE_FILE_CONTENT_CHARS), truncated: true };
|
|
283
357
|
}
|
|
284
358
|
function escapeXmlAttr(value) {
|
|
285
359
|
return value.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|