@ai-sdk/quiverai 2.0.48 → 2.0.51
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/CHANGELOG.md +38 -0
- package/dist/index.js +27 -29
- package/dist/index.js.map +1 -1
- package/docs/180-quiverai.mdx +6 -0
- package/package.json +6 -6
- package/src/quiverai-image-model.ts +14 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# @ai-sdk/quiverai
|
|
2
2
|
|
|
3
|
+
## 2.0.51
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 525efc5: feat(provider): advertise image model file and mask input support
|
|
8
|
+
|
|
9
|
+
Use confirmed model IDs for capability declarations so unrecognized model names
|
|
10
|
+
remain unknown. Include Together AI FLUX.2 Pro and Flex single-image editing, and
|
|
11
|
+
allow asynchronous capability lookups and middleware overrides to resolve to
|
|
12
|
+
unknown.
|
|
13
|
+
|
|
14
|
+
Advertise QuiverAI Arrow 2 and Arrow 2 Telos file-input support, and mark Together
|
|
15
|
+
AI Gemini image inputs unsupported by the current single-image request mapping.
|
|
16
|
+
|
|
17
|
+
- Updated dependencies [e3605f6]
|
|
18
|
+
- Updated dependencies [525efc5]
|
|
19
|
+
- Updated dependencies [8cf3f5b]
|
|
20
|
+
- @ai-sdk/provider-utils@5.0.50
|
|
21
|
+
- @ai-sdk/provider@4.0.19
|
|
22
|
+
- @ai-sdk/open-responses@2.0.55
|
|
23
|
+
|
|
24
|
+
## 2.0.50
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- Updated dependencies [af9597b]
|
|
29
|
+
- Updated dependencies [bc49f78]
|
|
30
|
+
- @ai-sdk/provider-utils@5.0.49
|
|
31
|
+
- @ai-sdk/open-responses@2.0.54
|
|
32
|
+
|
|
33
|
+
## 2.0.49
|
|
34
|
+
|
|
35
|
+
### Patch Changes
|
|
36
|
+
|
|
37
|
+
- Updated dependencies [be877ff]
|
|
38
|
+
- @ai-sdk/provider-utils@5.0.48
|
|
39
|
+
- @ai-sdk/open-responses@2.0.53
|
|
40
|
+
|
|
3
41
|
## 2.0.48
|
|
4
42
|
|
|
5
43
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -101,8 +101,7 @@ var QuiverAILanguageModel = class _QuiverAILanguageModel {
|
|
|
101
101
|
}
|
|
102
102
|
};
|
|
103
103
|
function prepareQuiverAICall(options) {
|
|
104
|
-
|
|
105
|
-
const { reasoningEffort, reasoningSummary } = (_b = (_a = options.providerOptions) == null ? void 0 : _a.quiverai) != null ? _b : {};
|
|
104
|
+
const { reasoningEffort, reasoningSummary } = options.providerOptions?.quiverai ?? {};
|
|
106
105
|
if (reasoningEffort != null && (typeof reasoningEffort !== "string" || !["low", "medium", "high", "xhigh"].includes(reasoningEffort))) {
|
|
107
106
|
throw new InvalidArgumentError({
|
|
108
107
|
argument: "providerOptions",
|
|
@@ -129,17 +128,16 @@ function prepareQuiverAICall(options) {
|
|
|
129
128
|
(message) => message.role !== "assistant" ? message : {
|
|
130
129
|
...message,
|
|
131
130
|
content: message.content.map((part) => {
|
|
132
|
-
var _a2, _b2, _c;
|
|
133
131
|
if (part.type !== "reasoning") return part;
|
|
134
|
-
const metadata =
|
|
132
|
+
const metadata = part.providerOptions?.quiverai ?? part.providerMetadata?.quiverai;
|
|
135
133
|
return {
|
|
136
134
|
...part,
|
|
137
135
|
text: "",
|
|
138
136
|
providerOptions: {
|
|
139
137
|
...part.providerOptions,
|
|
140
138
|
quiverai: {
|
|
141
|
-
itemId: metadata
|
|
142
|
-
reasoningSummary: metadata
|
|
139
|
+
itemId: metadata?.itemId,
|
|
140
|
+
reasoningSummary: metadata?.reasoningSummary
|
|
143
141
|
}
|
|
144
142
|
}
|
|
145
143
|
};
|
|
@@ -306,7 +304,7 @@ function validateQuiverAIImageUrl(url) {
|
|
|
306
304
|
let parsed;
|
|
307
305
|
try {
|
|
308
306
|
parsed = new URL(url);
|
|
309
|
-
} catch
|
|
307
|
+
} catch {
|
|
310
308
|
throw new InvalidArgumentError2({
|
|
311
309
|
argument: "url",
|
|
312
310
|
message: "QuiverAI image URLs must be valid HTTP or HTTPS URLs."
|
|
@@ -358,7 +356,7 @@ function isSvg(data) {
|
|
|
358
356
|
let text;
|
|
359
357
|
try {
|
|
360
358
|
text = new TextDecoder("utf-8", { fatal: true }).decode(data);
|
|
361
|
-
} catch
|
|
359
|
+
} catch {
|
|
362
360
|
return false;
|
|
363
361
|
}
|
|
364
362
|
const normalized = text.replace(/^\uFEFF/, "").trim();
|
|
@@ -375,6 +373,12 @@ var QuiverAIImageModel = class _QuiverAIImageModel {
|
|
|
375
373
|
this.specificationVersion = "v4";
|
|
376
374
|
this.maxImagesPerCall = 16;
|
|
377
375
|
}
|
|
376
|
+
get supportsFileInputs() {
|
|
377
|
+
return this.modelId === "arrow-1" || this.modelId === "arrow-1.1" || this.modelId === "arrow-1.1-max" || this.modelId === "arrow-2" || this.modelId === "arrow-2-telos" ? true : void 0;
|
|
378
|
+
}
|
|
379
|
+
get supportsMaskInputs() {
|
|
380
|
+
return this.supportsFileInputs === true ? false : void 0;
|
|
381
|
+
}
|
|
378
382
|
get provider() {
|
|
379
383
|
return this.config.provider;
|
|
380
384
|
}
|
|
@@ -399,13 +403,12 @@ var QuiverAIImageModel = class _QuiverAIImageModel {
|
|
|
399
403
|
headers,
|
|
400
404
|
abortSignal
|
|
401
405
|
}) {
|
|
402
|
-
var _a, _b, _c, _d, _e, _f;
|
|
403
406
|
const quiveraiOptions = await parseProviderOptions({
|
|
404
407
|
provider: "quiverai",
|
|
405
408
|
providerOptions,
|
|
406
409
|
schema: quiveraiImageModelOptionsSchema
|
|
407
410
|
});
|
|
408
|
-
const operation =
|
|
411
|
+
const operation = quiveraiOptions?.operation ?? "generate";
|
|
409
412
|
const warnings = collectWarnings({ size, aspectRatio, seed, mask });
|
|
410
413
|
const body = buildRequestBody({
|
|
411
414
|
modelId: this.modelId,
|
|
@@ -414,10 +417,10 @@ var QuiverAIImageModel = class _QuiverAIImageModel {
|
|
|
414
417
|
files,
|
|
415
418
|
mask,
|
|
416
419
|
operation,
|
|
417
|
-
options: quiveraiOptions
|
|
420
|
+
options: quiveraiOptions ?? {}
|
|
418
421
|
});
|
|
419
|
-
const currentDate =
|
|
420
|
-
const combinedHeaders = combineHeaders(
|
|
422
|
+
const currentDate = this.config._internal?.currentDate?.() ?? /* @__PURE__ */ new Date();
|
|
423
|
+
const combinedHeaders = combineHeaders(this.config.headers?.(), headers);
|
|
421
424
|
const { value: response, responseHeaders } = await postJsonToApi({
|
|
422
425
|
url: `${this.config.baseURL}${getOperationPath(operation)}`,
|
|
423
426
|
headers: combinedHeaders,
|
|
@@ -489,12 +492,11 @@ function toQuiverAIImageReference(image) {
|
|
|
489
492
|
}
|
|
490
493
|
var maxAnimationSourceBase64Length = 1066668;
|
|
491
494
|
function toQuiverAIAnimationSource(image) {
|
|
492
|
-
var _a;
|
|
493
495
|
if (image.type === "url") {
|
|
494
496
|
let url;
|
|
495
497
|
try {
|
|
496
498
|
url = new URL(image.url);
|
|
497
|
-
} catch
|
|
499
|
+
} catch {
|
|
498
500
|
throw new InvalidArgumentError3({
|
|
499
501
|
argument: "files",
|
|
500
502
|
message: "QuiverAI animate requires a valid HTTP or HTTPS SVG URL."
|
|
@@ -512,10 +514,10 @@ function toQuiverAIAnimationSource(image) {
|
|
|
512
514
|
let bytes;
|
|
513
515
|
if (typeof image.data === "string") {
|
|
514
516
|
const dataUrlMatch = /^data:image\/svg\+xml(?:;[^,]*)?;base64,([\s\S]+)$/i.exec(image.data);
|
|
515
|
-
const encodedData =
|
|
517
|
+
const encodedData = dataUrlMatch?.[1] ?? image.data;
|
|
516
518
|
try {
|
|
517
519
|
bytes = convertBase64ToUint8Array2(encodedData);
|
|
518
|
-
} catch
|
|
520
|
+
} catch {
|
|
519
521
|
throw new InvalidArgumentError3({
|
|
520
522
|
argument: "files",
|
|
521
523
|
message: "QuiverAI animate requires the source SVG string to be valid base64 or an SVG data URL."
|
|
@@ -580,7 +582,7 @@ function buildRequestBody({
|
|
|
580
582
|
message: "QuiverAI image generation requires a non-empty prompt for generateImage."
|
|
581
583
|
});
|
|
582
584
|
}
|
|
583
|
-
const references = files
|
|
585
|
+
const references = files?.map(toQuiverAIImageReference);
|
|
584
586
|
const maxReferences = getGenerateReferenceLimit(modelId);
|
|
585
587
|
if (references != null && references.length > maxReferences) {
|
|
586
588
|
throw new InvalidArgumentError3({
|
|
@@ -723,7 +725,6 @@ function buildEditRequestBody({
|
|
|
723
725
|
mask,
|
|
724
726
|
options
|
|
725
727
|
}) {
|
|
726
|
-
var _a;
|
|
727
728
|
if (!editModelIds.has(modelId)) {
|
|
728
729
|
throw new InvalidArgumentError3({
|
|
729
730
|
argument: "modelId",
|
|
@@ -782,7 +783,7 @@ function buildEditRequestBody({
|
|
|
782
783
|
)}.`
|
|
783
784
|
});
|
|
784
785
|
}
|
|
785
|
-
const referenceImages =
|
|
786
|
+
const referenceImages = options.referenceImages?.map((reference, index) => {
|
|
786
787
|
if ("url" in reference) {
|
|
787
788
|
return {
|
|
788
789
|
url: validateQuiverAIImageUrl(reference.url)
|
|
@@ -875,7 +876,6 @@ function toQuiverAIEditSource(file) {
|
|
|
875
876
|
};
|
|
876
877
|
}
|
|
877
878
|
function isSvgMarkup(svg) {
|
|
878
|
-
var _a;
|
|
879
879
|
const document = svg.replace(/^\uFEFF/, "");
|
|
880
880
|
const elements = [];
|
|
881
881
|
let position = 0;
|
|
@@ -921,14 +921,14 @@ function isSvgMarkup(svg) {
|
|
|
921
921
|
continue;
|
|
922
922
|
}
|
|
923
923
|
if (document.slice(position, position + 9).toUpperCase() === "<!DOCTYPE") {
|
|
924
|
-
if (rootSeen || doctypeSeen || elements.length > 0 || !/[\t\n\r ]/.test(
|
|
924
|
+
if (rootSeen || doctypeSeen || elements.length > 0 || !/[\t\n\r ]/.test(document[position + 9] ?? "")) {
|
|
925
925
|
return false;
|
|
926
926
|
}
|
|
927
927
|
const doctypeName = readXmlName(
|
|
928
928
|
document,
|
|
929
929
|
skipXmlWhitespace(document, position + 9)
|
|
930
930
|
);
|
|
931
|
-
if (
|
|
931
|
+
if (doctypeName?.name.toLowerCase() !== "svg") {
|
|
932
932
|
return false;
|
|
933
933
|
}
|
|
934
934
|
const doctypeEnd = findDoctypeEnd(document, doctypeName.end);
|
|
@@ -1043,8 +1043,7 @@ function readXmlName(value, position) {
|
|
|
1043
1043
|
};
|
|
1044
1044
|
}
|
|
1045
1045
|
function skipXmlWhitespace(value, position) {
|
|
1046
|
-
|
|
1047
|
-
while (/[\t\n\r ]/.test((_a = value[position]) != null ? _a : "")) {
|
|
1046
|
+
while (/[\t\n\r ]/.test(value[position] ?? "")) {
|
|
1048
1047
|
position += 1;
|
|
1049
1048
|
}
|
|
1050
1049
|
return position;
|
|
@@ -1148,18 +1147,17 @@ var svgGenerationResponseSchema = z3.object({
|
|
|
1148
1147
|
});
|
|
1149
1148
|
|
|
1150
1149
|
// src/version.ts
|
|
1151
|
-
var VERSION = true ? "2.0.
|
|
1150
|
+
var VERSION = true ? "2.0.51" : "0.0.0-test";
|
|
1152
1151
|
|
|
1153
1152
|
// src/quiverai-provider.ts
|
|
1154
1153
|
var defaultBaseURL = "https://api.quiver.ai/v1";
|
|
1155
1154
|
function createQuiverAI(options = {}) {
|
|
1156
|
-
|
|
1157
|
-
const baseURL = (_a = withoutTrailingSlash(
|
|
1155
|
+
const baseURL = withoutTrailingSlash(
|
|
1158
1156
|
loadOptionalSetting({
|
|
1159
1157
|
settingValue: options.baseURL,
|
|
1160
1158
|
environmentVariableName: "QUIVERAI_BASE_URL"
|
|
1161
1159
|
})
|
|
1162
|
-
)
|
|
1160
|
+
) ?? defaultBaseURL;
|
|
1163
1161
|
const getHeaders = () => ({
|
|
1164
1162
|
Authorization: `Bearer ${loadApiKey({
|
|
1165
1163
|
apiKey: options.apiKey,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/quiverai-provider.ts","../src/quiverai-error.ts","../src/quiverai-language-model.ts","../src/quiverai-image-model.ts","../src/quiverai-image-model-options.ts","../src/prepare-quiverai-image-reference.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type ImageModelV4,\n type LanguageModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n createOpenResponses,\n type OpenResponsesProviderSettings,\n} from '@ai-sdk/open-responses';\nimport {\n loadApiKey,\n loadOptionalSetting,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport {\n getQuiverAIResponseErrorMetadata,\n quiveraiFailedResponseHandler,\n} from './quiverai-error';\nimport { QuiverAILanguageModel } from './quiverai-language-model';\nimport { QuiverAIImageModel } from './quiverai-image-model';\nimport type { QuiverAIImageModelId } from './quiverai-image-settings';\nimport type { QuiverAILanguageModelId } from './quiverai-language-model-settings';\nimport { VERSION } from './version';\n\nexport interface QuiverAIProviderSettings {\n /**\n * QuiverAI API key. Default value is taken from the `QUIVERAI_API_KEY`\n * environment variable.\n */\n apiKey?: string;\n\n /**\n * Base URL for the API calls. Defaults to `https://api.quiver.ai/v1` and\n * falls back to the `QUIVERAI_BASE_URL` environment variable.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept\n * requests, or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface QuiverAIProvider extends ProviderV4 {\n /**\n * Creates a language model for the QuiverAI Responses API.\n */\n (modelId: QuiverAILanguageModelId): LanguageModelV4;\n\n /**\n * Creates a language model for the QuiverAI Responses API.\n */\n languageModel(modelId: QuiverAILanguageModelId): LanguageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: QuiverAIImageModelId): ImageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: QuiverAIImageModelId): ImageModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n\n /**\n * QuiverAI caller-executed tools.\n */\n tools: ReturnType<typeof createOpenResponses>['tools'];\n}\n\nconst defaultBaseURL = 'https://api.quiver.ai/v1';\n\nexport function createQuiverAI(\n options: QuiverAIProviderSettings = {},\n): QuiverAIProvider {\n const baseURL =\n withoutTrailingSlash(\n loadOptionalSetting({\n settingValue: options.baseURL,\n environmentVariableName: 'QUIVERAI_BASE_URL',\n }),\n ) ?? defaultBaseURL;\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'QUIVERAI_API_KEY',\n description: 'QuiverAI',\n })}`,\n ...options.headers,\n });\n\n const getImageHeaders = () =>\n withUserAgentSuffix(getHeaders(), `ai-sdk/quiverai/${VERSION}`);\n\n const responsesConfig: OpenResponsesProviderSettings = {\n name: 'quiverai',\n url: `${baseURL}/responses`,\n headers: getHeaders,\n fetch: options.fetch,\n failedResponseHandler: quiveraiFailedResponseHandler,\n getResponseErrorMetadata: getQuiverAIResponseErrorMetadata,\n strictResponseInput: true,\n customToolId: 'quiverai.custom',\n structuredOutputs: false,\n userAgentSuffix: `ai-sdk/quiverai/${VERSION}`,\n };\n const responsesProvider = createOpenResponses(responsesConfig);\n\n const createLanguageModel = (modelId: QuiverAILanguageModelId) =>\n new QuiverAILanguageModel(\n responsesProvider.languageModel(modelId),\n responsesConfig,\n );\n\n const createImageModel = (modelId: QuiverAIImageModelId) =>\n new QuiverAIImageModel(modelId, {\n provider: 'quiverai.image',\n baseURL,\n headers: getImageHeaders,\n fetch: options.fetch,\n });\n\n const embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n });\n };\n\n const provider = function (modelId: QuiverAILanguageModelId) {\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createLanguageModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.embeddingModel = embeddingModel;\n provider.textEmbeddingModel = embeddingModel;\n provider.tools = responsesProvider.tools;\n\n return provider as QuiverAIProvider;\n}\n\nexport const quiverai = createQuiverAI();\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport type { OpenResponsesProviderSettings } from '@ai-sdk/open-responses';\nimport { z } from 'zod/v4';\n\nconst quiveraiErrorSchema = z.object({\n status: z.number().int(),\n code: z.string().min(1),\n message: z.string().min(1),\n request_id: z.string().min(1),\n});\n\nexport const quiveraiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: quiveraiErrorSchema,\n errorToMessage: error => error.message,\n isRetryable: response => response.status === 429 || response.status >= 500,\n});\n\nexport const getQuiverAIResponseErrorMetadata: NonNullable<\n OpenResponsesProviderSettings['getResponseErrorMetadata']\n> = error => ({\n statusCode:\n typeof error.status_code === 'number' &&\n Number.isInteger(error.status_code) &&\n error.status_code >= 400 &&\n error.status_code <= 599\n ? error.status_code\n : undefined,\n});\n","import {\n InvalidArgumentError,\n type LanguageModelV4,\n type LanguageModelV4CallOptions,\n type LanguageModelV4StreamPart,\n type SharedV4ProviderMetadata,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n createOpenResponses,\n type OpenResponsesProviderSettings,\n} from '@ai-sdk/open-responses';\nimport {\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n} from '@ai-sdk/provider-utils';\nimport {\n getQuiverAIResponseErrorMetadata,\n quiveraiFailedResponseHandler,\n} from './quiverai-error';\n\n/** Applies QuiverAI's request policy while reusing the Open Responses transport. */\nexport class QuiverAILanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n static [WORKFLOW_SERIALIZE](model: QuiverAILanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: OpenResponsesProviderSettings;\n }) {\n // Restore QuiverAI's handlers, which cannot cross workflow boundaries.\n const config: OpenResponsesProviderSettings = {\n ...options.config,\n failedResponseHandler: quiveraiFailedResponseHandler,\n getResponseErrorMetadata: getQuiverAIResponseErrorMetadata,\n };\n\n return new QuiverAILanguageModel(\n createOpenResponses(config).languageModel(options.modelId),\n config,\n );\n }\n\n constructor(\n private readonly model: LanguageModelV4,\n private readonly config: OpenResponsesProviderSettings,\n ) {}\n\n get modelId() {\n return this.model.modelId;\n }\n\n get provider() {\n return this.model.provider;\n }\n\n get supportedUrls() {\n return this.model.supportedUrls;\n }\n\n async doGenerate(options: LanguageModelV4CallOptions) {\n const prepared = prepareQuiverAICall(options);\n const result = await this.model.doGenerate(prepared.options);\n return { ...result, warnings: [...prepared.warnings, ...result.warnings] };\n }\n\n async doStream(options: LanguageModelV4CallOptions) {\n const prepared = prepareQuiverAICall(options);\n const result = await this.model.doStream(prepared.options);\n if (prepared.warnings.length === 0) return result;\n return {\n ...result,\n stream: result.stream.pipeThrough(\n new TransformStream<\n LanguageModelV4StreamPart,\n LanguageModelV4StreamPart\n >({\n transform(part, controller) {\n controller.enqueue(\n part.type === 'stream-start'\n ? {\n ...part,\n warnings: [...prepared.warnings, ...part.warnings],\n }\n : part,\n );\n },\n }),\n ),\n };\n }\n}\n\nfunction prepareQuiverAICall(options: LanguageModelV4CallOptions): {\n options: LanguageModelV4CallOptions;\n warnings: SharedV4Warning[];\n} {\n const { reasoningEffort, reasoningSummary } =\n options.providerOptions?.quiverai ?? {};\n if (\n reasoningEffort != null &&\n (typeof reasoningEffort !== 'string' ||\n !['low', 'medium', 'high', 'xhigh'].includes(reasoningEffort))\n ) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: `Unsupported reasoning effort: ${reasoningEffort}`,\n });\n }\n if (reasoningSummary != null && reasoningSummary !== 'auto') {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: `Unsupported reasoning summary: ${reasoningSummary}`,\n });\n }\n\n const warnings: SharedV4Warning[] = [];\n const omitReasoning = options.reasoning === 'none' && reasoningEffort == null;\n if (omitReasoning) {\n warnings.push({ type: 'unsupported', feature: 'reasoning effort none' });\n }\n\n return {\n warnings,\n options: {\n ...options,\n reasoning: omitReasoning ? undefined : options.reasoning,\n prompt: options.prompt.map(message =>\n message.role !== 'assistant'\n ? message\n : {\n ...message,\n content: message.content.map(part => {\n if (part.type !== 'reasoning') return part;\n const metadata =\n part.providerOptions?.quiverai ??\n (part as { providerMetadata?: SharedV4ProviderMetadata })\n .providerMetadata?.quiverai;\n return {\n ...part,\n text: '',\n providerOptions: {\n ...part.providerOptions,\n quiverai: {\n itemId: metadata?.itemId,\n reasoningSummary: metadata?.reasoningSummary,\n },\n },\n };\n }),\n },\n ),\n },\n };\n}\n","import {\n InvalidArgumentError,\n type ImageModelV4,\n type ImageModelV4CallOptions,\n type ImageModelV4File,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n quiveraiImageModelOptionsSchema,\n type QuiverAIImageModelOptions,\n} from './quiverai-image-model-options';\nimport { quiveraiFailedResponseHandler } from './quiverai-error';\nimport {\n validateQuiverAIImageUrl,\n validateQuiverAIReferenceBase64,\n} from './prepare-quiverai-image-reference';\nimport type {\n QuiverAIImageModelId,\n QuiverAIOperation,\n} from './quiverai-image-settings';\n\ninterface QuiverAIImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: () => Record<string, string>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class QuiverAIImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxImagesPerCall = 16;\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: QuiverAIImageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: QuiverAIImageModelId;\n config: QuiverAIImageModelConfig;\n }) {\n return new QuiverAIImageModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: QuiverAIImageModelId,\n private readonly config: QuiverAIImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n files,\n mask,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: ImageModelV4CallOptions): Promise<\n Awaited<ReturnType<ImageModelV4['doGenerate']>>\n > {\n const quiveraiOptions = await parseProviderOptions({\n provider: 'quiverai',\n providerOptions,\n schema: quiveraiImageModelOptionsSchema,\n });\n\n const operation: QuiverAIOperation =\n quiveraiOptions?.operation ?? 'generate';\n\n const warnings = collectWarnings({ size, aspectRatio, seed, mask });\n\n const body = buildRequestBody({\n modelId: this.modelId,\n n,\n prompt,\n files,\n mask,\n operation,\n options: quiveraiOptions ?? {},\n });\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(this.config.headers?.(), headers);\n\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}${getOperationPath(operation)}`,\n headers: combinedHeaders,\n body,\n failedResponseHandler: quiveraiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n svgGenerationResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const encoder = new TextEncoder();\n const images = response.data.map(image => encoder.encode(image.svg));\n\n return {\n images,\n warnings,\n providerMetadata: {\n quiverai: {\n ...(response.credits != null && { credits: response.credits }),\n images: response.data.map((image, index) => ({\n index,\n mimeType: image.mime_type,\n ...(image.loop_period_ms !== undefined && {\n loopPeriodMs: image.loop_period_ms,\n }),\n ...(image.opening_animation_ms !== undefined && {\n openingAnimationMs: image.opening_animation_ms,\n }),\n })),\n },\n },\n response: {\n timestamp: response.created\n ? new Date(response.created * 1000)\n : currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n ...(response.usage && {\n usage: {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n totalTokens: response.usage.total_tokens,\n },\n }),\n };\n }\n}\n\nfunction getOperationPath(operation: QuiverAIOperation) {\n switch (operation) {\n case 'generate':\n return '/svgs/generations';\n case 'vectorize':\n return '/svgs/vectorizations';\n case 'edit':\n return '/svgs/edits';\n case 'animate':\n return '/svgs/animations';\n }\n}\n\nfunction getGenerateReferenceLimit(modelId: string) {\n // Only apply the lower limit to documented Arrow 1.x models. The API\n // enforces model-specific limits within its 16-reference request limit.\n return ['arrow-1', 'arrow-1.0', 'arrow-1.1'].includes(modelId) ? 4 : 16;\n}\n\nfunction toQuiverAIImageReference(image: ImageModelV4File) {\n if (image.type === 'url') {\n return { url: image.url };\n }\n return {\n base64:\n typeof image.data === 'string'\n ? image.data\n : convertUint8ArrayToBase64(image.data),\n };\n}\n\nconst maxAnimationSourceBase64Length = 1_066_668;\n\nfunction toQuiverAIAnimationSource(image: ImageModelV4File) {\n if (image.type === 'url') {\n let url: URL;\n try {\n url = new URL(image.url);\n } catch {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI animate requires a valid HTTP or HTTPS SVG URL.',\n });\n }\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI animate requires an HTTP or HTTPS SVG URL.',\n });\n }\n\n return { url: image.url };\n }\n\n let base64: string;\n let bytes: Uint8Array;\n\n if (typeof image.data === 'string') {\n const dataUrlMatch =\n /^data:image\\/svg\\+xml(?:;[^,]*)?;base64,([\\s\\S]+)$/i.exec(image.data);\n const encodedData = dataUrlMatch?.[1] ?? image.data;\n\n try {\n bytes = convertBase64ToUint8Array(encodedData);\n } catch {\n throw new InvalidArgumentError({\n argument: 'files',\n message:\n 'QuiverAI animate requires the source SVG string to be valid base64 or an SVG data URL.',\n });\n }\n base64 = convertUint8ArrayToBase64(bytes);\n } else {\n bytes = image.data;\n base64 = convertUint8ArrayToBase64(bytes);\n }\n\n if (!isSvg(bytes)) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI animate requires the input file to contain SVG data.',\n });\n }\n\n if (base64.length > maxAnimationSourceBase64Length) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: `QuiverAI animate accepts at most ${maxAnimationSourceBase64Length} base64 characters for the source SVG.`,\n });\n }\n\n return { base64 };\n}\n\nfunction isSvg(data: Uint8Array): boolean {\n const head = new TextDecoder('utf-8', { fatal: false })\n .decode(data.subarray(0, 4096))\n .trimStart();\n\n return /^(?:(?:<\\?xml[\\s\\S]*?\\?>|<!--[\\s\\S]*?-->|<!DOCTYPE[\\s\\S]*?>)\\s*)*<svg(?:\\s|>)/i.test(\n head,\n );\n}\n\nfunction buildRequestBody({\n modelId,\n n,\n prompt,\n files,\n mask,\n operation,\n options,\n}: {\n modelId: string;\n n: number;\n prompt: string | undefined;\n files: ImageModelV4File[] | undefined;\n mask: ImageModelV4File | undefined;\n operation: QuiverAIOperation;\n options: QuiverAIImageModelOptions;\n}) {\n if (\n (modelId === 'arrow-2' || modelId === 'arrow-2-telos') &&\n options.maxOutputTokens != null &&\n options.maxOutputTokens > 65536\n ) {\n throw new InvalidArgumentError({\n argument: 'maxOutputTokens',\n message: `QuiverAI model \"${modelId}\" supports at most 65536 output tokens.`,\n });\n }\n\n const sharedOptions = {\n temperature: options.temperature,\n top_p: options.topP,\n presence_penalty: options.presencePenalty,\n max_output_tokens: options.maxOutputTokens,\n reasoning_effort: options.reasoningEffort,\n attributes: options.attributes,\n stream: false as const,\n };\n\n if (operation !== 'edit') {\n rejectEditOnlyOptions(operation, options);\n }\n\n if (operation === 'generate') {\n if (prompt == null || prompt.trim().length === 0) {\n throw new InvalidArgumentError({\n argument: 'prompt',\n message:\n 'QuiverAI image generation requires a non-empty prompt for generateImage.',\n });\n }\n\n const references = files?.map(toQuiverAIImageReference);\n const maxReferences = getGenerateReferenceLimit(modelId);\n\n if (references != null && references.length > maxReferences) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: `QuiverAI generate supports up to ${maxReferences} reference images for model \"${modelId}\".`,\n });\n }\n\n return {\n model: modelId,\n n,\n prompt,\n ...sharedOptions,\n instructions: options.instructions,\n references,\n };\n }\n\n if (operation === 'edit') {\n return buildEditRequestBody({\n modelId,\n n,\n prompt,\n files,\n mask,\n options,\n });\n }\n\n if (operation === 'animate') {\n return buildAnimationRequestBody({\n modelId,\n n,\n prompt,\n files,\n mask,\n options,\n });\n }\n\n if (files == null || files.length === 0) {\n throw new InvalidArgumentError({\n argument: 'files',\n message:\n 'QuiverAI vectorize requires an input image. Pass an image in the generateImage prompt and set providerOptions.quiverai.operation to \"vectorize\".',\n });\n }\n\n if (files.length > 1) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI vectorize accepts a single input image.',\n });\n }\n\n if (n !== 1) {\n throw new InvalidArgumentError({\n argument: 'n',\n message:\n 'QuiverAI vectorize returns one SVG per request. Set maxImagesPerCall to 1 in generateImage to vectorize multiple times.',\n });\n }\n\n return {\n model: modelId,\n image: toQuiverAIImageReference(files[0]),\n ...sharedOptions,\n auto_crop: options.autoCrop,\n target_size: options.targetSize,\n };\n}\n\nfunction buildAnimationRequestBody({\n modelId,\n n,\n prompt,\n files,\n mask,\n options,\n}: {\n modelId: string;\n n: number;\n prompt: string | undefined;\n files: ImageModelV4File[] | undefined;\n mask: ImageModelV4File | undefined;\n options: QuiverAIImageModelOptions;\n}) {\n if (modelId !== 'arrow-2' && modelId !== 'arrow-2-telos') {\n throw new InvalidArgumentError({\n argument: 'modelId',\n message:\n 'QuiverAI animate is supported by the \"arrow-2\" and \"arrow-2-telos\" models.',\n });\n }\n\n if (files == null || files.length === 0) {\n throw new InvalidArgumentError({\n argument: 'files',\n message:\n 'QuiverAI animate requires exactly one source SVG in prompt.images.',\n });\n }\n\n if (files.length !== 1) {\n throw new InvalidArgumentError({\n argument: 'files',\n message:\n 'QuiverAI animate accepts exactly one source SVG in prompt.images.',\n });\n }\n\n if (n !== 1) {\n throw new InvalidArgumentError({\n argument: 'n',\n message:\n 'QuiverAI animate returns one SVG per request. Set maxImagesPerCall to 1 in generateImage to animate multiple times.',\n });\n }\n\n if (mask != null) {\n throw new InvalidArgumentError({\n argument: 'mask',\n message: 'QuiverAI animate does not support masks.',\n });\n }\n\n if (prompt != null && prompt.trim().length === 0) {\n throw new InvalidArgumentError({\n argument: 'prompt',\n message:\n 'QuiverAI animate requires a non-empty prompt when an animation instruction is provided.',\n });\n }\n\n const unsupportedOptions = [\n ['instructions', options.instructions],\n ['topP', options.topP],\n ['presencePenalty', options.presencePenalty],\n ['attributes', options.attributes],\n ['autoCrop', options.autoCrop],\n ['targetSize', options.targetSize],\n ].filter((option): option is [string, NonNullable<unknown>] => {\n return option[1] !== undefined;\n });\n\n if (unsupportedOptions.length > 0) {\n throw new InvalidArgumentError({\n argument: `providerOptions.quiverai.${unsupportedOptions[0][0]}`,\n message: `QuiverAI animate does not support providerOptions.quiverai.${unsupportedOptions[0][0]}.`,\n });\n }\n\n return {\n model: modelId,\n svg_source: toQuiverAIAnimationSource(files[0]),\n prompt,\n temperature: options.temperature,\n max_output_tokens: options.maxOutputTokens,\n reasoning_effort: options.reasoningEffort,\n stream: false as const,\n };\n}\n\nconst editModelIds = new Set(['arrow-2', 'arrow-2-telos']);\nconst MAX_EDIT_SVG_BYTES = 200_000;\n\nfunction buildEditRequestBody({\n modelId,\n n,\n prompt,\n files,\n mask,\n options,\n}: {\n modelId: string;\n n: number;\n prompt: string | undefined;\n files: ImageModelV4File[] | undefined;\n mask: ImageModelV4File | undefined;\n options: QuiverAIImageModelOptions;\n}) {\n if (!editModelIds.has(modelId)) {\n throw new InvalidArgumentError({\n argument: 'modelId',\n message:\n 'QuiverAI SVG editing is supported by the \"arrow-2\" and \"arrow-2-telos\" models.',\n });\n }\n\n if (prompt == null || prompt.trim().length === 0) {\n throw new InvalidArgumentError({\n argument: 'prompt',\n message:\n 'QuiverAI SVG editing requires a non-empty instruction in generateImage prompt.text.',\n });\n }\n\n if (prompt.length > 4000) {\n throw new InvalidArgumentError({\n argument: 'prompt',\n message:\n 'QuiverAI SVG editing instructions must contain at most 4000 characters.',\n });\n }\n\n if (files == null || files.length === 0) {\n throw new InvalidArgumentError({\n argument: 'files',\n message:\n 'QuiverAI SVG editing requires one source SVG in generateImage prompt.images.',\n });\n }\n\n if (files.length !== 1) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI SVG editing accepts exactly one source SVG.',\n });\n }\n\n if (n !== 1) {\n throw new InvalidArgumentError({\n argument: 'n',\n message:\n 'QuiverAI SVG editing returns exactly one SVG per request. Set maxImagesPerCall to 1 in generateImage to edit multiple times.',\n });\n }\n\n if (mask != null) {\n throw new InvalidArgumentError({\n argument: 'mask',\n message: 'QuiverAI SVG editing does not support masks.',\n });\n }\n\n const unsupportedOptions = [\n ['instructions', options.instructions],\n ['attributes', options.attributes],\n ['topP', options.topP],\n ['presencePenalty', options.presencePenalty],\n ['autoCrop', options.autoCrop],\n ['targetSize', options.targetSize],\n ].flatMap(([name, value]) => (value == null ? [] : [name]));\n\n if (unsupportedOptions.length > 0) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: `QuiverAI SVG editing does not support these provider options: ${unsupportedOptions.join(\n ', ',\n )}.`,\n });\n }\n\n const referenceImages = options.referenceImages?.map((reference, index) => {\n if ('url' in reference) {\n return {\n url: validateQuiverAIImageUrl(reference.url),\n };\n }\n\n validateQuiverAIReferenceBase64(\n reference.base64,\n `providerOptions.quiverai.referenceImages[${index}]`,\n );\n return { base64: reference.base64 };\n });\n const settings = {\n max_output_tokens: options.maxOutputTokens,\n orchestrator_max_output_tokens: options.orchestratorMaxOutputTokens,\n shallow_max_output_tokens: options.shallowMaxOutputTokens,\n temperature: options.temperature,\n };\n const hasSettings = Object.values(settings).some(value => value != null);\n\n return {\n model: modelId,\n prompt,\n ...toQuiverAIEditSource(files[0]),\n reference_images: referenceImages,\n max_review_steps: options.maxReviewSteps,\n reasoning_effort: options.reasoningEffort,\n ...(hasSettings && { settings }),\n stream: false as const,\n };\n}\n\nfunction rejectEditOnlyOptions(\n operation: Exclude<QuiverAIOperation, 'edit'>,\n options: QuiverAIImageModelOptions,\n) {\n const editOnlyOptions = [\n ['referenceImages', options.referenceImages],\n ['maxReviewSteps', options.maxReviewSteps],\n ['orchestratorMaxOutputTokens', options.orchestratorMaxOutputTokens],\n ['shallowMaxOutputTokens', options.shallowMaxOutputTokens],\n ].flatMap(([name, value]) => (value == null ? [] : [name]));\n\n if (editOnlyOptions.length > 0) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: `QuiverAI ${operation} does not support these edit-only provider options: ${editOnlyOptions.join(\n ', ',\n )}.`,\n });\n }\n}\n\nfunction toQuiverAIEditSource(file: ImageModelV4File) {\n if (file.type === 'url') {\n return {\n svg_source: {\n url: validateQuiverAIImageUrl(file.url),\n },\n };\n }\n\n let data: Uint8Array;\n try {\n data =\n typeof file.data === 'string'\n ? convertBase64ToUint8Array(file.data)\n : file.data;\n } catch (cause) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI SVG source data must be valid base64 or binary data.',\n cause,\n });\n }\n\n if (data.length === 0 || data.length > MAX_EDIT_SVG_BYTES) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: `QuiverAI SVG source data must contain 1-${MAX_EDIT_SVG_BYTES} bytes.`,\n });\n }\n\n let svg: string;\n try {\n svg = new TextDecoder('utf-8', { fatal: true }).decode(data);\n } catch (cause) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI SVG source data must be valid UTF-8.',\n cause,\n });\n }\n\n if (svg.length > MAX_EDIT_SVG_BYTES || !isSvgMarkup(svg)) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI SVG source data must contain a complete SVG document.',\n });\n }\n\n return {\n svg_source: {\n base64: convertUint8ArrayToBase64(data),\n },\n };\n}\n\nfunction isSvgMarkup(svg: string) {\n const document = svg.replace(/^\\uFEFF/, '');\n const elements: string[] = [];\n let position = 0;\n let rootSeen = false;\n let rootClosed = false;\n let doctypeSeen = false;\n\n while (position < document.length) {\n if (document[position] !== '<') {\n const nextTag = document.indexOf('<', position);\n const end = nextTag === -1 ? document.length : nextTag;\n const text = document.slice(position, end);\n\n if (\n (elements.length === 0 && text.trim().length > 0) ||\n text.includes(']]>') ||\n !hasValidXmlReferences(text)\n ) {\n return false;\n }\n\n position = end;\n continue;\n }\n\n if (document.startsWith('<!--', position)) {\n const commentEnd = document.indexOf('-->', position + 4);\n if (\n commentEnd === -1 ||\n document.slice(position + 4, commentEnd).includes('--')\n ) {\n return false;\n }\n position = commentEnd + 3;\n continue;\n }\n\n if (document.startsWith('<?', position)) {\n const instructionEnd = document.indexOf('?>', position + 2);\n if (instructionEnd === -1) {\n return false;\n }\n position = instructionEnd + 2;\n continue;\n }\n\n if (document.startsWith('<![CDATA[', position)) {\n if (elements.length === 0) {\n return false;\n }\n const cdataEnd = document.indexOf(']]>', position + 9);\n if (cdataEnd === -1) {\n return false;\n }\n position = cdataEnd + 3;\n continue;\n }\n\n if (document.slice(position, position + 9).toUpperCase() === '<!DOCTYPE') {\n if (\n rootSeen ||\n doctypeSeen ||\n elements.length > 0 ||\n !/[\\t\\n\\r ]/.test(document[position + 9] ?? '')\n ) {\n return false;\n }\n const doctypeName = readXmlName(\n document,\n skipXmlWhitespace(document, position + 9),\n );\n if (doctypeName?.name.toLowerCase() !== 'svg') {\n return false;\n }\n const doctypeEnd = findDoctypeEnd(document, doctypeName.end);\n if (doctypeEnd === -1) {\n return false;\n }\n doctypeSeen = true;\n position = doctypeEnd;\n continue;\n }\n\n if (document.startsWith('<!', position)) {\n return false;\n }\n\n if (document.startsWith('</', position)) {\n const closingTag = readXmlName(document, position + 2);\n if (closingTag == null) {\n return false;\n }\n let tagEnd = skipXmlWhitespace(document, closingTag.end);\n if (document[tagEnd] !== '>') {\n return false;\n }\n const expectedTag = elements.pop();\n if (expectedTag !== closingTag.name) {\n return false;\n }\n tagEnd += 1;\n if (elements.length === 0) {\n rootClosed = true;\n }\n position = tagEnd;\n continue;\n }\n\n if (rootClosed) {\n return false;\n }\n\n const openingTag = readXmlName(document, position + 1);\n if (openingTag == null) {\n return false;\n }\n if (!rootSeen) {\n if (openingTag.name.toLowerCase() !== 'svg') {\n return false;\n }\n rootSeen = true;\n }\n\n const attributes = new Set<string>();\n let tagPosition = openingTag.end;\n while (tagPosition < document.length) {\n const beforeWhitespace = tagPosition;\n tagPosition = skipXmlWhitespace(document, tagPosition);\n\n if (document.startsWith('/>', tagPosition)) {\n tagPosition += 2;\n if (elements.length === 0) {\n rootClosed = true;\n }\n position = tagPosition;\n break;\n }\n\n if (document[tagPosition] === '>') {\n elements.push(openingTag.name);\n position = tagPosition + 1;\n break;\n }\n\n if (tagPosition === beforeWhitespace) {\n return false;\n }\n\n const attribute = readXmlName(document, tagPosition);\n if (attribute == null || attributes.has(attribute.name)) {\n return false;\n }\n attributes.add(attribute.name);\n\n tagPosition = skipXmlWhitespace(document, attribute.end);\n if (document[tagPosition] !== '=') {\n return false;\n }\n tagPosition = skipXmlWhitespace(document, tagPosition + 1);\n\n const quote = document[tagPosition];\n if (quote !== '\"' && quote !== \"'\") {\n return false;\n }\n const valueEnd = document.indexOf(quote, tagPosition + 1);\n if (\n valueEnd === -1 ||\n document.slice(tagPosition + 1, valueEnd).includes('<') ||\n !hasValidXmlReferences(document.slice(tagPosition + 1, valueEnd))\n ) {\n return false;\n }\n tagPosition = valueEnd + 1;\n }\n\n if (tagPosition >= document.length && position !== document.length) {\n return false;\n }\n }\n\n return rootSeen && rootClosed && elements.length === 0;\n}\n\nfunction isXmlNameStart(character: string | undefined) {\n return character != null && /[A-Z_a-z:\\u0080-\\uFFFF]/.test(character);\n}\n\nfunction isXmlNameCharacter(character: string | undefined) {\n return (\n character != null && /[-.0-9A-Z_a-z:\\u00B7\\u0080-\\uFFFF]/.test(character)\n );\n}\n\nfunction readXmlName(value: string, position: number) {\n if (!isXmlNameStart(value[position])) {\n return undefined;\n }\n\n const start = position;\n position += 1;\n while (isXmlNameCharacter(value[position])) {\n position += 1;\n }\n\n return {\n name: value.slice(start, position),\n end: position,\n };\n}\n\nfunction skipXmlWhitespace(value: string, position: number) {\n while (/[\\t\\n\\r ]/.test(value[position] ?? '')) {\n position += 1;\n }\n return position;\n}\n\nfunction hasValidXmlReferences(value: string) {\n let position = value.indexOf('&');\n while (position !== -1) {\n const end = value.indexOf(';', position + 1);\n if (end === -1) {\n return false;\n }\n const reference = value.slice(position + 1, end);\n if (\n !/^#\\d+$/.test(reference) &&\n !/^#x[\\dA-Fa-f]+$/.test(reference) &&\n !/^[A-Z_a-z:\\u0080-\\uFFFF][-.0-9A-Z_a-z:\\u00B7\\u0080-\\uFFFF]*$/.test(\n reference,\n )\n ) {\n return false;\n }\n position = value.indexOf('&', end + 1);\n }\n return true;\n}\n\nfunction findDoctypeEnd(value: string, position: number) {\n let subsetDepth = 0;\n let quote: '\"' | \"'\" | undefined;\n\n while (position < value.length) {\n const character = value[position];\n if (quote != null) {\n if (character === quote) {\n quote = undefined;\n }\n } else if (character === '\"' || character === \"'\") {\n quote = character;\n } else if (character === '[') {\n subsetDepth += 1;\n } else if (character === ']') {\n if (subsetDepth === 0) {\n return -1;\n }\n subsetDepth -= 1;\n } else if (character === '>' && subsetDepth === 0) {\n return position + 1;\n }\n position += 1;\n }\n\n return -1;\n}\n\nfunction collectWarnings({\n size,\n aspectRatio,\n seed,\n mask,\n}: {\n size: `${number}x${number}` | undefined;\n aspectRatio: `${number}:${number}` | undefined;\n seed: number | undefined;\n mask: ImageModelV4File | undefined;\n}): SharedV4Warning[] {\n const warnings: SharedV4Warning[] = [];\n\n if (size != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details:\n 'QuiverAI SVG generation does not support the `size` option. The setting was ignored.',\n });\n }\n\n if (aspectRatio != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'QuiverAI SVG generation does not support the `aspectRatio` option. The setting was ignored.',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'seed',\n details:\n 'QuiverAI SVG generation does not support the `seed` option. The setting was ignored.',\n });\n }\n\n if (mask != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'mask',\n details:\n 'QuiverAI SVG generation does not support masks. The mask was ignored.',\n });\n }\n\n return warnings;\n}\n\n// Limited schemas focused on what is needed for the implementation.\n// This approach limits breakages when the API changes and keeps the\n// response handler efficient.\nconst svgUsageSchema = z.object({\n total_tokens: z.number().int().nonnegative(),\n input_tokens: z.number().int().nonnegative(),\n output_tokens: z.number().int().nonnegative(),\n});\n\nconst svgDocumentSchema = z.object({\n svg: z.string().min(1),\n mime_type: z.literal('image/svg+xml'),\n loop_period_ms: z.number().int().nonnegative().nullish(),\n opening_animation_ms: z.number().int().nonnegative().nullish(),\n});\n\nconst svgGenerationResponseSchema = z.object({\n id: z.string().min(1),\n created: z.number().int().nonnegative(),\n data: z.array(svgDocumentSchema).min(1),\n usage: svgUsageSchema.nullish(),\n credits: z.number().int().nonnegative().nullish(),\n});\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n/**\n * Provider options schema for QuiverAI image generation.\n *\n * @see https://quiver.ai/\n */\nexport const quiveraiImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * The operation to perform. Defaults to `generate`.\n *\n * - `generate`: Text-to-SVG generation. Requires `prompt`.\n * - `vectorize`: Convert an input raster image into an SVG. Requires a\n * single image in `prompt.images` / `files`.\n * - `animate`: Animate an input SVG. Requires a single SVG in\n * `prompt.images` / `files`; the text prompt is optional.\n * - `edit`: Edit a single SVG from `prompt.images` using `prompt.text`\n * as the required instruction.\n */\n operation: z\n .enum(['generate', 'vectorize', 'animate', 'edit'])\n .optional(),\n\n /**\n * Extra style guidance for prompt-based generation.\n */\n instructions: z.string().min(1).optional(),\n\n /**\n * Reasoning effort applied to generation or vectorization.\n */\n reasoningEffort: z.enum(['low', 'medium', 'high', 'xhigh']).optional(),\n\n /**\n * Optional reference images for SVG editing. Use\n * `prepareQuiverAIImageReference` to convert binary inputs.\n */\n referenceImages: z\n .array(\n z.union([\n z.object({ url: z.string().min(1) }).strict(),\n z.object({ base64: z.string().min(1).max(16_777_216) }).strict(),\n ]),\n )\n .max(4)\n .optional(),\n\n /**\n * Maximum number of edit review and redo steps (0-5).\n */\n maxReviewSteps: z.number().int().min(0).max(5).optional(),\n\n /**\n * SVG root attributes requested for generation or vectorization.\n */\n attributes: z\n .object({\n viewBox: z\n .object({\n minX: z.number(),\n minY: z.number(),\n width: z.number().positive(),\n height: z.number().positive(),\n })\n .optional(),\n })\n .optional(),\n\n /**\n * Sampling temperature (0-2).\n */\n temperature: z.number().min(0).max(2).optional(),\n\n /**\n * Nucleus sampling top-p (0-1).\n */\n topP: z.number().min(0).max(1).optional(),\n\n /**\n * Presence penalty (-2 to 2).\n */\n presencePenalty: z.number().min(-2).max(2).nullable().optional(),\n\n /**\n * Maximum number of output tokens (1 - 65536 for Arrow 2 models).\n * The legacy upper bound of 131072 is retained for other model IDs.\n */\n maxOutputTokens: z.number().int().min(1).max(131072).optional(),\n\n /**\n * Provider orchestrator token budget for SVG editing (1-65536).\n */\n orchestratorMaxOutputTokens: z\n .number()\n .int()\n .min(1)\n .max(65536)\n .optional(),\n\n /**\n * Provider shallow edit token budget for SVG editing (1-65536).\n */\n shallowMaxOutputTokens: z.number().int().min(1).max(65536).optional(),\n\n /**\n * Whether to auto-crop the input image before vectorization.\n * Only used when `operation` is `vectorize`.\n */\n autoCrop: z.boolean().optional(),\n\n /**\n * Target canvas size in pixels for vectorization (128 - 4096).\n * Only used when `operation` is `vectorize`.\n */\n targetSize: z.number().int().min(128).max(4096).optional(),\n }),\n ),\n);\n\nexport type QuiverAIImageModelOptions = InferSchema<\n typeof quiveraiImageModelOptionsSchema\n>;\n","import { InvalidArgumentError } from '@ai-sdk/provider';\nimport {\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n detectMediaType,\n} from '@ai-sdk/provider-utils';\n\nconst MAX_REFERENCE_BASE64_LENGTH = 16_777_216;\nconst MAX_REFERENCE_BYTES = 12_582_912;\nconst supportedReferenceMediaTypes = new Set([\n 'image/gif',\n 'image/jpeg',\n 'image/png',\n 'image/svg+xml',\n 'image/webp',\n]);\n\nexport type QuiverAIImageReference =\n | { url: string }\n | {\n /**\n * Base64-encoded image data without a data URL prefix.\n */\n base64: string;\n };\n\nexport type QuiverAIImageReferenceInput =\n | string\n | URL\n | Uint8Array\n | ArrayBuffer;\n\n/**\n * Converts URL, binary, data URL, or base64 image input into the JSON-safe\n * reference shape accepted by QuiverAI provider options.\n */\nexport function prepareQuiverAIImageReference(\n input: QuiverAIImageReferenceInput,\n): QuiverAIImageReference {\n if (input instanceof URL) {\n return { url: validateQuiverAIImageUrl(input.toString()) };\n }\n\n if (typeof input === 'string') {\n if (/^[a-z][a-z\\d+.-]*:\\/\\//i.test(input)) {\n return { url: validateQuiverAIImageUrl(input) };\n }\n\n if (input.startsWith('data:')) {\n const match = /^data:([^;,]+);base64,(.+)$/s.exec(input);\n if (match == null || !supportedReferenceMediaTypes.has(match[1])) {\n throw new InvalidArgumentError({\n argument: 'input',\n message:\n 'QuiverAI reference image data URLs must use base64 encoding and a supported image media type.',\n });\n }\n\n validateQuiverAIReferenceBase64(match[2], 'input');\n return { base64: match[2] };\n }\n\n validateQuiverAIReferenceBase64(input, 'input');\n return { base64: input };\n }\n\n const data =\n input instanceof ArrayBuffer\n ? new Uint8Array(input)\n : new Uint8Array(input);\n validateQuiverAIReferenceBytes(data, 'input');\n return { base64: convertUint8ArrayToBase64(data) };\n}\n\nexport function validateQuiverAIImageUrl(url: string): string {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new InvalidArgumentError({\n argument: 'url',\n message: 'QuiverAI image URLs must be valid HTTP or HTTPS URLs.',\n });\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new InvalidArgumentError({\n argument: 'url',\n message: 'QuiverAI image URLs must use HTTP or HTTPS.',\n });\n }\n\n return parsed.toString();\n}\n\nexport function validateQuiverAIReferenceBase64(\n base64: string,\n argument: string,\n): void {\n if (base64.length === 0 || base64.length > MAX_REFERENCE_BASE64_LENGTH) {\n throw new InvalidArgumentError({\n argument,\n message: `QuiverAI reference images must contain 1-${MAX_REFERENCE_BASE64_LENGTH} base64 characters.`,\n });\n }\n\n let data: Uint8Array;\n try {\n data = convertBase64ToUint8Array(base64);\n } catch (cause) {\n throw new InvalidArgumentError({\n argument,\n message: 'QuiverAI reference image data must be valid base64.',\n cause,\n });\n }\n\n validateQuiverAIReferenceBytes(data, argument);\n}\n\nfunction validateQuiverAIReferenceBytes(\n data: Uint8Array,\n argument: string,\n): void {\n if (data.length === 0 || data.length > MAX_REFERENCE_BYTES) {\n throw new InvalidArgumentError({\n argument,\n message: `QuiverAI reference images must decode to 1-${MAX_REFERENCE_BYTES} bytes.`,\n });\n }\n\n const mediaType = isSvg(data)\n ? 'image/svg+xml'\n : detectMediaType({ data, topLevelType: 'image' });\n\n if (mediaType == null || !supportedReferenceMediaTypes.has(mediaType)) {\n throw new InvalidArgumentError({\n argument,\n message:\n 'QuiverAI reference images must be PNG, JPEG, WebP, GIF, or SVG data.',\n });\n }\n}\n\nfunction isSvg(data: Uint8Array): boolean {\n let text: string;\n try {\n text = new TextDecoder('utf-8', { fatal: true }).decode(data);\n } catch {\n return false;\n }\n\n const normalized = text.replace(/^\\uFEFF/, '').trim();\n return (\n /^(?:<\\?xml[\\s\\S]*?\\?>\\s*)?(?:<!--[\\s\\S]*?-->\\s*)?(?:<!DOCTYPE[\\s\\S]*?>\\s*)?<svg[\\s>]/i.test(\n normalized,\n ) &&\n (/<\\/svg>\\s*$/i.test(normalized) ||\n /<svg(?:\\s[^>]*)?\\/>\\s*$/is.test(normalized))\n );\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["createOpenResponses","_a","_b","InvalidArgumentError","convertBase64ToUint8Array","convertUint8ArrayToBase64","serializeModelOptions","WORKFLOW_DESERIALIZE","WORKFLOW_SERIALIZE","z","z","InvalidArgumentError","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","convertUint8ArrayToBase64","InvalidArgumentError","convertBase64ToUint8Array","isSvg","z","createOpenResponses"]}
|
|
1
|
+
{"version":3,"sources":["../src/quiverai-provider.ts","../src/quiverai-error.ts","../src/quiverai-language-model.ts","../src/quiverai-image-model.ts","../src/quiverai-image-model-options.ts","../src/prepare-quiverai-image-reference.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type ImageModelV4,\n type LanguageModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n createOpenResponses,\n type OpenResponsesProviderSettings,\n} from '@ai-sdk/open-responses';\nimport {\n loadApiKey,\n loadOptionalSetting,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport {\n getQuiverAIResponseErrorMetadata,\n quiveraiFailedResponseHandler,\n} from './quiverai-error';\nimport { QuiverAILanguageModel } from './quiverai-language-model';\nimport { QuiverAIImageModel } from './quiverai-image-model';\nimport type { QuiverAIImageModelId } from './quiverai-image-settings';\nimport type { QuiverAILanguageModelId } from './quiverai-language-model-settings';\nimport { VERSION } from './version';\n\nexport interface QuiverAIProviderSettings {\n /**\n * QuiverAI API key. Default value is taken from the `QUIVERAI_API_KEY`\n * environment variable.\n */\n apiKey?: string;\n\n /**\n * Base URL for the API calls. Defaults to `https://api.quiver.ai/v1` and\n * falls back to the `QUIVERAI_BASE_URL` environment variable.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept\n * requests, or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface QuiverAIProvider extends ProviderV4 {\n /**\n * Creates a language model for the QuiverAI Responses API.\n */\n (modelId: QuiverAILanguageModelId): LanguageModelV4;\n\n /**\n * Creates a language model for the QuiverAI Responses API.\n */\n languageModel(modelId: QuiverAILanguageModelId): LanguageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: QuiverAIImageModelId): ImageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: QuiverAIImageModelId): ImageModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n\n /**\n * QuiverAI caller-executed tools.\n */\n tools: ReturnType<typeof createOpenResponses>['tools'];\n}\n\nconst defaultBaseURL = 'https://api.quiver.ai/v1';\n\nexport function createQuiverAI(\n options: QuiverAIProviderSettings = {},\n): QuiverAIProvider {\n const baseURL =\n withoutTrailingSlash(\n loadOptionalSetting({\n settingValue: options.baseURL,\n environmentVariableName: 'QUIVERAI_BASE_URL',\n }),\n ) ?? defaultBaseURL;\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'QUIVERAI_API_KEY',\n description: 'QuiverAI',\n })}`,\n ...options.headers,\n });\n\n const getImageHeaders = () =>\n withUserAgentSuffix(getHeaders(), `ai-sdk/quiverai/${VERSION}`);\n\n const responsesConfig: OpenResponsesProviderSettings = {\n name: 'quiverai',\n url: `${baseURL}/responses`,\n headers: getHeaders,\n fetch: options.fetch,\n failedResponseHandler: quiveraiFailedResponseHandler,\n getResponseErrorMetadata: getQuiverAIResponseErrorMetadata,\n strictResponseInput: true,\n customToolId: 'quiverai.custom',\n structuredOutputs: false,\n userAgentSuffix: `ai-sdk/quiverai/${VERSION}`,\n };\n const responsesProvider = createOpenResponses(responsesConfig);\n\n const createLanguageModel = (modelId: QuiverAILanguageModelId) =>\n new QuiverAILanguageModel(\n responsesProvider.languageModel(modelId),\n responsesConfig,\n );\n\n const createImageModel = (modelId: QuiverAIImageModelId) =>\n new QuiverAIImageModel(modelId, {\n provider: 'quiverai.image',\n baseURL,\n headers: getImageHeaders,\n fetch: options.fetch,\n });\n\n const embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n });\n };\n\n const provider = function (modelId: QuiverAILanguageModelId) {\n return createLanguageModel(modelId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createLanguageModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.embeddingModel = embeddingModel;\n provider.textEmbeddingModel = embeddingModel;\n provider.tools = responsesProvider.tools;\n\n return provider as QuiverAIProvider;\n}\n\nexport const quiverai = createQuiverAI();\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport type { OpenResponsesProviderSettings } from '@ai-sdk/open-responses';\nimport { z } from 'zod/v4';\n\nconst quiveraiErrorSchema = z.object({\n status: z.number().int(),\n code: z.string().min(1),\n message: z.string().min(1),\n request_id: z.string().min(1),\n});\n\nexport const quiveraiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: quiveraiErrorSchema,\n errorToMessage: error => error.message,\n isRetryable: response => response.status === 429 || response.status >= 500,\n});\n\nexport const getQuiverAIResponseErrorMetadata: NonNullable<\n OpenResponsesProviderSettings['getResponseErrorMetadata']\n> = error => ({\n statusCode:\n typeof error.status_code === 'number' &&\n Number.isInteger(error.status_code) &&\n error.status_code >= 400 &&\n error.status_code <= 599\n ? error.status_code\n : undefined,\n});\n","import {\n InvalidArgumentError,\n type LanguageModelV4,\n type LanguageModelV4CallOptions,\n type LanguageModelV4StreamPart,\n type SharedV4ProviderMetadata,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n createOpenResponses,\n type OpenResponsesProviderSettings,\n} from '@ai-sdk/open-responses';\nimport {\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n} from '@ai-sdk/provider-utils';\nimport {\n getQuiverAIResponseErrorMetadata,\n quiveraiFailedResponseHandler,\n} from './quiverai-error';\n\n/** Applies QuiverAI's request policy while reusing the Open Responses transport. */\nexport class QuiverAILanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n static [WORKFLOW_SERIALIZE](model: QuiverAILanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: OpenResponsesProviderSettings;\n }) {\n // Restore QuiverAI's handlers, which cannot cross workflow boundaries.\n const config: OpenResponsesProviderSettings = {\n ...options.config,\n failedResponseHandler: quiveraiFailedResponseHandler,\n getResponseErrorMetadata: getQuiverAIResponseErrorMetadata,\n };\n\n return new QuiverAILanguageModel(\n createOpenResponses(config).languageModel(options.modelId),\n config,\n );\n }\n\n constructor(\n private readonly model: LanguageModelV4,\n private readonly config: OpenResponsesProviderSettings,\n ) {}\n\n get modelId() {\n return this.model.modelId;\n }\n\n get provider() {\n return this.model.provider;\n }\n\n get supportedUrls() {\n return this.model.supportedUrls;\n }\n\n async doGenerate(options: LanguageModelV4CallOptions) {\n const prepared = prepareQuiverAICall(options);\n const result = await this.model.doGenerate(prepared.options);\n return { ...result, warnings: [...prepared.warnings, ...result.warnings] };\n }\n\n async doStream(options: LanguageModelV4CallOptions) {\n const prepared = prepareQuiverAICall(options);\n const result = await this.model.doStream(prepared.options);\n if (prepared.warnings.length === 0) return result;\n return {\n ...result,\n stream: result.stream.pipeThrough(\n new TransformStream<\n LanguageModelV4StreamPart,\n LanguageModelV4StreamPart\n >({\n transform(part, controller) {\n controller.enqueue(\n part.type === 'stream-start'\n ? {\n ...part,\n warnings: [...prepared.warnings, ...part.warnings],\n }\n : part,\n );\n },\n }),\n ),\n };\n }\n}\n\nfunction prepareQuiverAICall(options: LanguageModelV4CallOptions): {\n options: LanguageModelV4CallOptions;\n warnings: SharedV4Warning[];\n} {\n const { reasoningEffort, reasoningSummary } =\n options.providerOptions?.quiverai ?? {};\n if (\n reasoningEffort != null &&\n (typeof reasoningEffort !== 'string' ||\n !['low', 'medium', 'high', 'xhigh'].includes(reasoningEffort))\n ) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: `Unsupported reasoning effort: ${reasoningEffort}`,\n });\n }\n if (reasoningSummary != null && reasoningSummary !== 'auto') {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: `Unsupported reasoning summary: ${reasoningSummary}`,\n });\n }\n\n const warnings: SharedV4Warning[] = [];\n const omitReasoning = options.reasoning === 'none' && reasoningEffort == null;\n if (omitReasoning) {\n warnings.push({ type: 'unsupported', feature: 'reasoning effort none' });\n }\n\n return {\n warnings,\n options: {\n ...options,\n reasoning: omitReasoning ? undefined : options.reasoning,\n prompt: options.prompt.map(message =>\n message.role !== 'assistant'\n ? message\n : {\n ...message,\n content: message.content.map(part => {\n if (part.type !== 'reasoning') return part;\n const metadata =\n part.providerOptions?.quiverai ??\n (part as { providerMetadata?: SharedV4ProviderMetadata })\n .providerMetadata?.quiverai;\n return {\n ...part,\n text: '',\n providerOptions: {\n ...part.providerOptions,\n quiverai: {\n itemId: metadata?.itemId,\n reasoningSummary: metadata?.reasoningSummary,\n },\n },\n };\n }),\n },\n ),\n },\n };\n}\n","import {\n InvalidArgumentError,\n type ImageModelV4,\n type ImageModelV4CallOptions,\n type ImageModelV4File,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n quiveraiImageModelOptionsSchema,\n type QuiverAIImageModelOptions,\n} from './quiverai-image-model-options';\nimport { quiveraiFailedResponseHandler } from './quiverai-error';\nimport {\n validateQuiverAIImageUrl,\n validateQuiverAIReferenceBase64,\n} from './prepare-quiverai-image-reference';\nimport type {\n QuiverAIImageModelId,\n QuiverAIOperation,\n} from './quiverai-image-settings';\n\ninterface QuiverAIImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: () => Record<string, string>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class QuiverAIImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxImagesPerCall = 16;\n\n get supportsFileInputs(): boolean | undefined {\n return this.modelId === 'arrow-1' ||\n this.modelId === 'arrow-1.1' ||\n this.modelId === 'arrow-1.1-max' ||\n this.modelId === 'arrow-2' ||\n this.modelId === 'arrow-2-telos'\n ? true\n : undefined;\n }\n\n get supportsMaskInputs(): boolean | undefined {\n return this.supportsFileInputs === true ? false : undefined;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: QuiverAIImageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: QuiverAIImageModelId;\n config: QuiverAIImageModelConfig;\n }) {\n return new QuiverAIImageModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: QuiverAIImageModelId,\n private readonly config: QuiverAIImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n files,\n mask,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: ImageModelV4CallOptions): Promise<\n Awaited<ReturnType<ImageModelV4['doGenerate']>>\n > {\n const quiveraiOptions = await parseProviderOptions({\n provider: 'quiverai',\n providerOptions,\n schema: quiveraiImageModelOptionsSchema,\n });\n\n const operation: QuiverAIOperation =\n quiveraiOptions?.operation ?? 'generate';\n\n const warnings = collectWarnings({ size, aspectRatio, seed, mask });\n\n const body = buildRequestBody({\n modelId: this.modelId,\n n,\n prompt,\n files,\n mask,\n operation,\n options: quiveraiOptions ?? {},\n });\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(this.config.headers?.(), headers);\n\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}${getOperationPath(operation)}`,\n headers: combinedHeaders,\n body,\n failedResponseHandler: quiveraiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n svgGenerationResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const encoder = new TextEncoder();\n const images = response.data.map(image => encoder.encode(image.svg));\n\n return {\n images,\n warnings,\n providerMetadata: {\n quiverai: {\n ...(response.credits != null && { credits: response.credits }),\n images: response.data.map((image, index) => ({\n index,\n mimeType: image.mime_type,\n ...(image.loop_period_ms !== undefined && {\n loopPeriodMs: image.loop_period_ms,\n }),\n ...(image.opening_animation_ms !== undefined && {\n openingAnimationMs: image.opening_animation_ms,\n }),\n })),\n },\n },\n response: {\n timestamp: response.created\n ? new Date(response.created * 1000)\n : currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n ...(response.usage && {\n usage: {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n totalTokens: response.usage.total_tokens,\n },\n }),\n };\n }\n}\n\nfunction getOperationPath(operation: QuiverAIOperation) {\n switch (operation) {\n case 'generate':\n return '/svgs/generations';\n case 'vectorize':\n return '/svgs/vectorizations';\n case 'edit':\n return '/svgs/edits';\n case 'animate':\n return '/svgs/animations';\n }\n}\n\nfunction getGenerateReferenceLimit(modelId: string) {\n // Only apply the lower limit to documented Arrow 1.x models. The API\n // enforces model-specific limits within its 16-reference request limit.\n return ['arrow-1', 'arrow-1.0', 'arrow-1.1'].includes(modelId) ? 4 : 16;\n}\n\nfunction toQuiverAIImageReference(image: ImageModelV4File) {\n if (image.type === 'url') {\n return { url: image.url };\n }\n return {\n base64:\n typeof image.data === 'string'\n ? image.data\n : convertUint8ArrayToBase64(image.data),\n };\n}\n\nconst maxAnimationSourceBase64Length = 1_066_668;\n\nfunction toQuiverAIAnimationSource(image: ImageModelV4File) {\n if (image.type === 'url') {\n let url: URL;\n try {\n url = new URL(image.url);\n } catch {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI animate requires a valid HTTP or HTTPS SVG URL.',\n });\n }\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI animate requires an HTTP or HTTPS SVG URL.',\n });\n }\n\n return { url: image.url };\n }\n\n let base64: string;\n let bytes: Uint8Array;\n\n if (typeof image.data === 'string') {\n const dataUrlMatch =\n /^data:image\\/svg\\+xml(?:;[^,]*)?;base64,([\\s\\S]+)$/i.exec(image.data);\n const encodedData = dataUrlMatch?.[1] ?? image.data;\n\n try {\n bytes = convertBase64ToUint8Array(encodedData);\n } catch {\n throw new InvalidArgumentError({\n argument: 'files',\n message:\n 'QuiverAI animate requires the source SVG string to be valid base64 or an SVG data URL.',\n });\n }\n base64 = convertUint8ArrayToBase64(bytes);\n } else {\n bytes = image.data;\n base64 = convertUint8ArrayToBase64(bytes);\n }\n\n if (!isSvg(bytes)) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI animate requires the input file to contain SVG data.',\n });\n }\n\n if (base64.length > maxAnimationSourceBase64Length) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: `QuiverAI animate accepts at most ${maxAnimationSourceBase64Length} base64 characters for the source SVG.`,\n });\n }\n\n return { base64 };\n}\n\nfunction isSvg(data: Uint8Array): boolean {\n const head = new TextDecoder('utf-8', { fatal: false })\n .decode(data.subarray(0, 4096))\n .trimStart();\n\n return /^(?:(?:<\\?xml[\\s\\S]*?\\?>|<!--[\\s\\S]*?-->|<!DOCTYPE[\\s\\S]*?>)\\s*)*<svg(?:\\s|>)/i.test(\n head,\n );\n}\n\nfunction buildRequestBody({\n modelId,\n n,\n prompt,\n files,\n mask,\n operation,\n options,\n}: {\n modelId: string;\n n: number;\n prompt: string | undefined;\n files: ImageModelV4File[] | undefined;\n mask: ImageModelV4File | undefined;\n operation: QuiverAIOperation;\n options: QuiverAIImageModelOptions;\n}) {\n if (\n (modelId === 'arrow-2' || modelId === 'arrow-2-telos') &&\n options.maxOutputTokens != null &&\n options.maxOutputTokens > 65536\n ) {\n throw new InvalidArgumentError({\n argument: 'maxOutputTokens',\n message: `QuiverAI model \"${modelId}\" supports at most 65536 output tokens.`,\n });\n }\n\n const sharedOptions = {\n temperature: options.temperature,\n top_p: options.topP,\n presence_penalty: options.presencePenalty,\n max_output_tokens: options.maxOutputTokens,\n reasoning_effort: options.reasoningEffort,\n attributes: options.attributes,\n stream: false as const,\n };\n\n if (operation !== 'edit') {\n rejectEditOnlyOptions(operation, options);\n }\n\n if (operation === 'generate') {\n if (prompt == null || prompt.trim().length === 0) {\n throw new InvalidArgumentError({\n argument: 'prompt',\n message:\n 'QuiverAI image generation requires a non-empty prompt for generateImage.',\n });\n }\n\n const references = files?.map(toQuiverAIImageReference);\n const maxReferences = getGenerateReferenceLimit(modelId);\n\n if (references != null && references.length > maxReferences) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: `QuiverAI generate supports up to ${maxReferences} reference images for model \"${modelId}\".`,\n });\n }\n\n return {\n model: modelId,\n n,\n prompt,\n ...sharedOptions,\n instructions: options.instructions,\n references,\n };\n }\n\n if (operation === 'edit') {\n return buildEditRequestBody({\n modelId,\n n,\n prompt,\n files,\n mask,\n options,\n });\n }\n\n if (operation === 'animate') {\n return buildAnimationRequestBody({\n modelId,\n n,\n prompt,\n files,\n mask,\n options,\n });\n }\n\n if (files == null || files.length === 0) {\n throw new InvalidArgumentError({\n argument: 'files',\n message:\n 'QuiverAI vectorize requires an input image. Pass an image in the generateImage prompt and set providerOptions.quiverai.operation to \"vectorize\".',\n });\n }\n\n if (files.length > 1) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI vectorize accepts a single input image.',\n });\n }\n\n if (n !== 1) {\n throw new InvalidArgumentError({\n argument: 'n',\n message:\n 'QuiverAI vectorize returns one SVG per request. Set maxImagesPerCall to 1 in generateImage to vectorize multiple times.',\n });\n }\n\n return {\n model: modelId,\n image: toQuiverAIImageReference(files[0]),\n ...sharedOptions,\n auto_crop: options.autoCrop,\n target_size: options.targetSize,\n };\n}\n\nfunction buildAnimationRequestBody({\n modelId,\n n,\n prompt,\n files,\n mask,\n options,\n}: {\n modelId: string;\n n: number;\n prompt: string | undefined;\n files: ImageModelV4File[] | undefined;\n mask: ImageModelV4File | undefined;\n options: QuiverAIImageModelOptions;\n}) {\n if (modelId !== 'arrow-2' && modelId !== 'arrow-2-telos') {\n throw new InvalidArgumentError({\n argument: 'modelId',\n message:\n 'QuiverAI animate is supported by the \"arrow-2\" and \"arrow-2-telos\" models.',\n });\n }\n\n if (files == null || files.length === 0) {\n throw new InvalidArgumentError({\n argument: 'files',\n message:\n 'QuiverAI animate requires exactly one source SVG in prompt.images.',\n });\n }\n\n if (files.length !== 1) {\n throw new InvalidArgumentError({\n argument: 'files',\n message:\n 'QuiverAI animate accepts exactly one source SVG in prompt.images.',\n });\n }\n\n if (n !== 1) {\n throw new InvalidArgumentError({\n argument: 'n',\n message:\n 'QuiverAI animate returns one SVG per request. Set maxImagesPerCall to 1 in generateImage to animate multiple times.',\n });\n }\n\n if (mask != null) {\n throw new InvalidArgumentError({\n argument: 'mask',\n message: 'QuiverAI animate does not support masks.',\n });\n }\n\n if (prompt != null && prompt.trim().length === 0) {\n throw new InvalidArgumentError({\n argument: 'prompt',\n message:\n 'QuiverAI animate requires a non-empty prompt when an animation instruction is provided.',\n });\n }\n\n const unsupportedOptions = [\n ['instructions', options.instructions],\n ['topP', options.topP],\n ['presencePenalty', options.presencePenalty],\n ['attributes', options.attributes],\n ['autoCrop', options.autoCrop],\n ['targetSize', options.targetSize],\n ].filter((option): option is [string, NonNullable<unknown>] => {\n return option[1] !== undefined;\n });\n\n if (unsupportedOptions.length > 0) {\n throw new InvalidArgumentError({\n argument: `providerOptions.quiverai.${unsupportedOptions[0][0]}`,\n message: `QuiverAI animate does not support providerOptions.quiverai.${unsupportedOptions[0][0]}.`,\n });\n }\n\n return {\n model: modelId,\n svg_source: toQuiverAIAnimationSource(files[0]),\n prompt,\n temperature: options.temperature,\n max_output_tokens: options.maxOutputTokens,\n reasoning_effort: options.reasoningEffort,\n stream: false as const,\n };\n}\n\nconst editModelIds = new Set(['arrow-2', 'arrow-2-telos']);\nconst MAX_EDIT_SVG_BYTES = 200_000;\n\nfunction buildEditRequestBody({\n modelId,\n n,\n prompt,\n files,\n mask,\n options,\n}: {\n modelId: string;\n n: number;\n prompt: string | undefined;\n files: ImageModelV4File[] | undefined;\n mask: ImageModelV4File | undefined;\n options: QuiverAIImageModelOptions;\n}) {\n if (!editModelIds.has(modelId)) {\n throw new InvalidArgumentError({\n argument: 'modelId',\n message:\n 'QuiverAI SVG editing is supported by the \"arrow-2\" and \"arrow-2-telos\" models.',\n });\n }\n\n if (prompt == null || prompt.trim().length === 0) {\n throw new InvalidArgumentError({\n argument: 'prompt',\n message:\n 'QuiverAI SVG editing requires a non-empty instruction in generateImage prompt.text.',\n });\n }\n\n if (prompt.length > 4000) {\n throw new InvalidArgumentError({\n argument: 'prompt',\n message:\n 'QuiverAI SVG editing instructions must contain at most 4000 characters.',\n });\n }\n\n if (files == null || files.length === 0) {\n throw new InvalidArgumentError({\n argument: 'files',\n message:\n 'QuiverAI SVG editing requires one source SVG in generateImage prompt.images.',\n });\n }\n\n if (files.length !== 1) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI SVG editing accepts exactly one source SVG.',\n });\n }\n\n if (n !== 1) {\n throw new InvalidArgumentError({\n argument: 'n',\n message:\n 'QuiverAI SVG editing returns exactly one SVG per request. Set maxImagesPerCall to 1 in generateImage to edit multiple times.',\n });\n }\n\n if (mask != null) {\n throw new InvalidArgumentError({\n argument: 'mask',\n message: 'QuiverAI SVG editing does not support masks.',\n });\n }\n\n const unsupportedOptions = [\n ['instructions', options.instructions],\n ['attributes', options.attributes],\n ['topP', options.topP],\n ['presencePenalty', options.presencePenalty],\n ['autoCrop', options.autoCrop],\n ['targetSize', options.targetSize],\n ].flatMap(([name, value]) => (value == null ? [] : [name]));\n\n if (unsupportedOptions.length > 0) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: `QuiverAI SVG editing does not support these provider options: ${unsupportedOptions.join(\n ', ',\n )}.`,\n });\n }\n\n const referenceImages = options.referenceImages?.map((reference, index) => {\n if ('url' in reference) {\n return {\n url: validateQuiverAIImageUrl(reference.url),\n };\n }\n\n validateQuiverAIReferenceBase64(\n reference.base64,\n `providerOptions.quiverai.referenceImages[${index}]`,\n );\n return { base64: reference.base64 };\n });\n const settings = {\n max_output_tokens: options.maxOutputTokens,\n orchestrator_max_output_tokens: options.orchestratorMaxOutputTokens,\n shallow_max_output_tokens: options.shallowMaxOutputTokens,\n temperature: options.temperature,\n };\n const hasSettings = Object.values(settings).some(value => value != null);\n\n return {\n model: modelId,\n prompt,\n ...toQuiverAIEditSource(files[0]),\n reference_images: referenceImages,\n max_review_steps: options.maxReviewSteps,\n reasoning_effort: options.reasoningEffort,\n ...(hasSettings && { settings }),\n stream: false as const,\n };\n}\n\nfunction rejectEditOnlyOptions(\n operation: Exclude<QuiverAIOperation, 'edit'>,\n options: QuiverAIImageModelOptions,\n) {\n const editOnlyOptions = [\n ['referenceImages', options.referenceImages],\n ['maxReviewSteps', options.maxReviewSteps],\n ['orchestratorMaxOutputTokens', options.orchestratorMaxOutputTokens],\n ['shallowMaxOutputTokens', options.shallowMaxOutputTokens],\n ].flatMap(([name, value]) => (value == null ? [] : [name]));\n\n if (editOnlyOptions.length > 0) {\n throw new InvalidArgumentError({\n argument: 'providerOptions',\n message: `QuiverAI ${operation} does not support these edit-only provider options: ${editOnlyOptions.join(\n ', ',\n )}.`,\n });\n }\n}\n\nfunction toQuiverAIEditSource(file: ImageModelV4File) {\n if (file.type === 'url') {\n return {\n svg_source: {\n url: validateQuiverAIImageUrl(file.url),\n },\n };\n }\n\n let data: Uint8Array;\n try {\n data =\n typeof file.data === 'string'\n ? convertBase64ToUint8Array(file.data)\n : file.data;\n } catch (cause) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI SVG source data must be valid base64 or binary data.',\n cause,\n });\n }\n\n if (data.length === 0 || data.length > MAX_EDIT_SVG_BYTES) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: `QuiverAI SVG source data must contain 1-${MAX_EDIT_SVG_BYTES} bytes.`,\n });\n }\n\n let svg: string;\n try {\n svg = new TextDecoder('utf-8', { fatal: true }).decode(data);\n } catch (cause) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI SVG source data must be valid UTF-8.',\n cause,\n });\n }\n\n if (svg.length > MAX_EDIT_SVG_BYTES || !isSvgMarkup(svg)) {\n throw new InvalidArgumentError({\n argument: 'files',\n message: 'QuiverAI SVG source data must contain a complete SVG document.',\n });\n }\n\n return {\n svg_source: {\n base64: convertUint8ArrayToBase64(data),\n },\n };\n}\n\nfunction isSvgMarkup(svg: string) {\n const document = svg.replace(/^\\uFEFF/, '');\n const elements: string[] = [];\n let position = 0;\n let rootSeen = false;\n let rootClosed = false;\n let doctypeSeen = false;\n\n while (position < document.length) {\n if (document[position] !== '<') {\n const nextTag = document.indexOf('<', position);\n const end = nextTag === -1 ? document.length : nextTag;\n const text = document.slice(position, end);\n\n if (\n (elements.length === 0 && text.trim().length > 0) ||\n text.includes(']]>') ||\n !hasValidXmlReferences(text)\n ) {\n return false;\n }\n\n position = end;\n continue;\n }\n\n if (document.startsWith('<!--', position)) {\n const commentEnd = document.indexOf('-->', position + 4);\n if (\n commentEnd === -1 ||\n document.slice(position + 4, commentEnd).includes('--')\n ) {\n return false;\n }\n position = commentEnd + 3;\n continue;\n }\n\n if (document.startsWith('<?', position)) {\n const instructionEnd = document.indexOf('?>', position + 2);\n if (instructionEnd === -1) {\n return false;\n }\n position = instructionEnd + 2;\n continue;\n }\n\n if (document.startsWith('<![CDATA[', position)) {\n if (elements.length === 0) {\n return false;\n }\n const cdataEnd = document.indexOf(']]>', position + 9);\n if (cdataEnd === -1) {\n return false;\n }\n position = cdataEnd + 3;\n continue;\n }\n\n if (document.slice(position, position + 9).toUpperCase() === '<!DOCTYPE') {\n if (\n rootSeen ||\n doctypeSeen ||\n elements.length > 0 ||\n !/[\\t\\n\\r ]/.test(document[position + 9] ?? '')\n ) {\n return false;\n }\n const doctypeName = readXmlName(\n document,\n skipXmlWhitespace(document, position + 9),\n );\n if (doctypeName?.name.toLowerCase() !== 'svg') {\n return false;\n }\n const doctypeEnd = findDoctypeEnd(document, doctypeName.end);\n if (doctypeEnd === -1) {\n return false;\n }\n doctypeSeen = true;\n position = doctypeEnd;\n continue;\n }\n\n if (document.startsWith('<!', position)) {\n return false;\n }\n\n if (document.startsWith('</', position)) {\n const closingTag = readXmlName(document, position + 2);\n if (closingTag == null) {\n return false;\n }\n let tagEnd = skipXmlWhitespace(document, closingTag.end);\n if (document[tagEnd] !== '>') {\n return false;\n }\n const expectedTag = elements.pop();\n if (expectedTag !== closingTag.name) {\n return false;\n }\n tagEnd += 1;\n if (elements.length === 0) {\n rootClosed = true;\n }\n position = tagEnd;\n continue;\n }\n\n if (rootClosed) {\n return false;\n }\n\n const openingTag = readXmlName(document, position + 1);\n if (openingTag == null) {\n return false;\n }\n if (!rootSeen) {\n if (openingTag.name.toLowerCase() !== 'svg') {\n return false;\n }\n rootSeen = true;\n }\n\n const attributes = new Set<string>();\n let tagPosition = openingTag.end;\n while (tagPosition < document.length) {\n const beforeWhitespace = tagPosition;\n tagPosition = skipXmlWhitespace(document, tagPosition);\n\n if (document.startsWith('/>', tagPosition)) {\n tagPosition += 2;\n if (elements.length === 0) {\n rootClosed = true;\n }\n position = tagPosition;\n break;\n }\n\n if (document[tagPosition] === '>') {\n elements.push(openingTag.name);\n position = tagPosition + 1;\n break;\n }\n\n if (tagPosition === beforeWhitespace) {\n return false;\n }\n\n const attribute = readXmlName(document, tagPosition);\n if (attribute == null || attributes.has(attribute.name)) {\n return false;\n }\n attributes.add(attribute.name);\n\n tagPosition = skipXmlWhitespace(document, attribute.end);\n if (document[tagPosition] !== '=') {\n return false;\n }\n tagPosition = skipXmlWhitespace(document, tagPosition + 1);\n\n const quote = document[tagPosition];\n if (quote !== '\"' && quote !== \"'\") {\n return false;\n }\n const valueEnd = document.indexOf(quote, tagPosition + 1);\n if (\n valueEnd === -1 ||\n document.slice(tagPosition + 1, valueEnd).includes('<') ||\n !hasValidXmlReferences(document.slice(tagPosition + 1, valueEnd))\n ) {\n return false;\n }\n tagPosition = valueEnd + 1;\n }\n\n if (tagPosition >= document.length && position !== document.length) {\n return false;\n }\n }\n\n return rootSeen && rootClosed && elements.length === 0;\n}\n\nfunction isXmlNameStart(character: string | undefined) {\n return character != null && /[A-Z_a-z:\\u0080-\\uFFFF]/.test(character);\n}\n\nfunction isXmlNameCharacter(character: string | undefined) {\n return (\n character != null && /[-.0-9A-Z_a-z:\\u00B7\\u0080-\\uFFFF]/.test(character)\n );\n}\n\nfunction readXmlName(value: string, position: number) {\n if (!isXmlNameStart(value[position])) {\n return undefined;\n }\n\n const start = position;\n position += 1;\n while (isXmlNameCharacter(value[position])) {\n position += 1;\n }\n\n return {\n name: value.slice(start, position),\n end: position,\n };\n}\n\nfunction skipXmlWhitespace(value: string, position: number) {\n while (/[\\t\\n\\r ]/.test(value[position] ?? '')) {\n position += 1;\n }\n return position;\n}\n\nfunction hasValidXmlReferences(value: string) {\n let position = value.indexOf('&');\n while (position !== -1) {\n const end = value.indexOf(';', position + 1);\n if (end === -1) {\n return false;\n }\n const reference = value.slice(position + 1, end);\n if (\n !/^#\\d+$/.test(reference) &&\n !/^#x[\\dA-Fa-f]+$/.test(reference) &&\n !/^[A-Z_a-z:\\u0080-\\uFFFF][-.0-9A-Z_a-z:\\u00B7\\u0080-\\uFFFF]*$/.test(\n reference,\n )\n ) {\n return false;\n }\n position = value.indexOf('&', end + 1);\n }\n return true;\n}\n\nfunction findDoctypeEnd(value: string, position: number) {\n let subsetDepth = 0;\n let quote: '\"' | \"'\" | undefined;\n\n while (position < value.length) {\n const character = value[position];\n if (quote != null) {\n if (character === quote) {\n quote = undefined;\n }\n } else if (character === '\"' || character === \"'\") {\n quote = character;\n } else if (character === '[') {\n subsetDepth += 1;\n } else if (character === ']') {\n if (subsetDepth === 0) {\n return -1;\n }\n subsetDepth -= 1;\n } else if (character === '>' && subsetDepth === 0) {\n return position + 1;\n }\n position += 1;\n }\n\n return -1;\n}\n\nfunction collectWarnings({\n size,\n aspectRatio,\n seed,\n mask,\n}: {\n size: `${number}x${number}` | undefined;\n aspectRatio: `${number}:${number}` | undefined;\n seed: number | undefined;\n mask: ImageModelV4File | undefined;\n}): SharedV4Warning[] {\n const warnings: SharedV4Warning[] = [];\n\n if (size != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details:\n 'QuiverAI SVG generation does not support the `size` option. The setting was ignored.',\n });\n }\n\n if (aspectRatio != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'QuiverAI SVG generation does not support the `aspectRatio` option. The setting was ignored.',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'seed',\n details:\n 'QuiverAI SVG generation does not support the `seed` option. The setting was ignored.',\n });\n }\n\n if (mask != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'mask',\n details:\n 'QuiverAI SVG generation does not support masks. The mask was ignored.',\n });\n }\n\n return warnings;\n}\n\n// Limited schemas focused on what is needed for the implementation.\n// This approach limits breakages when the API changes and keeps the\n// response handler efficient.\nconst svgUsageSchema = z.object({\n total_tokens: z.number().int().nonnegative(),\n input_tokens: z.number().int().nonnegative(),\n output_tokens: z.number().int().nonnegative(),\n});\n\nconst svgDocumentSchema = z.object({\n svg: z.string().min(1),\n mime_type: z.literal('image/svg+xml'),\n loop_period_ms: z.number().int().nonnegative().nullish(),\n opening_animation_ms: z.number().int().nonnegative().nullish(),\n});\n\nconst svgGenerationResponseSchema = z.object({\n id: z.string().min(1),\n created: z.number().int().nonnegative(),\n data: z.array(svgDocumentSchema).min(1),\n usage: svgUsageSchema.nullish(),\n credits: z.number().int().nonnegative().nullish(),\n});\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n/**\n * Provider options schema for QuiverAI image generation.\n *\n * @see https://quiver.ai/\n */\nexport const quiveraiImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * The operation to perform. Defaults to `generate`.\n *\n * - `generate`: Text-to-SVG generation. Requires `prompt`.\n * - `vectorize`: Convert an input raster image into an SVG. Requires a\n * single image in `prompt.images` / `files`.\n * - `animate`: Animate an input SVG. Requires a single SVG in\n * `prompt.images` / `files`; the text prompt is optional.\n * - `edit`: Edit a single SVG from `prompt.images` using `prompt.text`\n * as the required instruction.\n */\n operation: z\n .enum(['generate', 'vectorize', 'animate', 'edit'])\n .optional(),\n\n /**\n * Extra style guidance for prompt-based generation.\n */\n instructions: z.string().min(1).optional(),\n\n /**\n * Reasoning effort applied to generation or vectorization.\n */\n reasoningEffort: z.enum(['low', 'medium', 'high', 'xhigh']).optional(),\n\n /**\n * Optional reference images for SVG editing. Use\n * `prepareQuiverAIImageReference` to convert binary inputs.\n */\n referenceImages: z\n .array(\n z.union([\n z.object({ url: z.string().min(1) }).strict(),\n z.object({ base64: z.string().min(1).max(16_777_216) }).strict(),\n ]),\n )\n .max(4)\n .optional(),\n\n /**\n * Maximum number of edit review and redo steps (0-5).\n */\n maxReviewSteps: z.number().int().min(0).max(5).optional(),\n\n /**\n * SVG root attributes requested for generation or vectorization.\n */\n attributes: z\n .object({\n viewBox: z\n .object({\n minX: z.number(),\n minY: z.number(),\n width: z.number().positive(),\n height: z.number().positive(),\n })\n .optional(),\n })\n .optional(),\n\n /**\n * Sampling temperature (0-2).\n */\n temperature: z.number().min(0).max(2).optional(),\n\n /**\n * Nucleus sampling top-p (0-1).\n */\n topP: z.number().min(0).max(1).optional(),\n\n /**\n * Presence penalty (-2 to 2).\n */\n presencePenalty: z.number().min(-2).max(2).nullable().optional(),\n\n /**\n * Maximum number of output tokens (1 - 65536 for Arrow 2 models).\n * The legacy upper bound of 131072 is retained for other model IDs.\n */\n maxOutputTokens: z.number().int().min(1).max(131072).optional(),\n\n /**\n * Provider orchestrator token budget for SVG editing (1-65536).\n */\n orchestratorMaxOutputTokens: z\n .number()\n .int()\n .min(1)\n .max(65536)\n .optional(),\n\n /**\n * Provider shallow edit token budget for SVG editing (1-65536).\n */\n shallowMaxOutputTokens: z.number().int().min(1).max(65536).optional(),\n\n /**\n * Whether to auto-crop the input image before vectorization.\n * Only used when `operation` is `vectorize`.\n */\n autoCrop: z.boolean().optional(),\n\n /**\n * Target canvas size in pixels for vectorization (128 - 4096).\n * Only used when `operation` is `vectorize`.\n */\n targetSize: z.number().int().min(128).max(4096).optional(),\n }),\n ),\n);\n\nexport type QuiverAIImageModelOptions = InferSchema<\n typeof quiveraiImageModelOptionsSchema\n>;\n","import { InvalidArgumentError } from '@ai-sdk/provider';\nimport {\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n detectMediaType,\n} from '@ai-sdk/provider-utils';\n\nconst MAX_REFERENCE_BASE64_LENGTH = 16_777_216;\nconst MAX_REFERENCE_BYTES = 12_582_912;\nconst supportedReferenceMediaTypes = new Set([\n 'image/gif',\n 'image/jpeg',\n 'image/png',\n 'image/svg+xml',\n 'image/webp',\n]);\n\nexport type QuiverAIImageReference =\n | { url: string }\n | {\n /**\n * Base64-encoded image data without a data URL prefix.\n */\n base64: string;\n };\n\nexport type QuiverAIImageReferenceInput =\n | string\n | URL\n | Uint8Array\n | ArrayBuffer;\n\n/**\n * Converts URL, binary, data URL, or base64 image input into the JSON-safe\n * reference shape accepted by QuiverAI provider options.\n */\nexport function prepareQuiverAIImageReference(\n input: QuiverAIImageReferenceInput,\n): QuiverAIImageReference {\n if (input instanceof URL) {\n return { url: validateQuiverAIImageUrl(input.toString()) };\n }\n\n if (typeof input === 'string') {\n if (/^[a-z][a-z\\d+.-]*:\\/\\//i.test(input)) {\n return { url: validateQuiverAIImageUrl(input) };\n }\n\n if (input.startsWith('data:')) {\n const match = /^data:([^;,]+);base64,(.+)$/s.exec(input);\n if (match == null || !supportedReferenceMediaTypes.has(match[1])) {\n throw new InvalidArgumentError({\n argument: 'input',\n message:\n 'QuiverAI reference image data URLs must use base64 encoding and a supported image media type.',\n });\n }\n\n validateQuiverAIReferenceBase64(match[2], 'input');\n return { base64: match[2] };\n }\n\n validateQuiverAIReferenceBase64(input, 'input');\n return { base64: input };\n }\n\n const data =\n input instanceof ArrayBuffer\n ? new Uint8Array(input)\n : new Uint8Array(input);\n validateQuiverAIReferenceBytes(data, 'input');\n return { base64: convertUint8ArrayToBase64(data) };\n}\n\nexport function validateQuiverAIImageUrl(url: string): string {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new InvalidArgumentError({\n argument: 'url',\n message: 'QuiverAI image URLs must be valid HTTP or HTTPS URLs.',\n });\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new InvalidArgumentError({\n argument: 'url',\n message: 'QuiverAI image URLs must use HTTP or HTTPS.',\n });\n }\n\n return parsed.toString();\n}\n\nexport function validateQuiverAIReferenceBase64(\n base64: string,\n argument: string,\n): void {\n if (base64.length === 0 || base64.length > MAX_REFERENCE_BASE64_LENGTH) {\n throw new InvalidArgumentError({\n argument,\n message: `QuiverAI reference images must contain 1-${MAX_REFERENCE_BASE64_LENGTH} base64 characters.`,\n });\n }\n\n let data: Uint8Array;\n try {\n data = convertBase64ToUint8Array(base64);\n } catch (cause) {\n throw new InvalidArgumentError({\n argument,\n message: 'QuiverAI reference image data must be valid base64.',\n cause,\n });\n }\n\n validateQuiverAIReferenceBytes(data, argument);\n}\n\nfunction validateQuiverAIReferenceBytes(\n data: Uint8Array,\n argument: string,\n): void {\n if (data.length === 0 || data.length > MAX_REFERENCE_BYTES) {\n throw new InvalidArgumentError({\n argument,\n message: `QuiverAI reference images must decode to 1-${MAX_REFERENCE_BYTES} bytes.`,\n });\n }\n\n const mediaType = isSvg(data)\n ? 'image/svg+xml'\n : detectMediaType({ data, topLevelType: 'image' });\n\n if (mediaType == null || !supportedReferenceMediaTypes.has(mediaType)) {\n throw new InvalidArgumentError({\n argument,\n message:\n 'QuiverAI reference images must be PNG, JPEG, WebP, GIF, or SVG data.',\n });\n }\n}\n\nfunction isSvg(data: Uint8Array): boolean {\n let text: string;\n try {\n text = new TextDecoder('utf-8', { fatal: true }).decode(data);\n } catch {\n return false;\n }\n\n const normalized = text.replace(/^\\uFEFF/, '').trim();\n return (\n /^(?:<\\?xml[\\s\\S]*?\\?>\\s*)?(?:<!--[\\s\\S]*?-->\\s*)?(?:<!DOCTYPE[\\s\\S]*?>\\s*)?<svg[\\s>]/i.test(\n normalized,\n ) &&\n (/<\\/svg>\\s*$/i.test(normalized) ||\n /<svg(?:\\s[^>]*)?\\/>\\s*$/is.test(normalized))\n );\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["createOpenResponses","InvalidArgumentError","convertBase64ToUint8Array","convertUint8ArrayToBase64","serializeModelOptions","WORKFLOW_DESERIALIZE","WORKFLOW_SERIALIZE","z","z","InvalidArgumentError","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","convertUint8ArrayToBase64","InvalidArgumentError","convertBase64ToUint8Array","isSvg","z","createOpenResponses"]}
|
package/docs/180-quiverai.mdx
CHANGED
|
@@ -206,6 +206,12 @@ QuiverAI supports the following Arrow models:
|
|
|
206
206
|
| `arrow-1.1` | Improved text-to-SVG model. Accepts up to 4 reference images. |
|
|
207
207
|
| `arrow-1.1-max` | Higher quality variant with extended context. Accepts up to 16 reference images. |
|
|
208
208
|
|
|
209
|
+
All models in this table advertise `supportsFileInputs: true` and
|
|
210
|
+
`supportsMaskInputs: false`. Other model IDs leave both capabilities unknown.
|
|
211
|
+
File-input support includes reference images for generation; SVG editing and
|
|
212
|
+
animation still require the corresponding `providerOptions.quiverai.operation`,
|
|
213
|
+
supported input formats, and access to that operation for your API key.
|
|
214
|
+
|
|
209
215
|
### Provider Options
|
|
210
216
|
|
|
211
217
|
You can fine-tune the request using `providerOptions.quiverai`:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/quiverai",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.51",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -29,15 +29,15 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@ai-sdk/open-responses": "2.0.
|
|
33
|
-
"@ai-sdk/provider": "4.0.
|
|
34
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
32
|
+
"@ai-sdk/open-responses": "2.0.55",
|
|
33
|
+
"@ai-sdk/provider": "4.0.19",
|
|
34
|
+
"@ai-sdk/provider-utils": "5.0.50"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@ai-sdk/test-server": "2.0.
|
|
37
|
+
"@ai-sdk/test-server": "2.0.2",
|
|
38
38
|
"@types/node": "22.19.19",
|
|
39
39
|
"@vercel/ai-tsconfig": "0.0.0",
|
|
40
|
-
"ai": "7.0.
|
|
40
|
+
"ai": "7.0.119",
|
|
41
41
|
"tsup": "^8.5.1",
|
|
42
42
|
"typescript": "5.8.3",
|
|
43
43
|
"zod": "3.25.76"
|
|
@@ -46,6 +46,20 @@ export class QuiverAIImageModel implements ImageModelV4 {
|
|
|
46
46
|
readonly specificationVersion = 'v4';
|
|
47
47
|
readonly maxImagesPerCall = 16;
|
|
48
48
|
|
|
49
|
+
get supportsFileInputs(): boolean | undefined {
|
|
50
|
+
return this.modelId === 'arrow-1' ||
|
|
51
|
+
this.modelId === 'arrow-1.1' ||
|
|
52
|
+
this.modelId === 'arrow-1.1-max' ||
|
|
53
|
+
this.modelId === 'arrow-2' ||
|
|
54
|
+
this.modelId === 'arrow-2-telos'
|
|
55
|
+
? true
|
|
56
|
+
: undefined;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
get supportsMaskInputs(): boolean | undefined {
|
|
60
|
+
return this.supportsFileInputs === true ? false : undefined;
|
|
61
|
+
}
|
|
62
|
+
|
|
49
63
|
get provider(): string {
|
|
50
64
|
return this.config.provider;
|
|
51
65
|
}
|