@ai-sdk/anthropic 2.0.0-alpha.10 → 2.0.0-alpha.12
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 +18 -0
- package/dist/index.js +169 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +169 -11
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.d.mts +1 -0
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal/index.js +169 -11
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +169 -11
- package/dist/internal/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.mjs
CHANGED
|
@@ -48,6 +48,29 @@ var webSearchLocationSchema = z2.object({
|
|
|
48
48
|
country: z2.string(),
|
|
49
49
|
timezone: z2.string().optional()
|
|
50
50
|
});
|
|
51
|
+
var anthropicFilePartProviderOptions = z2.object({
|
|
52
|
+
/**
|
|
53
|
+
* Citation configuration for this document.
|
|
54
|
+
* When enabled, this document will generate citations in the response.
|
|
55
|
+
*/
|
|
56
|
+
citations: z2.object({
|
|
57
|
+
/**
|
|
58
|
+
* Enable citations for this document
|
|
59
|
+
*/
|
|
60
|
+
enabled: z2.boolean()
|
|
61
|
+
}).optional(),
|
|
62
|
+
/**
|
|
63
|
+
* Custom title for the document.
|
|
64
|
+
* If not provided, the filename will be used.
|
|
65
|
+
*/
|
|
66
|
+
title: z2.string().optional(),
|
|
67
|
+
/**
|
|
68
|
+
* Context about the document that will be passed to the model
|
|
69
|
+
* but not used towards cited content.
|
|
70
|
+
* Useful for storing document metadata as text or stringified JSON.
|
|
71
|
+
*/
|
|
72
|
+
context: z2.string().optional()
|
|
73
|
+
});
|
|
51
74
|
var anthropicProviderOptions = z2.object({
|
|
52
75
|
/**
|
|
53
76
|
Include reasoning content in requests sent to the model. Defaults to `true`.
|
|
@@ -229,7 +252,7 @@ async function convertToAnthropicMessagesPrompt({
|
|
|
229
252
|
sendReasoning,
|
|
230
253
|
warnings
|
|
231
254
|
}) {
|
|
232
|
-
var _a, _b, _c;
|
|
255
|
+
var _a, _b, _c, _d;
|
|
233
256
|
const betas = /* @__PURE__ */ new Set();
|
|
234
257
|
const blocks = groupIntoBlocks(prompt);
|
|
235
258
|
let system = void 0;
|
|
@@ -240,6 +263,26 @@ async function convertToAnthropicMessagesPrompt({
|
|
|
240
263
|
const cacheControlValue = (_a2 = anthropic2 == null ? void 0 : anthropic2.cacheControl) != null ? _a2 : anthropic2 == null ? void 0 : anthropic2.cache_control;
|
|
241
264
|
return cacheControlValue;
|
|
242
265
|
}
|
|
266
|
+
async function shouldEnableCitations(providerMetadata) {
|
|
267
|
+
var _a2, _b2;
|
|
268
|
+
const anthropicOptions = await parseProviderOptions({
|
|
269
|
+
provider: "anthropic",
|
|
270
|
+
providerOptions: providerMetadata,
|
|
271
|
+
schema: anthropicFilePartProviderOptions
|
|
272
|
+
});
|
|
273
|
+
return (_b2 = (_a2 = anthropicOptions == null ? void 0 : anthropicOptions.citations) == null ? void 0 : _a2.enabled) != null ? _b2 : false;
|
|
274
|
+
}
|
|
275
|
+
async function getDocumentMetadata(providerMetadata) {
|
|
276
|
+
const anthropicOptions = await parseProviderOptions({
|
|
277
|
+
provider: "anthropic",
|
|
278
|
+
providerOptions: providerMetadata,
|
|
279
|
+
schema: anthropicFilePartProviderOptions
|
|
280
|
+
});
|
|
281
|
+
return {
|
|
282
|
+
title: anthropicOptions == null ? void 0 : anthropicOptions.title,
|
|
283
|
+
context: anthropicOptions == null ? void 0 : anthropicOptions.context
|
|
284
|
+
};
|
|
285
|
+
}
|
|
243
286
|
for (let i = 0; i < blocks.length; i++) {
|
|
244
287
|
const block = blocks[i];
|
|
245
288
|
const isLastBlock = i === blocks.length - 1;
|
|
@@ -293,6 +336,12 @@ async function convertToAnthropicMessagesPrompt({
|
|
|
293
336
|
});
|
|
294
337
|
} else if (part.mediaType === "application/pdf") {
|
|
295
338
|
betas.add("pdfs-2024-09-25");
|
|
339
|
+
const enableCitations = await shouldEnableCitations(
|
|
340
|
+
part.providerOptions
|
|
341
|
+
);
|
|
342
|
+
const metadata = await getDocumentMetadata(
|
|
343
|
+
part.providerOptions
|
|
344
|
+
);
|
|
296
345
|
anthropicContent.push({
|
|
297
346
|
type: "document",
|
|
298
347
|
source: part.data instanceof URL ? {
|
|
@@ -303,6 +352,11 @@ async function convertToAnthropicMessagesPrompt({
|
|
|
303
352
|
media_type: "application/pdf",
|
|
304
353
|
data: convertToBase64(part.data)
|
|
305
354
|
},
|
|
355
|
+
title: (_b = metadata.title) != null ? _b : part.filename,
|
|
356
|
+
...metadata.context && { context: metadata.context },
|
|
357
|
+
...enableCitations && {
|
|
358
|
+
citations: { enabled: true }
|
|
359
|
+
},
|
|
306
360
|
cache_control: cacheControl
|
|
307
361
|
});
|
|
308
362
|
} else {
|
|
@@ -320,7 +374,7 @@ async function convertToAnthropicMessagesPrompt({
|
|
|
320
374
|
for (let i2 = 0; i2 < content.length; i2++) {
|
|
321
375
|
const part = content[i2];
|
|
322
376
|
const isLastPart = i2 === content.length - 1;
|
|
323
|
-
const cacheControl = (
|
|
377
|
+
const cacheControl = (_c = getCacheControl(part.providerOptions)) != null ? _c : isLastPart ? getCacheControl(message.providerOptions) : void 0;
|
|
324
378
|
const toolResultContent = part.content != null ? part.content.map((part2) => {
|
|
325
379
|
var _a2;
|
|
326
380
|
switch (part2.type) {
|
|
@@ -370,7 +424,7 @@ async function convertToAnthropicMessagesPrompt({
|
|
|
370
424
|
for (let k = 0; k < content.length; k++) {
|
|
371
425
|
const part = content[k];
|
|
372
426
|
const isLastContentPart = k === content.length - 1;
|
|
373
|
-
const cacheControl = (
|
|
427
|
+
const cacheControl = (_d = getCacheControl(part.providerOptions)) != null ? _d : isLastContentPart ? getCacheControl(message.providerOptions) : void 0;
|
|
374
428
|
switch (part.type) {
|
|
375
429
|
case "text": {
|
|
376
430
|
anthropicContent.push({
|
|
@@ -519,6 +573,40 @@ function mapAnthropicStopReason({
|
|
|
519
573
|
}
|
|
520
574
|
|
|
521
575
|
// src/anthropic-messages-language-model.ts
|
|
576
|
+
function processPageLocationCitation(citation, citationDocuments, generateId3, onSource) {
|
|
577
|
+
if (citation.type === "page_location") {
|
|
578
|
+
const source = createCitationSource(
|
|
579
|
+
citation,
|
|
580
|
+
citationDocuments,
|
|
581
|
+
generateId3
|
|
582
|
+
);
|
|
583
|
+
if (source) {
|
|
584
|
+
onSource(source);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
function createCitationSource(citation, citationDocuments, generateId3) {
|
|
589
|
+
var _a;
|
|
590
|
+
const documentInfo = citationDocuments[citation.document_index];
|
|
591
|
+
if (!documentInfo) {
|
|
592
|
+
return null;
|
|
593
|
+
}
|
|
594
|
+
return {
|
|
595
|
+
type: "source",
|
|
596
|
+
sourceType: "document",
|
|
597
|
+
id: generateId3(),
|
|
598
|
+
mediaType: documentInfo.mediaType,
|
|
599
|
+
title: (_a = citation.document_title) != null ? _a : documentInfo.title,
|
|
600
|
+
filename: documentInfo.filename,
|
|
601
|
+
providerMetadata: {
|
|
602
|
+
anthropic: {
|
|
603
|
+
citedText: citation.cited_text,
|
|
604
|
+
startPageNumber: citation.start_page_number,
|
|
605
|
+
endPageNumber: citation.end_page_number
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
};
|
|
609
|
+
}
|
|
522
610
|
var AnthropicMessagesLanguageModel = class {
|
|
523
611
|
constructor(modelId, config) {
|
|
524
612
|
this.specificationVersion = "v2";
|
|
@@ -716,9 +804,29 @@ var AnthropicMessagesLanguageModel = class {
|
|
|
716
804
|
var _a, _b, _c;
|
|
717
805
|
return (_c = (_b = (_a = this.config).transformRequestBody) == null ? void 0 : _b.call(_a, args)) != null ? _c : args;
|
|
718
806
|
}
|
|
807
|
+
extractCitationDocuments(prompt) {
|
|
808
|
+
const isCitationEnabled = (part) => {
|
|
809
|
+
var _a, _b;
|
|
810
|
+
const anthropic2 = (_a = part.providerOptions) == null ? void 0 : _a.anthropic;
|
|
811
|
+
const citationsConfig = anthropic2 == null ? void 0 : anthropic2.citations;
|
|
812
|
+
return (_b = citationsConfig == null ? void 0 : citationsConfig.enabled) != null ? _b : false;
|
|
813
|
+
};
|
|
814
|
+
return prompt.filter((message) => message.role === "user").flatMap((message) => message.content).filter(
|
|
815
|
+
(part) => part.type === "file" && part.mediaType === "application/pdf" && isCitationEnabled(part)
|
|
816
|
+
).map((part) => {
|
|
817
|
+
var _a;
|
|
818
|
+
const filePart = part;
|
|
819
|
+
return {
|
|
820
|
+
title: (_a = filePart.filename) != null ? _a : "Untitled Document",
|
|
821
|
+
filename: filePart.filename,
|
|
822
|
+
mediaType: filePart.mediaType
|
|
823
|
+
};
|
|
824
|
+
});
|
|
825
|
+
}
|
|
719
826
|
async doGenerate(options) {
|
|
720
827
|
var _a, _b, _c, _d, _e;
|
|
721
828
|
const { args, warnings, betas, jsonResponseTool } = await this.getArgs(options);
|
|
829
|
+
const citationDocuments = this.extractCitationDocuments(options.prompt);
|
|
722
830
|
const {
|
|
723
831
|
responseHeaders,
|
|
724
832
|
value: response,
|
|
@@ -740,6 +848,16 @@ var AnthropicMessagesLanguageModel = class {
|
|
|
740
848
|
case "text": {
|
|
741
849
|
if (jsonResponseTool == null) {
|
|
742
850
|
content.push({ type: "text", text: part.text });
|
|
851
|
+
if (part.citations) {
|
|
852
|
+
for (const citation of part.citations) {
|
|
853
|
+
processPageLocationCitation(
|
|
854
|
+
citation,
|
|
855
|
+
citationDocuments,
|
|
856
|
+
this.generateId,
|
|
857
|
+
(source) => content.push(source)
|
|
858
|
+
);
|
|
859
|
+
}
|
|
860
|
+
}
|
|
743
861
|
}
|
|
744
862
|
break;
|
|
745
863
|
}
|
|
@@ -846,6 +964,7 @@ var AnthropicMessagesLanguageModel = class {
|
|
|
846
964
|
}
|
|
847
965
|
async doStream(options) {
|
|
848
966
|
const { args, warnings, betas, jsonResponseTool } = await this.getArgs(options);
|
|
967
|
+
const citationDocuments = this.extractCitationDocuments(options.prompt);
|
|
849
968
|
const body = { ...args, stream: true };
|
|
850
969
|
const { responseHeaders, value: response } = await postJsonToApi({
|
|
851
970
|
url: this.buildRequestUrl(true),
|
|
@@ -877,6 +996,9 @@ var AnthropicMessagesLanguageModel = class {
|
|
|
877
996
|
},
|
|
878
997
|
transform(chunk, controller) {
|
|
879
998
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
999
|
+
if (options.includeRawChunks) {
|
|
1000
|
+
controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
|
|
1001
|
+
}
|
|
880
1002
|
if (!chunk.success) {
|
|
881
1003
|
controller.enqueue({ type: "error", error: chunk.error });
|
|
882
1004
|
return;
|
|
@@ -1030,6 +1152,13 @@ var AnthropicMessagesLanguageModel = class {
|
|
|
1030
1152
|
return;
|
|
1031
1153
|
}
|
|
1032
1154
|
case "citations_delta": {
|
|
1155
|
+
const citation = value.delta.citation;
|
|
1156
|
+
processPageLocationCitation(
|
|
1157
|
+
citation,
|
|
1158
|
+
citationDocuments,
|
|
1159
|
+
generateId3,
|
|
1160
|
+
(source) => controller.enqueue(source)
|
|
1161
|
+
);
|
|
1033
1162
|
return;
|
|
1034
1163
|
}
|
|
1035
1164
|
default: {
|
|
@@ -1098,7 +1227,26 @@ var anthropicMessagesResponseSchema = z3.object({
|
|
|
1098
1227
|
z3.discriminatedUnion("type", [
|
|
1099
1228
|
z3.object({
|
|
1100
1229
|
type: z3.literal("text"),
|
|
1101
|
-
text: z3.string()
|
|
1230
|
+
text: z3.string(),
|
|
1231
|
+
citations: z3.array(
|
|
1232
|
+
z3.discriminatedUnion("type", [
|
|
1233
|
+
z3.object({
|
|
1234
|
+
type: z3.literal("web_search_result_location"),
|
|
1235
|
+
cited_text: z3.string(),
|
|
1236
|
+
url: z3.string(),
|
|
1237
|
+
title: z3.string(),
|
|
1238
|
+
encrypted_index: z3.string()
|
|
1239
|
+
}),
|
|
1240
|
+
z3.object({
|
|
1241
|
+
type: z3.literal("page_location"),
|
|
1242
|
+
cited_text: z3.string(),
|
|
1243
|
+
document_index: z3.number(),
|
|
1244
|
+
document_title: z3.string().nullable(),
|
|
1245
|
+
start_page_number: z3.number(),
|
|
1246
|
+
end_page_number: z3.number()
|
|
1247
|
+
})
|
|
1248
|
+
])
|
|
1249
|
+
).optional()
|
|
1102
1250
|
}),
|
|
1103
1251
|
z3.object({
|
|
1104
1252
|
type: z3.literal("thinking"),
|
|
@@ -1237,13 +1385,23 @@ var anthropicMessagesChunkSchema = z3.discriminatedUnion("type", [
|
|
|
1237
1385
|
}),
|
|
1238
1386
|
z3.object({
|
|
1239
1387
|
type: z3.literal("citations_delta"),
|
|
1240
|
-
citation: z3.
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1388
|
+
citation: z3.discriminatedUnion("type", [
|
|
1389
|
+
z3.object({
|
|
1390
|
+
type: z3.literal("web_search_result_location"),
|
|
1391
|
+
cited_text: z3.string(),
|
|
1392
|
+
url: z3.string(),
|
|
1393
|
+
title: z3.string(),
|
|
1394
|
+
encrypted_index: z3.string()
|
|
1395
|
+
}),
|
|
1396
|
+
z3.object({
|
|
1397
|
+
type: z3.literal("page_location"),
|
|
1398
|
+
cited_text: z3.string(),
|
|
1399
|
+
document_index: z3.number(),
|
|
1400
|
+
document_title: z3.string().nullable(),
|
|
1401
|
+
start_page_number: z3.number(),
|
|
1402
|
+
end_page_number: z3.number()
|
|
1403
|
+
})
|
|
1404
|
+
])
|
|
1247
1405
|
})
|
|
1248
1406
|
])
|
|
1249
1407
|
}),
|