veryfront 0.1.1281 → 0.1.1282

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.
Files changed (80) hide show
  1. package/esm/cli/commands/knowledge/binary-assets.d.ts.map +1 -1
  2. package/esm/cli/commands/knowledge/binary-assets.js +5 -2
  3. package/esm/deno.js +1 -1
  4. package/esm/extensions/ext-llm-anthropic/src/anthropic-request-builder.d.ts.map +1 -1
  5. package/esm/extensions/ext-llm-anthropic/src/anthropic-request-builder.js +13 -12
  6. package/esm/extensions/ext-llm-google/src/google-request-builder.d.ts.map +1 -1
  7. package/esm/extensions/ext-llm-google/src/google-request-builder.js +47 -8
  8. package/esm/extensions/ext-llm-openai/src/openai-provider.d.ts.map +1 -1
  9. package/esm/extensions/ext-llm-openai/src/openai-provider.js +20 -9
  10. package/esm/extensions/ext-llm-openai/src/openai-responses-request-builder.d.ts.map +1 -1
  11. package/esm/extensions/ext-llm-openai/src/openai-responses-request-builder.js +107 -8
  12. package/esm/src/agent/runtime/final-request-budget.d.ts.map +1 -1
  13. package/esm/src/agent/runtime/final-request-budget.js +2 -0
  14. package/esm/src/chat/message-file-parts.d.ts +8 -0
  15. package/esm/src/chat/message-file-parts.d.ts.map +1 -0
  16. package/esm/src/chat/message-file-parts.js +88 -0
  17. package/esm/src/chat/message-prep.d.ts +1 -6
  18. package/esm/src/chat/message-prep.d.ts.map +1 -1
  19. package/esm/src/chat/message-prep.js +2 -77
  20. package/esm/src/html/hydration-script-builder/hydration-runtime.generated.js +1 -1
  21. package/esm/src/integrations/_data.d.ts.map +1 -1
  22. package/esm/src/integrations/_data.js +46 -0
  23. package/esm/src/integrations/client.d.ts.map +1 -1
  24. package/esm/src/integrations/client.js +3 -3
  25. package/esm/src/integrations/limits.d.ts +9 -1
  26. package/esm/src/integrations/limits.d.ts.map +1 -1
  27. package/esm/src/integrations/limits.js +11 -1
  28. package/esm/src/integrations/local-endpoint-executor.d.ts +6 -0
  29. package/esm/src/integrations/local-endpoint-executor.d.ts.map +1 -1
  30. package/esm/src/integrations/local-endpoint-executor.js +226 -29
  31. package/esm/src/integrations/local-tool-source.d.ts.map +1 -1
  32. package/esm/src/integrations/local-tool-source.js +1 -0
  33. package/esm/src/integrations/outlook-service-account.d.ts.map +1 -1
  34. package/esm/src/integrations/outlook-service-account.js +2 -0
  35. package/esm/src/integrations/remote-tools.js +1 -1
  36. package/esm/src/integrations/schema.d.ts +6 -0
  37. package/esm/src/integrations/schema.d.ts.map +1 -1
  38. package/esm/src/integrations/schema.js +5 -0
  39. package/esm/src/internal-agents/managed-recovery-http.d.ts +19 -1
  40. package/esm/src/internal-agents/managed-recovery-http.d.ts.map +1 -1
  41. package/esm/src/internal-agents/managed-recovery-http.js +102 -12
  42. package/esm/src/internal-agents/recovery-source-manifest.d.ts +5 -2
  43. package/esm/src/internal-agents/recovery-source-manifest.d.ts.map +1 -1
  44. package/esm/src/internal-agents/recovery-source-manifest.js +114 -13
  45. package/esm/src/llm/file.d.ts +79 -0
  46. package/esm/src/llm/file.d.ts.map +1 -0
  47. package/esm/src/llm/file.js +147 -0
  48. package/esm/src/llm/index.d.ts +2 -0
  49. package/esm/src/llm/index.d.ts.map +1 -1
  50. package/esm/src/llm/index.js +2 -0
  51. package/esm/src/platform/compat/http/pinned-fetch.d.ts +1 -1
  52. package/esm/src/provider/model-registry.d.ts.map +1 -1
  53. package/esm/src/provider/model-registry.js +1 -11
  54. package/esm/src/provider/runtime-loader/inline-file.d.ts +40 -0
  55. package/esm/src/provider/runtime-loader/inline-file.d.ts.map +1 -0
  56. package/esm/src/provider/runtime-loader/inline-file.js +89 -0
  57. package/esm/src/provider/runtime-loader.d.ts.map +1 -1
  58. package/esm/src/provider/runtime-loader.js +12 -4
  59. package/esm/src/provider/shared/index.d.ts +1 -0
  60. package/esm/src/provider/shared/index.d.ts.map +1 -1
  61. package/esm/src/provider/shared/index.js +2 -0
  62. package/esm/src/provider/types.d.ts +2 -0
  63. package/esm/src/provider/types.d.ts.map +1 -1
  64. package/esm/src/provider/veryfront-cloud/model-catalog.d.ts +2 -2
  65. package/esm/src/provider/veryfront-cloud/model-catalog.d.ts.map +1 -1
  66. package/esm/src/provider/veryfront-cloud/model-catalog.js +3 -3
  67. package/esm/src/runtime/model-call-context-request.d.ts +3 -1
  68. package/esm/src/runtime/model-call-context-request.d.ts.map +1 -1
  69. package/esm/src/runtime/model-call-context-request.js +17 -6
  70. package/esm/src/security/private-sha256.d.ts +1 -1
  71. package/esm/src/security/private-sha256.d.ts.map +1 -1
  72. package/esm/src/tool/remote-mcp.js +1 -1
  73. package/esm/src/tool/remote-source-tools.d.ts.map +1 -1
  74. package/esm/src/tool/remote-source-tools.js +4 -2
  75. package/esm/src/utils/response-body.d.ts +11 -0
  76. package/esm/src/utils/response-body.d.ts.map +1 -1
  77. package/esm/src/utils/response-body.js +58 -0
  78. package/esm/src/utils/version-constant.d.ts +1 -1
  79. package/esm/src/utils/version-constant.js +1 -1
  80. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"binary-assets.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/knowledge/binary-assets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAkBhE,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAGvE;AAwCD,mGAAmG;AACnG,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA+GhC;AAED,8FAA8F;AAC9F,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CA0HpF"}
1
+ {"version":3,"file":"binary-assets.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/knowledge/binary-assets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAkBhE,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAGvE;AAwCD,mGAAmG;AACnG,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA+GhC;AAED,8FAA8F;AAC9F,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CA6HpF"}
@@ -221,8 +221,11 @@ export async function readKnowledgeBundle(input) {
221
221
  typeof entry.content_path === "string") {
222
222
  const expectedPath = `/projects/${encodeURIComponent(input.project)}/knowledge/assets/${encodeURIComponent(entry.path)}`;
223
223
  const url = new URL(entry.content_path, "https://bundle.invalid");
224
- if (url.origin !== "https://bundle.invalid" || url.hash !== "" ||
225
- [...url.searchParams].length !== 3 || url.pathname !== expectedPath ||
224
+ const historical = url.searchParams.has("historical");
225
+ if ((historical &&
226
+ (scope.key !== "branch_id" || url.searchParams.get("historical") !== "true")) ||
227
+ url.origin !== "https://bundle.invalid" || url.hash !== "" ||
228
+ [...url.searchParams].length !== (historical ? 4 : 3) || url.pathname !== expectedPath ||
226
229
  url.searchParams.get(scope.key) !== scope.id ||
227
230
  url.searchParams.has(scope.key === "branch_id" ? "release_id" : "branch_id") ||
228
231
  url.searchParams.get("file_version_id") !== entry.file_version_id ||
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.1281",
3
+ "version": "0.1.1282",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": {
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-anthropic/src/anthropic-request-builder.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,uBAAuB,EAEvB,0BAA0B,EAE3B,MAAM,uCAAuC,CAAC;AAO/C,OAAO,EACL,KAAK,iCAAiC,EAUvC,MAAM,+BAA+B,CAAC;AAEvC,KAAK,gBAAgB,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AA6E9C,KAAK,0BAA0B,GAAG;IAChC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF,MAAM,WAAW,+BAAgC,SAAQ,uBAAuB;IAC9E,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAC1C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACjD;AAED,gGAAgG;AAChG,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAE/D,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;AAEF,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzC,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACpD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AA6rFF,wBAAgB,iDAAiD,CAC/D,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,gBAAgB,GACzB;IACD,IAAI,EAAE,0BAA0B,CAAC;IACjC,qBAAqB,EAAE,iCAAiC,CAAC;CAC1D,CAoFA;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,gBAAgB,GACzB,0BAA0B,CAQ5B"}
1
+ {"version":3,"file":"anthropic-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-anthropic/src/anthropic-request-builder.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,uBAAuB,EAEvB,0BAA0B,EAE3B,MAAM,uCAAuC,CAAC;AAO/C,OAAO,EACL,KAAK,iCAAiC,EAUvC,MAAM,+BAA+B,CAAC;AAEvC,KAAK,gBAAgB,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AA6E9C,KAAK,0BAA0B,GAAG;IAChC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF,MAAM,WAAW,+BAAgC,SAAQ,uBAAuB;IAC9E,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAC1C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACjD;AAED,gGAAgG;AAChG,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAE/D,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;AAEF,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzC,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACpD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AA0rFF,wBAAgB,iDAAiD,CAC/D,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,gBAAgB,GACzB;IACD,IAAI,EAAE,0BAA0B,CAAC;IACjC,qBAAqB,EAAE,iCAAiC,CAAC;CAC1D,CAoFA;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,gBAAgB,GACzB,0BAA0B,CAQ5B"}
@@ -1,4 +1,4 @@
1
- import { canIdentifyProxyWithoutHooks, closeSchemaForOutputConfig, isProxyWithoutHooks, jsonValuesEqual, readProviderOptions, readRecord, snapshotProviderJsonValue, stringifyToolResultValue, unwrapToolInputSchema, } from "../../../src/provider/shared/index.js";
1
+ import { canIdentifyProxyWithoutHooks, closeSchemaForOutputConfig, isImageFileInput, isProxyWithoutHooks, jsonValuesEqual, readInlineFileData, readProviderOptions, readRecord, readRemoteFileUrl, snapshotProviderJsonValue, stringifyToolResultValue, unsupportedFileInputError, unwrapToolInputSchema, } from "../../../src/provider/shared/index.js";
2
2
  import { assertAnthropicMcpRequestContract, normalizeAnthropicMcpServers, normalizeAnthropicMcpToolsetArgs, } from "./anthropic-mcp-request.js";
3
3
  import { isAnthropicProviderToolResultBlockType, MAX_ANTHROPIC_RAW_ASSISTANT_BLOCKS, MAX_ANTHROPIC_REPLAY_ASSISTANT_MESSAGES, parseAnthropicProviderToolUse, parseAnthropicServerToolResult, snapshotAnthropicRawAssistantMetadata, validateAnthropicRawAssistantMessages, } from "./anthropic-native-content.js";
4
4
  const apply = Reflect.apply;
@@ -664,20 +664,21 @@ function toAnthropicUserContent(parts) {
664
664
  const content = [];
665
665
  for (const part of parts) {
666
666
  if (part.type === "text") {
667
- if (part.text.length > 0) {
667
+ if (part.text.length > 0)
668
668
  content.push({ type: "text", text: part.text });
669
- }
670
669
  continue;
671
670
  }
672
- if (part.type === "image" || part.mediaType.startsWith("image/")) {
673
- content.push({
674
- type: "image",
675
- source: {
676
- type: "url",
677
- url: part.url,
678
- },
679
- });
680
- }
671
+ const mediaType = part.mediaType.toLowerCase();
672
+ const image = isImageFileInput(part);
673
+ if (!image && mediaType !== "application/pdf") {
674
+ throw unsupportedFileInputError("Anthropic", part, "Use an image or a PDF file.");
675
+ }
676
+ const data = readInlineFileData(part);
677
+ const source = data === undefined
678
+ ? { type: "url", url: readRemoteFileUrl("Anthropic", part) }
679
+ // Anthropic accepts only the standard `image/jpeg` spelling.
680
+ : { type: "base64", media_type: mediaType === "image/jpg" ? "image/jpeg" : mediaType, data };
681
+ content.push({ type: image ? "image" : "document", source });
681
682
  }
682
683
  return content;
683
684
  }
@@ -1 +1 @@
1
- {"version":3,"file":"google-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-request-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EAEvB,0BAA0B,EAE3B,MAAM,uCAAuC,CAAC;AAmB/C,MAAM,WAAW,+BAAgC,SAAQ,uBAAuB;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,aAAa,CAAC;QACnC,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,gGAAgG;AAChG,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAE/D,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;AAEF,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,iBAAiB,CAAC,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChC,CAAC;IACF,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE;QACX,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChD,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AA8+BF,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,QAAQ,EAAE,gBAAgB,GACzB,uBAAuB,CAsCzB"}
1
+ {"version":3,"file":"google-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-request-builder.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,uBAAuB,EAEvB,0BAA0B,EAE3B,MAAM,uCAAuC,CAAC;AAmB/C,MAAM,WAAW,+BAAgC,SAAQ,uBAAuB;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,aAAa,CAAC;QACnC,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,gGAAgG;AAChG,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAE/D,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;AAEF,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,iBAAiB,CAAC,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChC,CAAC;IACF,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE;QACX,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChD,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AA4hCF,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,QAAQ,EAAE,gBAAgB,GACzB,uBAAuB,CAsCzB"}
@@ -1,4 +1,4 @@
1
- import { jsonValuesEqual, readRecord, unwrapToolInputSchema } from "../../../src/provider/shared/index.js";
1
+ import { isImageFileInput, jsonValuesEqual, readInlineFileData, readRecord, readRemoteFileUrl, unsupportedFileInputError, unwrapToolInputSchema, } from "../../../src/provider/shared/index.js";
2
2
  import { createGoogleToolCallCorrelationRegistry, GOOGLE_CODE_EXECUTION_TOOL_NAME, googleCodeExecutionInput, googleCodeExecutionOutput, readGoogleCodeExecutionResult, readGoogleExecutableCode, readGooglePartDataField, } from "./google-content-parts.js";
3
3
  import { readGoogleRawAssistantReplay } from "./google-thought-signatures.js";
4
4
  const arrayIsArray = Array.isArray;
@@ -395,6 +395,36 @@ function toGoogleContents(prompt) {
395
395
  contents,
396
396
  };
397
397
  }
398
+ /** A URI the Gemini Files API returned; Gemini reads any supported type from it. */
399
+ function isGeminiFileUri(url) {
400
+ if (!URL.canParse(url))
401
+ return false;
402
+ const { protocol, hostname, pathname } = new URL(url);
403
+ return protocol === "https:" && hostname === "generativelanguage.googleapis.com" &&
404
+ /^\/v1[a-z0-9]*\/files\/[^/]+$/.test(pathname);
405
+ }
406
+ /**
407
+ * Inline types Gemini reads, besides images, audio, video, `text/*`, and
408
+ * `+json`/`+xml` types.
409
+ * Other types, such as archives, fail before inference.
410
+ */
411
+ const GOOGLE_INLINE_DOCUMENT_TYPES = new Set([
412
+ "application/pdf",
413
+ "application/json",
414
+ "application/xml",
415
+ "application/rtf",
416
+ "application/javascript",
417
+ "application/x-javascript",
418
+ "application/x-python",
419
+ "application/x-typescript",
420
+ "application/typescript",
421
+ "application/yaml",
422
+ "application/x-yaml",
423
+ ]);
424
+ function isGoogleInlineMediaType(mimeType) {
425
+ return /^(image|audio|video|text)\//.test(mimeType) || /\+(json|xml)$/.test(mimeType) ||
426
+ GOOGLE_INLINE_DOCUMENT_TYPES.has(mimeType);
427
+ }
398
428
  function toGoogleUserParts(parts) {
399
429
  const content = [];
400
430
  for (const part of parts) {
@@ -404,13 +434,22 @@ function toGoogleUserParts(parts) {
404
434
  }
405
435
  continue;
406
436
  }
407
- if (part.type === "image" || part.mediaType.startsWith("image/")) {
408
- content.push({
409
- fileData: {
410
- mimeType: part.mediaType,
411
- fileUri: part.url,
412
- },
413
- });
437
+ const mimeType = part.mediaType.toLowerCase();
438
+ const data = readInlineFileData(part);
439
+ if (data !== undefined) {
440
+ if (!isGoogleInlineMediaType(mimeType)) {
441
+ throw unsupportedFileInputError("Google", part, "Send a supported type such as an image, audio, video, PDF, or text file.");
442
+ }
443
+ content.push({ inlineData: { mimeType, data } });
444
+ }
445
+ else if (isGeminiFileUri(part.url)) {
446
+ content.push({ fileData: { mimeType, fileUri: part.url } });
447
+ }
448
+ else if (isImageFileInput(part)) {
449
+ content.push({ fileData: { mimeType, fileUri: readRemoteFileUrl("Google", part) } });
450
+ }
451
+ else {
452
+ throw unsupportedFileInputError("Google", part, "Send non-image files as inline data, for example with fileFromBytes, or as a Gemini Files API URI.");
414
453
  }
415
454
  }
416
455
  return content;
@@ -1 +1 @@
1
- {"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAQlB,aAAa,EACb,UAAU,EAEV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAQpB,+BAA+B,EAEhC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,6BAA6B,EAClC,KAAK,+BAA+B,EACrC,MAAM,kCAAkC,CAAC;AA+B1C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,GAChC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,6BAA6B,CAAC;IACxD,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAk7BD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CAsF5E;AAMD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CA8J5E;AA2DD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,gBAAgB,CA4ClB;AAED,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,EAAE,YAAY;IAEvB,WAAW,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;IAyC7E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IAa7E,eAAe,CACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;CAY9E"}
1
+ {"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAQlB,aAAa,EACb,UAAU,EAEV,iBAAiB,EAEjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EASpB,+BAA+B,EAEhC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,6BAA6B,EAClC,KAAK,+BAA+B,EACrC,MAAM,kCAAkC,CAAC;AA+B1C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,GAChC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,6BAA6B,CAAC;IACxD,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAk7BD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CAsF5E;AAMD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CA8J5E;AA2ED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,gBAAgB,CA4ClB;AAED,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,EAAE,YAAY;IAEvB,WAAW,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;IA0C7E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IAa7E,eAAe,CACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;CAY9E"}
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @module extensions/ext-llm-openai/openai-provider
9
9
  */
10
- import { buildProviderError, createOpenAIRequestInit, createWarningCollector, DEFAULT_PROVIDER_STREAM_HEADERS_TIMEOUT_MS, DEFAULT_PROVIDER_STREAM_TOTAL_HEADERS_BUDGET_MS, getOpenAIChatCompletionsUrl, getOpenAIEmbeddingUrl, getOpenAIResponsesUrl, isNumberArray, mergeUsage, notifyProviderRequestRetry, parseRetryAfterMs, ProviderError, ProviderOverloadedError, ProviderQuotaError, ProviderRateLimitError, ProviderRequestError, readGatewayBillingMode, readGatewayUsageCosts, readRecord, requestJson, requestStream, stringifyJsonValue, TOOL_INPUT_PENDING_THRESHOLD_MS, waitForProviderStreamRetry, } from "../../../src/provider/shared/index.js";
10
+ import { buildProviderError, createOpenAIRequestInit, createWarningCollector, DEFAULT_PROVIDER_STREAM_HEADERS_TIMEOUT_MS, DEFAULT_PROVIDER_STREAM_TOTAL_HEADERS_BUDGET_MS, getOpenAIChatCompletionsUrl, getOpenAIEmbeddingUrl, getOpenAIResponsesUrl, isNumberArray, mergeUsage, notifyProviderRequestRetry, parseRetryAfterMs, promptHasDocumentInput, ProviderError, ProviderOverloadedError, ProviderQuotaError, ProviderRateLimitError, ProviderRequestError, readGatewayBillingMode, readGatewayUsageCosts, readRecord, requestJson, requestStream, routesOpenAIDocumentInputToResponses, stringifyJsonValue, TOOL_INPUT_PENDING_THRESHOLD_MS, waitForProviderStreamRetry, } from "../../../src/provider/shared/index.js";
11
11
  import { buildOpenAIChatRequest, } from "./openai-chat-request-builder.js";
12
12
  import { MAX_OPENAI_STREAM_TOOL_CALLS, streamOpenAICompatibleParts } from "./openai-chat-stream.js";
13
13
  import { buildOpenAIResponsesRequest } from "./openai-responses-request-builder.js";
@@ -900,6 +900,15 @@ function requestUsesOpenAIHostedTool(optionsForRuntime) {
900
900
  }
901
901
  return resolveOpenAIWebSearchDescriptor(options.tools) !== undefined;
902
902
  }
903
+ /**
904
+ * Non-image files need Responses; Chat Completions only carries images. Only
905
+ * providers that serve Responses documents move there; the rest keep Chat
906
+ * Completions, which rejects the file before inference.
907
+ */
908
+ function requiresOpenAIResponses(options, documentsOnResponses) {
909
+ return requestUsesOpenAIHostedTool(options) ||
910
+ (documentsOnResponses && promptHasDocumentInput(options.prompt));
911
+ }
903
912
  function createOpenAIChatCompletionsOnlyRuntime(chatRuntime, hostedToolReason) {
904
913
  function assertHostedToolsSupported(options) {
905
914
  if (requestUsesOpenAIHostedTool(options)) {
@@ -919,19 +928,21 @@ function createOpenAIChatCompletionsOnlyRuntime(chatRuntime, hostedToolReason) {
919
928
  },
920
929
  };
921
930
  }
922
- function createOpenAIAdaptiveModelRuntime(chatRuntime, responsesRuntime) {
931
+ function createOpenAIAdaptiveModelRuntime(chatRuntime, responsesRuntime, documentsOnResponses) {
923
932
  return {
924
933
  ...chatRuntime,
925
934
  openAITransport: "auto",
926
- doGenerate(optionsForRuntime) {
927
- return requestUsesOpenAIHostedTool(optionsForRuntime)
935
+ openAIResponsesDocumentInput: documentsOnResponses,
936
+ // Async, so a request the selected runtime rejects up front still rejects.
937
+ async doGenerate(optionsForRuntime) {
938
+ return await (requiresOpenAIResponses(optionsForRuntime, documentsOnResponses)
928
939
  ? responsesRuntime.doGenerate(optionsForRuntime)
929
- : chatRuntime.doGenerate(optionsForRuntime);
940
+ : chatRuntime.doGenerate(optionsForRuntime));
930
941
  },
931
- doStream(optionsForRuntime) {
932
- return requestUsesOpenAIHostedTool(optionsForRuntime)
942
+ async doStream(optionsForRuntime) {
943
+ return await (requiresOpenAIResponses(optionsForRuntime, documentsOnResponses)
933
944
  ? responsesRuntime.doStream(optionsForRuntime)
934
- : chatRuntime.doStream(optionsForRuntime);
945
+ : chatRuntime.doStream(optionsForRuntime));
935
946
  },
936
947
  };
937
948
  }
@@ -1007,7 +1018,7 @@ export class OpenAIProvider {
1007
1018
  if (transport === "chat-completions") {
1008
1019
  return createOpenAIChatCompletionsOnlyRuntime(chatRuntime, getOpenAIChatCompletionsOnlyReason(config));
1009
1020
  }
1010
- return createOpenAIAdaptiveModelRuntime(chatRuntime, responsesRuntime);
1021
+ return createOpenAIAdaptiveModelRuntime(chatRuntime, responsesRuntime, routesOpenAIDocumentInputToResponses(providerName, config.baseURL));
1011
1022
  }
1012
1023
  createEmbedding(modelId, config) {
1013
1024
  return createOpenAIEmbeddingRuntime({
@@ -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":"AAUA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAyBxF,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;AAyYF,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,CA8IxB"}
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":"AAeA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAyBxF,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;AAsgBF,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,CA8IxB"}
@@ -1,4 +1,4 @@
1
- import { jsonValuesEqual, stringifyToolArguments, stringifyToolResultValue, unwrapToolInputSchema, } from "../../../src/provider/shared/index.js";
1
+ import { fileInputBaseName, isImageFileInput, jsonValuesEqual, readInlineFileData, readRemoteFileUrl, stringifyToolArguments, stringifyToolResultValue, unsupportedFileInputError, unwrapToolInputSchema, } from "../../../src/provider/shared/index.js";
2
2
  import { rejectsOpenAISamplingParams, resolveOpenAIReasoningConfig, shouldRequestOpenAIReasoningSummary, } from "./openai-reasoning-models.js";
3
3
  import { defineOpenAIProviderOptions, readOpenAIProviderOptions, } from "./openai-provider-options.js";
4
4
  import { isBoundedOpenAIStreamString, MAX_OPENAI_STREAM_TOOL_NAME_BYTES, } from "./openai-stream-metadata.js";
@@ -259,6 +259,93 @@ function toOpenAIResponsesInput(prompt) {
259
259
  input,
260
260
  };
261
261
  }
262
+ const INLINE_FILE_EXTENSIONS = {
263
+ "application/json": "json",
264
+ "application/pdf": "pdf",
265
+ "text/csv": "csv",
266
+ "text/html": "html",
267
+ "text/markdown": "md",
268
+ "text/plain": "txt",
269
+ };
270
+ /**
271
+ * Inline document types Responses reads, besides `text/*` and `+json`/`+xml`
272
+ * types. From OpenAI's file input table, plus common aliases. Other types,
273
+ * such as archives, fail before inference.
274
+ */
275
+ const RESPONSES_DOCUMENT_TYPES = new Set([
276
+ "application/pdf",
277
+ "application/msword",
278
+ "application/rtf",
279
+ "application/vnd.ms-excel",
280
+ "application/vnd.ms-powerpoint",
281
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
282
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
283
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation",
284
+ "application/vnd.oasis.opendocument.text",
285
+ "application/vnd.apple.pages",
286
+ "application/vnd.apple.keynote",
287
+ "application/vnd.apple.iwork",
288
+ "application/vnd.google-apps.document",
289
+ "application/vnd.google-apps.spreadsheet",
290
+ "application/vnd.google-apps.presentation",
291
+ "application/csv",
292
+ "application/x-iif",
293
+ "application/json",
294
+ "application/json5",
295
+ "application/x-json5",
296
+ "application/x-ndjson",
297
+ "application/xml",
298
+ "application/yaml",
299
+ "application/x-yaml",
300
+ "application/toml",
301
+ "application/x-toml",
302
+ "application/graphql",
303
+ "application/x-graphql",
304
+ "application/javascript",
305
+ "application/x-javascript",
306
+ "application/typescript",
307
+ "application/x-python",
308
+ "application/x-sh",
309
+ "application/x-bash",
310
+ "application/x-awk",
311
+ "application/x-sql",
312
+ "application/x-scala",
313
+ "application/x-rust",
314
+ "application/x-powershell",
315
+ "application/x-patch",
316
+ "application/x-php",
317
+ "application/x-httpd-php",
318
+ "application/x-httpd-php-source",
319
+ "application/x-protobuf",
320
+ "application/x-terraform",
321
+ "application/x-subrip",
322
+ "message/rfc822",
323
+ ]);
324
+ function isResponsesDocumentType(mediaType) {
325
+ return mediaType.startsWith("text/") || /\+(json|xml)$/.test(mediaType) ||
326
+ RESPONSES_DOCUMENT_TYPES.has(mediaType);
327
+ }
328
+ /**
329
+ * Build an inline `input_file`. OpenAI infers the file type from the filename
330
+ * extension, so a filename without one needs a MIME type we can name.
331
+ */
332
+ function toOpenAIResponsesInlineFile(part, data) {
333
+ const mediaType = part.mediaType.toLowerCase();
334
+ if (!isResponsesDocumentType(mediaType)) {
335
+ throw unsupportedFileInputError("OpenAI Responses", part, "Send a document such as PDF, text, code, a spreadsheet, or an office document.");
336
+ }
337
+ const extension = INLINE_FILE_EXTENSIONS[mediaType];
338
+ const name = fileInputBaseName(part.filename) ?? "file";
339
+ const hasExtension = /.\.[^.]+$/.test(name);
340
+ if (!hasExtension && !extension) {
341
+ throw unsupportedFileInputError("OpenAI Responses", part, "Set a filename with an extension, for example with fileFromBytes.");
342
+ }
343
+ return {
344
+ type: "input_file",
345
+ file_data: `data:${mediaType};base64,${data}`,
346
+ filename: hasExtension ? name : `${name}.${extension}`,
347
+ };
348
+ }
262
349
  function toOpenAIResponsesUserContent(parts) {
263
350
  const content = [];
264
351
  for (const part of parts) {
@@ -268,15 +355,27 @@ function toOpenAIResponsesUserContent(parts) {
268
355
  }
269
356
  continue;
270
357
  }
271
- if (part.type === "image" || part.mediaType.startsWith("image/")) {
272
- content.push({ type: "input_image", image_url: part.url, detail: "auto" });
358
+ if (isImageFileInput(part)) {
359
+ // Inline data is validated; any other image URL must be remote.
360
+ const imageUrl = readInlineFileData(part) === undefined
361
+ ? readRemoteFileUrl("OpenAI Responses", part)
362
+ : part.url;
363
+ content.push({ type: "input_image", image_url: imageUrl, detail: "auto" });
273
364
  continue;
274
365
  }
275
- content.push({
276
- type: "input_file",
277
- file_url: part.url,
278
- ...(part.filename ? { filename: part.filename } : {}),
279
- });
366
+ // Responses file inputs are documents; audio and video use other input shapes.
367
+ if (/^(audio|video)\//i.test(part.mediaType)) {
368
+ throw unsupportedFileInputError("OpenAI Responses", part, "Send a document such as PDF, text, or a spreadsheet.");
369
+ }
370
+ const data = readInlineFileData(part);
371
+ const filename = fileInputBaseName(part.filename);
372
+ content.push(data === undefined
373
+ ? {
374
+ type: "input_file",
375
+ file_url: readRemoteFileUrl("OpenAI Responses", part),
376
+ ...(filename ? { filename } : {}),
377
+ }
378
+ : toOpenAIResponsesInlineFile(part, data));
280
379
  }
281
380
  return content;
282
381
  }
@@ -1 +1 @@
1
- {"version":3,"file":"final-request-budget.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/final-request-budget.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,4BAA4B,EAE7B,MAAM,6CAA6C,CAAC;AA4BrD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAa5D;AAqCD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAEhD;;;;;;;GAOG;AACH,eAAO,MAAM,oCAAoC,OAAO,CAAC;AAEzD,2DAA2D;AAC3D,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF,4DAA4D;AAC5D,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC1C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wFAAwF;IACxF,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,MAAM,4BAA4B,GAAG;IACzC,0EAA0E;IAC1E,cAAc,EAAE,OAAO,CAAC;IACxB,gFAAgF;IAChF,eAAe,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,6FAA6F;AAC7F,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,uBAAuB,GAC7B;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAsBlE;AAED,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC;AAa5E;;;;;;;;GAQG;AACH,MAAM,MAAM,0BAA0B,GAAG,uBAAuB,GAAG;IACjE,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAgGF,+FAA+F;AAC/F,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,0BAA0B,GAChC,4BAA4B,CAE9B;AAED,0EAA0E;AAC1E,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,0BAA0B,GAChC;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAOlE;AAED,uFAAuF;AACvF,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,uBAAuB,GAC7B,4BAA4B,CA8E9B;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,EAClF,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EACpC,OAAO,EAAE,MAAM,OAAO,GACrB,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAgB7B"}
1
+ {"version":3,"file":"final-request-budget.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/final-request-budget.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,4BAA4B,EAE7B,MAAM,6CAA6C,CAAC;AA4BrD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAa5D;AAqCD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAEhD;;;;;;;GAOG;AACH,eAAO,MAAM,oCAAoC,OAAO,CAAC;AAEzD,2DAA2D;AAC3D,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF,4DAA4D;AAC5D,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC1C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wFAAwF;IACxF,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,MAAM,4BAA4B,GAAG;IACzC,0EAA0E;IAC1E,cAAc,EAAE,OAAO,CAAC;IACxB,gFAAgF;IAChF,eAAe,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,6FAA6F;AAC7F,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,uBAAuB,GAC7B;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAsBlE;AAED,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC;AAa5E;;;;;;;;GAQG;AACH,MAAM,MAAM,0BAA0B,GAAG,uBAAuB,GAAG;IACjE,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAkGF,+FAA+F;AAC/F,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,0BAA0B,GAChC,4BAA4B,CAE9B;AAED,0EAA0E;AAC1E,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,0BAA0B,GAChC;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAOlE;AAED,uFAAuF;AACvF,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,uBAAuB,GAC7B,4BAA4B,CA8E9B;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,EAClF,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EACpC,OAAO,EAAE,MAAM,OAAO,GACrB,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAgB7B"}
@@ -155,6 +155,8 @@ function resolveEffectiveBudget(input) {
155
155
  ...(providerOptions === undefined ? {} : { providerOptions }),
156
156
  ...(budget.responseFormat === undefined ? {} : { responseFormat: budget.responseFormat }),
157
157
  tools: toolDescriptors(budget.tools),
158
+ // A document can move an adaptive OpenAI request to Responses.
159
+ prompt: budget.messages,
158
160
  });
159
161
  const low = probe(1);
160
162
  const high = probe(2);
@@ -0,0 +1,8 @@
1
+ import { type ChatUiMessage } from "./types.js";
2
+ /** Check whether the model supports the file media type. */
3
+ export declare function isModelSupportedFileMediaType(mediaType: string): boolean;
4
+ /** Normalizes message file part media types. */
5
+ export declare function normalizeMessageFilePartMediaTypes(messages: ChatUiMessage[]): ChatUiMessage[];
6
+ /** Rewrite unsupported file parts as annotations. */
7
+ export declare function rewriteUnsupportedFilePartsAsAnnotations(messages: ChatUiMessage[]): ChatUiMessage[];
8
+ //# sourceMappingURL=message-file-parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-file-parts.d.ts","sourceRoot":"","sources":["../../../src/src/chat/message-file-parts.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAInB,MAAM,YAAY,CAAC;AAEpB,4DAA4D;AAC5D,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAGxE;AA2BD,gDAAgD;AAChD,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAY7F;AAmBD,qDAAqD;AACrD,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,aAAa,EAAE,GACxB,aAAa,EAAE,CA4CjB"}
@@ -0,0 +1,88 @@
1
+ import { buildDataFileAnnotation, normalizeInlineAttachmentMediaType, } from "./types.js";
2
+ /** Check whether the model supports the file media type. */
3
+ export function isModelSupportedFileMediaType(mediaType) {
4
+ const type = mediaType.toLowerCase();
5
+ return type.startsWith("image/") || type === "application/pdf" || type === "text/plain";
6
+ }
7
+ function isInlineDataFilePart(part) {
8
+ return /^data:/i.test(part.url ?? "");
9
+ }
10
+ const INLINE_BASE64_PREFIX = /^data:[^,]*;base64,/i;
11
+ /**
12
+ * Normalize a file part's MIME type. An inline base64 data URL is rewritten to
13
+ * the same type, so the provider sees matching data; other inline data keeps
14
+ * the MIME type its data URL names.
15
+ */
16
+ function normalizeFilePart(part) {
17
+ const inline = isInlineDataFilePart(part);
18
+ if (inline && !INLINE_BASE64_PREFIX.test(part.url))
19
+ return part;
20
+ const mediaType = normalizeInlineAttachmentMediaType(part.filename, part.mediaType);
21
+ if (mediaType === part.mediaType)
22
+ return part;
23
+ return {
24
+ ...part,
25
+ mediaType,
26
+ ...(inline ? { url: part.url.replace(INLINE_BASE64_PREFIX, `data:${mediaType};base64,`) } : {}),
27
+ };
28
+ }
29
+ /** Normalizes message file part media types. */
30
+ export function normalizeMessageFilePartMediaTypes(messages) {
31
+ return messages.map((message) => {
32
+ if (!message.parts.some((part) => part.type === "file")) {
33
+ return message;
34
+ }
35
+ const parts = message.parts.map((part) => part.type === "file" ? normalizeFilePart(part) : part);
36
+ return { ...message, parts };
37
+ });
38
+ }
39
+ function appendDataFileAnnotation(kept, dataFiles) {
40
+ const annotation = buildDataFileAnnotation(dataFiles);
41
+ const lastTextIndex = kept.findLastIndex((part) => part.type === "text");
42
+ if (lastTextIndex >= 0) {
43
+ const textPart = kept[lastTextIndex];
44
+ if (textPart?.type === "text") {
45
+ kept[lastTextIndex] = { type: "text", text: textPart.text + annotation };
46
+ }
47
+ }
48
+ else {
49
+ kept.push({ type: "text", text: annotation.trimStart() });
50
+ }
51
+ }
52
+ /** Rewrite unsupported file parts as annotations. */
53
+ export function rewriteUnsupportedFilePartsAsAnnotations(messages) {
54
+ return messages.map((message) => {
55
+ if (message.parts.length === 0) {
56
+ return message;
57
+ }
58
+ const kept = [];
59
+ const dataFiles = [];
60
+ for (const part of message.parts) {
61
+ if (part.type !== "file") {
62
+ kept.push(part);
63
+ continue;
64
+ }
65
+ const normalized = normalizeFilePart(part);
66
+ // Inline data has no upload a tool could read, so the provider sends or
67
+ // rejects it. Runtimes send files only from user messages.
68
+ if (isModelSupportedFileMediaType(normalized.mediaType) ||
69
+ (message.role === "user" && isInlineDataFilePart(part))) {
70
+ kept.push(normalized);
71
+ continue;
72
+ }
73
+ dataFiles.push({
74
+ name: part.filename || "file",
75
+ mediaType: normalized.mediaType,
76
+ // A data URL would put the file's base64 into prompt text.
77
+ ...(part.url && !isInlineDataFilePart(part) ? { url: part.url } : {}),
78
+ ...(part.uploadId ? { uploadId: part.uploadId } : {}),
79
+ ...(part.uploadPath ? { path: part.uploadPath } : {}),
80
+ });
81
+ }
82
+ if (dataFiles.length === 0) {
83
+ return message;
84
+ }
85
+ appendDataFileAnnotation(kept, dataFiles);
86
+ return { ...message, parts: kept };
87
+ });
88
+ }
@@ -4,18 +4,13 @@ import { type ChatUiMessage, type ProviderModelMessage } from "./types.js";
4
4
  import type { HistoricalToolInputRetentionOptions, PrepareProviderModelMessagesFromUiMessagesOptions } from "./message-prep-types.js";
5
5
  export { DEFAULT_MESSAGE_PREP_LIMITS } from "./message-prep-types.js";
6
6
  export { repairToolPairs } from "./provider-message-tool-pair-repair.js";
7
+ export { isModelSupportedFileMediaType, normalizeMessageFilePartMediaTypes, rewriteUnsupportedFilePartsAsAnnotations, } from "./message-file-parts.js";
7
8
  export type { HistoricalToolInputCompactionDiagnostic, HistoricalToolInputRetainedField, HistoricalToolInputRetentionOptions, HistoricalToolInputRetentionPolicy, HistoricalToolInputRetentionPolicyResolver, MessagePrepLimits, MessageTokenBreakdown, PrepareProviderModelMessagesFromUiMessagesOptions, } from "./message-prep-types.js";
8
9
  export { estimateMessageTokenBreakdown } from "./message-token-breakdown.js";
9
10
  /** Compress turn. */
10
11
  export declare function compressTurn(messages: ProviderModelMessage[], startIdx: number, endIdx: number): ProviderModelMessage[];
11
12
  /** Enforce token budget with turn compression. */
12
13
  export declare function enforceTokenBudgetWithTurnCompression(messages: ProviderModelMessage[], budget: number, overhead: number, preserveSourceMessageIds?: readonly string[]): ProviderModelMessage[];
13
- /** Check whether the model supports the file media type. */
14
- export declare function isModelSupportedFileMediaType(mediaType: string): boolean;
15
- /** Normalizes message file part media types. */
16
- export declare function normalizeMessageFilePartMediaTypes(messages: ChatUiMessage[]): ChatUiMessage[];
17
- /** Rewrite unsupported file parts as annotations. */
18
- export declare function rewriteUnsupportedFilePartsAsAnnotations(messages: ChatUiMessage[]): ChatUiMessage[];
19
14
  /** Strip pending tool parts. */
20
15
  export declare function stripPendingToolParts(messages: ChatUiMessage[], trustedToolReplayMessageIds?: readonly string[]): ChatUiMessage[];
21
16
  /** Sanitize provider model messages. */
@@ -1 +1 @@
1
- {"version":3,"file":"message-prep.d.ts","sourceRoot":"","sources":["../../../src/src/chat/message-prep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-prep.d.ts","sourceRoot":"","sources":["../../../src/src/chat/message-prep.ts"],"names":[],"mappings":"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"}