ai-world-sdk 1.5.11 → 1.5.13

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 (156) hide show
  1. package/dist/cli/commands/config-cmd.js +1 -1
  2. package/dist/cli/config.js +3 -2
  3. package/dist/config.d.ts +3 -3
  4. package/dist/config.js +11 -5
  5. package/dist/llm.js +3 -3
  6. package/dist/vite-plugin.js +3 -1
  7. package/package.json +3 -2
  8. package/skills/ai-world-sdk/SKILL.md +1 -0
  9. package/skills/ai-world-sdk/docs/cli-usage.md +7 -4
  10. package/pacakges/ai-sdk-provider/.changeset/README.md +0 -34
  11. package/pacakges/ai-sdk-provider/.changeset/config.json +0 -13
  12. package/pacakges/ai-sdk-provider/.github/PULL_REQUEST_TEMPLATE.md +0 -16
  13. package/pacakges/ai-sdk-provider/.github/workflows/ci.yaml +0 -24
  14. package/pacakges/ai-sdk-provider/.github/workflows/publish-manual.yaml +0 -36
  15. package/pacakges/ai-sdk-provider/.github/workflows/publish.yaml +0 -107
  16. package/pacakges/ai-sdk-provider/.vscode/settings.json +0 -32
  17. package/pacakges/ai-sdk-provider/CHANGELOG.md +0 -631
  18. package/pacakges/ai-sdk-provider/CLAUDE.md +0 -79
  19. package/pacakges/ai-sdk-provider/CONTRIBUTING.md +0 -241
  20. package/pacakges/ai-sdk-provider/LICENSE +0 -201
  21. package/pacakges/ai-sdk-provider/README.md +0 -426
  22. package/pacakges/ai-sdk-provider/biome.json +0 -122
  23. package/pacakges/ai-sdk-provider/e2e/cache-control.test.ts +0 -74
  24. package/pacakges/ai-sdk-provider/e2e/embeddings/index.test.ts +0 -128
  25. package/pacakges/ai-sdk-provider/e2e/fixtures/pdfs/generate-pdfs.sh +0 -181
  26. package/pacakges/ai-sdk-provider/e2e/fixtures/pdfs/large.json +0 -7
  27. package/pacakges/ai-sdk-provider/e2e/fixtures/pdfs/large.pdf +41 -12894
  28. package/pacakges/ai-sdk-provider/e2e/gemini/reasoning-multiturn.test.ts +0 -221
  29. package/pacakges/ai-sdk-provider/e2e/issues/issue-160-toolcallid-uniqueness.test.ts +0 -88
  30. package/pacakges/ai-sdk-provider/e2e/issues/issue-166-finish-reason-null.test.ts +0 -129
  31. package/pacakges/ai-sdk-provider/e2e/issues/issue-171-cache-tool-key-ordering.test.ts +0 -70
  32. package/pacakges/ai-sdk-provider/e2e/issues/issue-181-tool-response-image.test.ts +0 -199
  33. package/pacakges/ai-sdk-provider/e2e/issues/issue-190-streamobject-flush-error.test.ts +0 -114
  34. package/pacakges/ai-sdk-provider/e2e/issues/issue-194-grok-invalid-json.test.ts +0 -93
  35. package/pacakges/ai-sdk-provider/e2e/issues/issue-196-anthropic-1h-cache-ttl.test.ts +0 -85
  36. package/pacakges/ai-sdk-provider/e2e/issues/issue-199-openai-pdf-processing.test.ts +0 -102
  37. package/pacakges/ai-sdk-provider/e2e/issues/issue-212-anthropic-web-search-online.test.ts +0 -128
  38. package/pacakges/ai-sdk-provider/e2e/issues/issue-234-prompt-caching.test.ts +0 -201
  39. package/pacakges/ai-sdk-provider/e2e/issues/issue-237-reasoning-linebreaks.test.ts +0 -103
  40. package/pacakges/ai-sdk-provider/e2e/issues/issue-248-gemini-web-search-empty-response.test.ts +0 -210
  41. package/pacakges/ai-sdk-provider/e2e/issues/issue-269-image-size-parameter.test.ts +0 -208
  42. package/pacakges/ai-sdk-provider/e2e/issues/issue-287-tool-calls-missing-arguments.test.ts +0 -87
  43. package/pacakges/ai-sdk-provider/e2e/issues/issue-341-cache-control-last-text-part.test.ts +0 -138
  44. package/pacakges/ai-sdk-provider/e2e/issues/issue-383-video-url-support.test.ts +0 -120
  45. package/pacakges/ai-sdk-provider/e2e/issues/issue-386-image-files-parameter.test.ts +0 -109
  46. package/pacakges/ai-sdk-provider/e2e/issues/issue-387-temperature-settings.test.ts +0 -113
  47. package/pacakges/ai-sdk-provider/e2e/issues/issue-389-system-cache-control.test.ts +0 -107
  48. package/pacakges/ai-sdk-provider/e2e/issues/issue-391-reasoning-effort-values.test.ts +0 -121
  49. package/pacakges/ai-sdk-provider/e2e/issues/issue-392-auto-router-plugin.test.ts +0 -84
  50. package/pacakges/ai-sdk-provider/e2e/issues/issue-394-reasoning-end-signature.test.ts +0 -157
  51. package/pacakges/ai-sdk-provider/e2e/issues/issue-407-token-usage-details.test.ts +0 -141
  52. package/pacakges/ai-sdk-provider/e2e/issues/issue-411-output-object-tools-conflict.test.ts +0 -75
  53. package/pacakges/ai-sdk-provider/e2e/issues/issue-412-mid-stream-termination.test.ts +0 -217
  54. package/pacakges/ai-sdk-provider/e2e/issues/issue-413-reasoning-metadata-bloat.test.ts +0 -292
  55. package/pacakges/ai-sdk-provider/e2e/issues/issue-413-tool-input-end-streaming.test.ts +0 -167
  56. package/pacakges/ai-sdk-provider/e2e/issues/issue-418-gemini-thought-signature.test.ts +0 -171
  57. package/pacakges/ai-sdk-provider/e2e/issues/issue-419-420-finish-reason-usage-fallback.test.ts +0 -87
  58. package/pacakges/ai-sdk-provider/e2e/issues/issue-419-usage-fallback.test.ts +0 -106
  59. package/pacakges/ai-sdk-provider/e2e/issues/issue-422-incomplete-error-information.test.ts +0 -46
  60. package/pacakges/ai-sdk-provider/e2e/issues/issue-423-signature-stripped.test.ts +0 -165
  61. package/pacakges/ai-sdk-provider/e2e/issues/issue-423-streaming-signature-loss.test.ts +0 -161
  62. package/pacakges/ai-sdk-provider/e2e/issues/issue-423-uimessage-roundtrip.test.ts +0 -111
  63. package/pacakges/ai-sdk-provider/e2e/issues/issue-424-anthropic-auto-cache.test.ts +0 -66
  64. package/pacakges/ai-sdk-provider/e2e/issues/issue-432-raw-response-body.test.ts +0 -52
  65. package/pacakges/ai-sdk-provider/e2e/issues/issue-438-gemini-reasoning-redacted.test.ts +0 -120
  66. package/pacakges/ai-sdk-provider/e2e/issues/issue-439-exact-payload.test.ts +0 -108
  67. package/pacakges/ai-sdk-provider/e2e/issues/issue-443-eager-input-streaming.test.ts +0 -204
  68. package/pacakges/ai-sdk-provider/e2e/issues/issue-453-signature-reopen.test.ts +0 -203
  69. package/pacakges/ai-sdk-provider/e2e/issues/issue-474-web-search-server-tool.test.ts +0 -102
  70. package/pacakges/ai-sdk-provider/e2e/issues/issue-483-response-format-strict-option.test.ts +0 -199
  71. package/pacakges/ai-sdk-provider/e2e/issues/issue-484-image-url-query-params.test.ts +0 -165
  72. package/pacakges/ai-sdk-provider/e2e/issues/issue-63-web-search-annotations.test.ts +0 -159
  73. package/pacakges/ai-sdk-provider/e2e/parallel-tool-calls.test.ts +0 -425
  74. package/pacakges/ai-sdk-provider/e2e/pdf-blob/index.test.ts +0 -139
  75. package/pacakges/ai-sdk-provider/e2e/pdf-url/index.test.ts +0 -60
  76. package/pacakges/ai-sdk-provider/e2e/reasoning-effort.test.ts +0 -139
  77. package/pacakges/ai-sdk-provider/e2e/reasoning-multiturn/index.test.ts +0 -69
  78. package/pacakges/ai-sdk-provider/e2e/tools-with-reasoning.test.ts +0 -76
  79. package/pacakges/ai-sdk-provider/e2e/tools.ts +0 -61
  80. package/pacakges/ai-sdk-provider/e2e/usage-accounting.test.ts +0 -55
  81. package/pacakges/ai-sdk-provider/e2e/utils.ts +0 -15
  82. package/pacakges/ai-sdk-provider/e2e/video-generation.test.ts +0 -43
  83. package/pacakges/ai-sdk-provider/e2e/web-search/index.test.ts +0 -50
  84. package/pacakges/ai-sdk-provider/example.env.e2e +0 -3
  85. package/pacakges/ai-sdk-provider/pnpm-lock.yaml +0 -3075
  86. package/pacakges/ai-sdk-provider/pnpm-workspace.yaml +0 -6
  87. package/pacakges/ai-sdk-provider/src/chat/convert-to-openrouter-chat-messages.test.ts +0 -3079
  88. package/pacakges/ai-sdk-provider/src/chat/convert-to-openrouter-chat-messages.ts +0 -618
  89. package/pacakges/ai-sdk-provider/src/chat/errors.test.ts +0 -97
  90. package/pacakges/ai-sdk-provider/src/chat/file-parser-schema.test.ts +0 -112
  91. package/pacakges/ai-sdk-provider/src/chat/file-url-utils.ts +0 -167
  92. package/pacakges/ai-sdk-provider/src/chat/get-tool-choice.ts +0 -42
  93. package/pacakges/ai-sdk-provider/src/chat/index.test.ts +0 -6093
  94. package/pacakges/ai-sdk-provider/src/chat/index.ts +0 -1300
  95. package/pacakges/ai-sdk-provider/src/chat/is-url.ts +0 -15
  96. package/pacakges/ai-sdk-provider/src/chat/large-pdf-response.test.ts +0 -108
  97. package/pacakges/ai-sdk-provider/src/chat/payload-comparison.test.ts +0 -154
  98. package/pacakges/ai-sdk-provider/src/chat/schemas.ts +0 -288
  99. package/pacakges/ai-sdk-provider/src/chat/signature-roundtrip.test.ts +0 -777
  100. package/pacakges/ai-sdk-provider/src/completion/convert-to-openrouter-completion-prompt.ts +0 -150
  101. package/pacakges/ai-sdk-provider/src/completion/index.test.ts +0 -958
  102. package/pacakges/ai-sdk-provider/src/completion/index.ts +0 -441
  103. package/pacakges/ai-sdk-provider/src/completion/schemas.ts +0 -67
  104. package/pacakges/ai-sdk-provider/src/embedding/index.test.ts +0 -262
  105. package/pacakges/ai-sdk-provider/src/embedding/index.ts +0 -113
  106. package/pacakges/ai-sdk-provider/src/embedding/schemas.ts +0 -26
  107. package/pacakges/ai-sdk-provider/src/facade.ts +0 -131
  108. package/pacakges/ai-sdk-provider/src/image/index.test.ts +0 -769
  109. package/pacakges/ai-sdk-provider/src/image/index.ts +0 -206
  110. package/pacakges/ai-sdk-provider/src/image/schemas.ts +0 -48
  111. package/pacakges/ai-sdk-provider/src/index.ts +0 -3
  112. package/pacakges/ai-sdk-provider/src/internal/index.ts +0 -10
  113. package/pacakges/ai-sdk-provider/src/provider.ts +0 -327
  114. package/pacakges/ai-sdk-provider/src/schemas/error-response.test.ts +0 -171
  115. package/pacakges/ai-sdk-provider/src/schemas/error-response.ts +0 -105
  116. package/pacakges/ai-sdk-provider/src/schemas/format.ts +0 -12
  117. package/pacakges/ai-sdk-provider/src/schemas/image.ts +0 -23
  118. package/pacakges/ai-sdk-provider/src/schemas/provider-metadata.ts +0 -91
  119. package/pacakges/ai-sdk-provider/src/schemas/reasoning-details.ts +0 -92
  120. package/pacakges/ai-sdk-provider/src/tests/provider-options.test.ts +0 -234
  121. package/pacakges/ai-sdk-provider/src/tests/stream-usage-accounting.test.ts +0 -409
  122. package/pacakges/ai-sdk-provider/src/tests/usage-accounting.test.ts +0 -555
  123. package/pacakges/ai-sdk-provider/src/tests/web-search-tool.test.ts +0 -319
  124. package/pacakges/ai-sdk-provider/src/tool/web-search.ts +0 -52
  125. package/pacakges/ai-sdk-provider/src/types/index.ts +0 -114
  126. package/pacakges/ai-sdk-provider/src/types/openrouter-api-types.ts +0 -83
  127. package/pacakges/ai-sdk-provider/src/types/openrouter-chat-completions-input.ts +0 -116
  128. package/pacakges/ai-sdk-provider/src/types/openrouter-chat-settings.ts +0 -233
  129. package/pacakges/ai-sdk-provider/src/types/openrouter-completion-settings.ts +0 -39
  130. package/pacakges/ai-sdk-provider/src/types/openrouter-embedding-settings.ts +0 -56
  131. package/pacakges/ai-sdk-provider/src/types/openrouter-image-settings.ts +0 -49
  132. package/pacakges/ai-sdk-provider/src/types/openrouter-video-settings.ts +0 -26
  133. package/pacakges/ai-sdk-provider/src/utils/compute-token-usage.test.ts +0 -186
  134. package/pacakges/ai-sdk-provider/src/utils/compute-token-usage.ts +0 -55
  135. package/pacakges/ai-sdk-provider/src/utils/deterministic-stringify.test.ts +0 -87
  136. package/pacakges/ai-sdk-provider/src/utils/deterministic-stringify.ts +0 -35
  137. package/pacakges/ai-sdk-provider/src/utils/map-finish-reason.ts +0 -43
  138. package/pacakges/ai-sdk-provider/src/utils/reasoning-details-duplicate-tracker.test.ts +0 -324
  139. package/pacakges/ai-sdk-provider/src/utils/reasoning-details-duplicate-tracker.ts +0 -70
  140. package/pacakges/ai-sdk-provider/src/utils/remove-undefined.ts +0 -12
  141. package/pacakges/ai-sdk-provider/src/utils/type-guards.ts +0 -6
  142. package/pacakges/ai-sdk-provider/src/utils/with-stream-error-handling.test.ts +0 -119
  143. package/pacakges/ai-sdk-provider/src/utils/with-stream-error-handling.ts +0 -25
  144. package/pacakges/ai-sdk-provider/src/utils/with-user-agent-suffix.test.ts +0 -133
  145. package/pacakges/ai-sdk-provider/src/utils/with-user-agent-suffix.ts +0 -78
  146. package/pacakges/ai-sdk-provider/src/version.ts +0 -4
  147. package/pacakges/ai-sdk-provider/src/video/index.test.ts +0 -515
  148. package/pacakges/ai-sdk-provider/src/video/index.ts +0 -275
  149. package/pacakges/ai-sdk-provider/src/video/schemas.ts +0 -36
  150. package/pacakges/ai-sdk-provider/tsconfig.json +0 -42
  151. package/pacakges/ai-sdk-provider/tsup.config.ts +0 -28
  152. package/pacakges/ai-sdk-provider/turbo.json +0 -8
  153. package/pacakges/ai-sdk-provider/vitest.e2e.config.ts +0 -21
  154. package/pacakges/ai-sdk-provider/vitest.edge.config.ts +0 -16
  155. package/pacakges/ai-sdk-provider/vitest.issues.config.ts +0 -28
  156. package/pacakges/ai-sdk-provider/vitest.node.config.ts +0 -16
@@ -1,233 +0,0 @@
1
- import type { OpenRouterSharedSettings } from '..';
2
- import type {
3
- DataCollection,
4
- Engine,
5
- IdAutoRouter,
6
- IdFileParser,
7
- IdModeration,
8
- IdResponseHealing,
9
- IdWeb,
10
- PdfEngine,
11
- ProviderSort,
12
- Quantization,
13
- } from './openrouter-api-types';
14
-
15
- // https://openrouter.ai/api/v1/models
16
- export type OpenRouterChatModelId = string;
17
-
18
- export type OpenRouterChatSettings = {
19
- /**
20
- Modify the likelihood of specified tokens appearing in the completion.
21
-
22
- Accepts a JSON object that maps tokens (specified by their token ID in
23
- the GPT tokenizer) to an associated bias value from -100 to 100. You
24
- can use this tokenizer tool to convert text to token IDs. Mathematically,
25
- the bias is added to the logits generated by the model prior to sampling.
26
- The exact effect will vary per model, but values between -1 and 1 should
27
- decrease or increase likelihood of selection; values like -100 or 100
28
- should result in a ban or exclusive selection of the relevant token.
29
-
30
- As an example, you can pass {"50256": -100} to prevent the <|endoftext|>
31
- token from being generated.
32
- */
33
- logitBias?: Record<number, number>;
34
-
35
- /**
36
- Return the log probabilities of the tokens. Including logprobs will increase
37
- the response size and can slow down response times. However, it can
38
- be useful to understand better how the model is behaving.
39
-
40
- Setting to true will return the log probabilities of the tokens that
41
- were generated.
42
-
43
- Setting to a number will return the log probabilities of the top n
44
- tokens that were generated.
45
- */
46
- logprobs?: boolean | number;
47
-
48
- /**
49
- Whether to enable parallel function calling during tool use. Default to true.
50
- */
51
- parallelToolCalls?: boolean;
52
-
53
- /**
54
- A unique identifier representing your end-user, which can help OpenRouter to
55
- monitor and detect abuse. Learn more.
56
- */
57
- user?: string;
58
-
59
- /**
60
- * Plugin configurations for enabling various capabilities
61
- */
62
- plugins?: Array<
63
- | {
64
- id: IdWeb;
65
- max_results?: number;
66
- search_prompt?: string;
67
- engine?: Engine;
68
- }
69
- | {
70
- id: IdFileParser;
71
- max_files?: number;
72
- pdf?: {
73
- engine?: PdfEngine;
74
- };
75
- }
76
- | {
77
- id: IdModeration;
78
- }
79
- | {
80
- /**
81
- * Response healing plugin - automatically validates and repairs malformed JSON responses.
82
- *
83
- * **Important:** This plugin only works with non-streaming requests (e.g., `generateObject`).
84
- * It has no effect when used with streaming methods like `streamObject` or `streamText`.
85
- * The plugin activates when using `response_format` with `json_schema` or `json_object`.
86
- *
87
- * @see https://openrouter.ai/docs/guides/features/plugins/response-healing
88
- */
89
- id: IdResponseHealing;
90
- }
91
- | {
92
- /**
93
- * Auto-router plugin - configures allowed models when using `openrouter/auto`.
94
- *
95
- * Use wildcard patterns to restrict which models the auto router can select from.
96
- * When no `allowed_models` are specified, the auto router uses all supported models.
97
- *
98
- * @see https://openrouter.ai/docs/guides/routing/routers/auto-router
99
- */
100
- id: IdAutoRouter;
101
- allowed_models?: string[];
102
- }
103
- >;
104
-
105
- /**
106
- * Built-in web search options for models that support native web search
107
- */
108
- web_search_options?: {
109
- /**
110
- * Maximum number of search results to include
111
- */
112
- max_results?: number;
113
- /**
114
- * Custom search prompt to guide the search query
115
- */
116
- search_prompt?: string;
117
- /**
118
- * Search engine to use for web search
119
- * - "native": Use provider's built-in web search
120
- * - "exa": Use Exa's search API
121
- * - undefined: Native if supported, otherwise Exa
122
- * @see https://openrouter.ai/docs/features/web-search
123
- */
124
- engine?: Engine;
125
- };
126
-
127
- /**
128
- * Enable Anthropic automatic prompt caching by setting a top-level cache_control
129
- * directive on the request body. When set to `{ type: 'ephemeral' }`, Anthropic
130
- * will automatically cache eligible content in your prompts.
131
- *
132
- * Only works with Anthropic models through OpenRouter.
133
- *
134
- * @see https://platform.claude.com/docs/en/build-with-claude/prompt-caching#automatic-caching
135
- * @see https://openrouter.ai/docs
136
- */
137
- cache_control?: {
138
- type: 'ephemeral';
139
- /**
140
- * Optional time-to-live for the cache entry.
141
- * - `'5m'` — 5 minutes (default when omitted)
142
- * - `'1h'` — 1 hour
143
- */
144
- ttl?: '5m' | '1h';
145
- };
146
-
147
- /**
148
- * Debug options for troubleshooting API requests.
149
- * Only works with streaming requests.
150
- * @see https://openrouter.ai/docs/api-reference/debugging
151
- */
152
- debug?: {
153
- /**
154
- * When true, echoes back the request body that was sent to the upstream provider.
155
- * The debug data will be returned as the first chunk in the stream with a `debug.echo_upstream_body` field.
156
- * Sensitive data like user IDs and base64 content will be redacted.
157
- */
158
- echo_upstream_body?: boolean;
159
- };
160
-
161
- /**
162
- * Structured-output options forwarded to OpenRouter's
163
- * `response_format.json_schema` payload.
164
- *
165
- * Use this to opt out of strict mode for models whose providers don't
166
- * advertise support for it (e.g. open-source models routed through
167
- * non-OpenAI-compatible providers). When `strict` is left unset, the
168
- * SDK defaults to `true` for backward compatibility.
169
- *
170
- * Only applies when a `responseFormat` with a `schema` is provided on
171
- * the call site. Has no effect for `json_object` or text responses.
172
- */
173
- structuredOutputs?: {
174
- /**
175
- * Whether to set `response_format.json_schema.strict` on the outbound
176
- * request. Defaults to `true` when omitted.
177
- */
178
- strict?: boolean;
179
- };
180
-
181
- /**
182
- * Provider routing preferences to control request routing behavior
183
- */
184
- provider?: {
185
- /**
186
- * List of provider slugs to try in order (e.g. ["anthropic", "openai"])
187
- */
188
- order?: string[];
189
- /**
190
- * Whether to allow backup providers when primary is unavailable (default: true)
191
- */
192
- allow_fallbacks?: boolean;
193
- /**
194
- * Only use providers that support all parameters in your request (default: false)
195
- */
196
- require_parameters?: boolean;
197
- /**
198
- * Control whether to use providers that may store data
199
- */
200
- data_collection?: DataCollection;
201
- /**
202
- * List of provider slugs to allow for this request
203
- */
204
- only?: string[];
205
- /**
206
- * List of provider slugs to skip for this request
207
- */
208
- ignore?: string[];
209
- /**
210
- * List of quantization levels to filter by (e.g. ["int4", "int8"])
211
- */
212
- quantizations?: Array<Quantization>;
213
- /**
214
- * Sort providers by price, throughput, or latency
215
- */
216
- sort?: ProviderSort;
217
- /**
218
- * Maximum pricing you want to pay for this request
219
- */
220
- max_price?: {
221
- prompt?: number | string;
222
- completion?: number | string;
223
- image?: number | string;
224
- audio?: number | string;
225
- request?: number | string;
226
- };
227
- /**
228
- * Whether to restrict routing to only ZDR (Zero Data Retention) endpoints.
229
- * When true, only endpoints that do not retain prompts will be used.
230
- */
231
- zdr?: boolean;
232
- };
233
- } & OpenRouterSharedSettings;
@@ -1,39 +0,0 @@
1
- import type { OpenRouterSharedSettings } from '.';
2
-
3
- export type OpenRouterCompletionModelId = string;
4
-
5
- export type OpenRouterCompletionSettings = {
6
- /**
7
- Modify the likelihood of specified tokens appearing in the completion.
8
-
9
- Accepts a JSON object that maps tokens (specified by their token ID in
10
- the GPT tokenizer) to an associated bias value from -100 to 100. You
11
- can use this tokenizer tool to convert text to token IDs. Mathematically,
12
- the bias is added to the logits generated by the model prior to sampling.
13
- The exact effect will vary per model, but values between -1 and 1 should
14
- decrease or increase likelihood of selection; values like -100 or 100
15
- should result in a ban or exclusive selection of the relevant token.
16
-
17
- As an example, you can pass {"50256": -100} to prevent the <|endoftext|>
18
- token from being generated.
19
- */
20
- logitBias?: Record<number, number>;
21
-
22
- /**
23
- Return the log probabilities of the tokens. Including logprobs will increase
24
- the response size and can slow down response times. However, it can
25
- be useful to better understand how the model is behaving.
26
-
27
- Setting to true will return the log probabilities of the tokens that
28
- were generated.
29
-
30
- Setting to a number will return the log probabilities of the top n
31
- tokens that were generated.
32
- */
33
- logprobs?: boolean | number;
34
-
35
- /**
36
- The suffix that comes after a completion of inserted text.
37
- */
38
- suffix?: string;
39
- } & OpenRouterSharedSettings;
@@ -1,56 +0,0 @@
1
- import type { OpenRouterSharedSettings } from '..';
2
-
3
- // https://openrouter.ai/api/v1/models
4
- export type OpenRouterEmbeddingModelId = string;
5
-
6
- export type OpenRouterEmbeddingSettings = {
7
- /**
8
- * A unique identifier representing your end-user, which can help OpenRouter to
9
- * monitor and detect abuse.
10
- */
11
- user?: string;
12
-
13
- /**
14
- * Provider routing preferences to control request routing behavior
15
- */
16
- provider?: {
17
- /**
18
- * List of provider slugs to try in order (e.g. ["openai", "voyageai"])
19
- */
20
- order?: string[];
21
- /**
22
- * Whether to allow backup providers when primary is unavailable (default: true)
23
- */
24
- allow_fallbacks?: boolean;
25
- /**
26
- * Only use providers that support all parameters in your request (default: false)
27
- */
28
- require_parameters?: boolean;
29
- /**
30
- * Control whether to use providers that may store data
31
- */
32
- data_collection?: 'allow' | 'deny';
33
- /**
34
- * List of provider slugs to allow for this request
35
- */
36
- only?: string[];
37
- /**
38
- * List of provider slugs to skip for this request
39
- */
40
- ignore?: string[];
41
- /**
42
- * Sort providers by price, throughput, or latency
43
- */
44
- sort?: 'price' | 'throughput' | 'latency';
45
- /**
46
- * Maximum pricing you want to pay for this request
47
- */
48
- max_price?: {
49
- prompt?: number | string;
50
- completion?: number | string;
51
- image?: number | string;
52
- audio?: number | string;
53
- request?: number | string;
54
- };
55
- };
56
- } & OpenRouterSharedSettings;
@@ -1,49 +0,0 @@
1
- import type { OpenRouterSharedSettings } from '..';
2
-
3
- // https://openrouter.ai/api/v1/models
4
- export type OpenRouterImageModelId = string;
5
-
6
- export type OpenRouterImageSettings = {
7
- /**
8
- * Provider routing preferences to control request routing behavior
9
- */
10
- provider?: {
11
- /**
12
- * List of provider slugs to try in order (e.g. ["google", "black-forest-labs"])
13
- */
14
- order?: string[];
15
- /**
16
- * Whether to allow backup providers when primary is unavailable (default: true)
17
- */
18
- allow_fallbacks?: boolean;
19
- /**
20
- * Only use providers that support all parameters in your request (default: false)
21
- */
22
- require_parameters?: boolean;
23
- /**
24
- * Control whether to use providers that may store data
25
- */
26
- data_collection?: 'allow' | 'deny';
27
- /**
28
- * List of provider slugs to allow for this request
29
- */
30
- only?: string[];
31
- /**
32
- * List of provider slugs to skip for this request
33
- */
34
- ignore?: string[];
35
- /**
36
- * Sort providers by price, throughput, or latency
37
- */
38
- sort?: 'price' | 'throughput' | 'latency';
39
- /**
40
- * Maximum pricing you want to pay for this request
41
- */
42
- max_price?: {
43
- prompt?: number | string;
44
- completion?: number | string;
45
- image?: number | string;
46
- request?: number | string;
47
- };
48
- };
49
- } & OpenRouterSharedSettings;
@@ -1,26 +0,0 @@
1
- export type OpenRouterVideoModelId = string;
2
-
3
- export type OpenRouterVideoSettings = {
4
- /**
5
- * Whether to generate audio alongside the video.
6
- * Defaults to the endpoint's generate_audio capability flag, false if not set.
7
- */
8
- generateAudio?: boolean;
9
-
10
- /**
11
- * Polling interval in milliseconds when waiting for video generation to complete.
12
- * @default 2000
13
- */
14
- pollIntervalMs?: number;
15
-
16
- /**
17
- * Maximum time in milliseconds to wait for video generation to complete.
18
- * @default 600000 (10 minutes)
19
- */
20
- maxPollTimeMs?: number;
21
-
22
- /**
23
- * Additional body parameters to send with the video generation request.
24
- */
25
- extraBody?: Record<string, unknown>;
26
- };
@@ -1,186 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { computeTokenUsage, emptyUsage } from './compute-token-usage';
3
-
4
- describe('computeTokenUsage', () => {
5
- it('should compute all fields from complete usage data', () => {
6
- const result = computeTokenUsage({
7
- prompt_tokens: 100,
8
- completion_tokens: 50,
9
- prompt_tokens_details: {
10
- cached_tokens: 20,
11
- cache_write_tokens: 30,
12
- },
13
- completion_tokens_details: {
14
- reasoning_tokens: 10,
15
- },
16
- });
17
-
18
- expect(result.inputTokens).toStrictEqual({
19
- total: 100,
20
- noCache: 80,
21
- cacheRead: 20,
22
- cacheWrite: 30,
23
- });
24
- expect(result.outputTokens).toStrictEqual({
25
- total: 50,
26
- text: 40,
27
- reasoning: 10,
28
- });
29
- expect(result.raw).toBeDefined();
30
- });
31
-
32
- it('should set noCache equal to total when no detail fields present', () => {
33
- const result = computeTokenUsage({
34
- prompt_tokens: 50,
35
- completion_tokens: 30,
36
- });
37
-
38
- expect(result.inputTokens).toStrictEqual({
39
- total: 50,
40
- noCache: 50,
41
- cacheRead: 0,
42
- cacheWrite: undefined,
43
- });
44
- expect(result.outputTokens).toStrictEqual({
45
- total: 30,
46
- text: 30,
47
- reasoning: 0,
48
- });
49
- });
50
-
51
- it('should handle null prompt_tokens_details', () => {
52
- const result = computeTokenUsage({
53
- prompt_tokens: 10,
54
- completion_tokens: 5,
55
- prompt_tokens_details: null,
56
- completion_tokens_details: null,
57
- });
58
-
59
- expect(result.inputTokens).toStrictEqual({
60
- total: 10,
61
- noCache: 10,
62
- cacheRead: 0,
63
- cacheWrite: undefined,
64
- });
65
- expect(result.outputTokens).toStrictEqual({
66
- total: 5,
67
- text: 5,
68
- reasoning: 0,
69
- });
70
- });
71
-
72
- it('should handle null cache_write_tokens vs undefined vs number', () => {
73
- const withNull = computeTokenUsage({
74
- prompt_tokens: 10,
75
- completion_tokens: 5,
76
- prompt_tokens_details: { cached_tokens: 0, cache_write_tokens: null },
77
- });
78
- expect(withNull.inputTokens.cacheWrite).toBeUndefined();
79
-
80
- const withUndefined = computeTokenUsage({
81
- prompt_tokens: 10,
82
- completion_tokens: 5,
83
- prompt_tokens_details: {
84
- cached_tokens: 0,
85
- cache_write_tokens: undefined,
86
- },
87
- });
88
- expect(withUndefined.inputTokens.cacheWrite).toBeUndefined();
89
-
90
- const withNumber = computeTokenUsage({
91
- prompt_tokens: 10,
92
- completion_tokens: 5,
93
- prompt_tokens_details: { cached_tokens: 0, cache_write_tokens: 42 },
94
- });
95
- expect(withNumber.inputTokens.cacheWrite).toBe(42);
96
- });
97
-
98
- it('should handle zero token counts', () => {
99
- const result = computeTokenUsage({
100
- prompt_tokens: 0,
101
- completion_tokens: 0,
102
- prompt_tokens_details: { cached_tokens: 0 },
103
- completion_tokens_details: { reasoning_tokens: 0 },
104
- });
105
-
106
- expect(result.inputTokens).toStrictEqual({
107
- total: 0,
108
- noCache: 0,
109
- cacheRead: 0,
110
- cacheWrite: undefined,
111
- });
112
- expect(result.outputTokens).toStrictEqual({
113
- total: 0,
114
- text: 0,
115
- reasoning: 0,
116
- });
117
- });
118
-
119
- it('should handle missing prompt_tokens and completion_tokens', () => {
120
- const result = computeTokenUsage({});
121
-
122
- expect(result.inputTokens).toStrictEqual({
123
- total: 0,
124
- noCache: 0,
125
- cacheRead: 0,
126
- cacheWrite: undefined,
127
- });
128
- expect(result.outputTokens).toStrictEqual({
129
- total: 0,
130
- text: 0,
131
- reasoning: 0,
132
- });
133
- });
134
-
135
- it('should handle null prompt_tokens and completion_tokens', () => {
136
- const result = computeTokenUsage({
137
- prompt_tokens: null,
138
- completion_tokens: null,
139
- });
140
-
141
- expect(result.inputTokens.total).toBe(0);
142
- expect(result.outputTokens.total).toBe(0);
143
- });
144
-
145
- it('should preserve raw usage object', () => {
146
- const usage = {
147
- prompt_tokens: 10,
148
- completion_tokens: 5,
149
- total_tokens: 15,
150
- extra_field: 'preserved',
151
- };
152
-
153
- const result = computeTokenUsage(usage);
154
- expect(result.raw).toBeDefined();
155
- expect((result.raw as Record<string, unknown>).total_tokens).toBe(15);
156
- expect((result.raw as Record<string, unknown>).extra_field).toBe(
157
- 'preserved',
158
- );
159
- });
160
- });
161
-
162
- describe('emptyUsage', () => {
163
- it('should return undefined for all detail fields', () => {
164
- const result = emptyUsage();
165
-
166
- expect(result.inputTokens).toStrictEqual({
167
- total: 0,
168
- noCache: undefined,
169
- cacheRead: undefined,
170
- cacheWrite: undefined,
171
- });
172
- expect(result.outputTokens).toStrictEqual({
173
- total: 0,
174
- text: undefined,
175
- reasoning: undefined,
176
- });
177
- expect(result.raw).toBeUndefined();
178
- });
179
-
180
- it('should return a new object each call', () => {
181
- const a = emptyUsage();
182
- const b = emptyUsage();
183
- expect(a).not.toBe(b);
184
- expect(a.inputTokens).not.toBe(b.inputTokens);
185
- });
186
- });
@@ -1,55 +0,0 @@
1
- import type { JSONObject, LanguageModelV3Usage } from '@ai-sdk/provider';
2
-
3
- interface UsageData {
4
- prompt_tokens?: number | null;
5
- completion_tokens?: number | null;
6
- prompt_tokens_details?: {
7
- cached_tokens?: number;
8
- cache_write_tokens?: number | null;
9
- } | null;
10
- completion_tokens_details?: {
11
- reasoning_tokens?: number;
12
- } | null;
13
- }
14
-
15
- export function computeTokenUsage(usage: UsageData): LanguageModelV3Usage {
16
- const promptTokens = usage.prompt_tokens ?? 0;
17
- const completionTokens = usage.completion_tokens ?? 0;
18
- const cacheReadTokens = usage.prompt_tokens_details?.cached_tokens ?? 0;
19
- const cacheWriteTokens =
20
- usage.prompt_tokens_details?.cache_write_tokens ?? undefined;
21
- const reasoningTokens =
22
- usage.completion_tokens_details?.reasoning_tokens ?? 0;
23
-
24
- return {
25
- inputTokens: {
26
- total: promptTokens,
27
- noCache: promptTokens - cacheReadTokens,
28
- cacheRead: cacheReadTokens,
29
- cacheWrite: cacheWriteTokens,
30
- },
31
- outputTokens: {
32
- total: completionTokens,
33
- text: completionTokens - reasoningTokens,
34
- reasoning: reasoningTokens,
35
- },
36
- raw: usage as JSONObject,
37
- };
38
- }
39
-
40
- export function emptyUsage(): LanguageModelV3Usage {
41
- return {
42
- inputTokens: {
43
- total: 0,
44
- noCache: undefined,
45
- cacheRead: undefined,
46
- cacheWrite: undefined,
47
- },
48
- outputTokens: {
49
- total: 0,
50
- text: undefined,
51
- reasoning: undefined,
52
- },
53
- raw: undefined,
54
- };
55
- }