@langchain/anthropic 0.3.31 → 1.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +8 -8
  2. package/dist/_virtual/rolldown_runtime.cjs +25 -0
  3. package/dist/chat_models.cjs +781 -1012
  4. package/dist/chat_models.cjs.map +1 -0
  5. package/dist/chat_models.d.cts +620 -0
  6. package/dist/chat_models.d.cts.map +1 -0
  7. package/dist/chat_models.d.ts +227 -211
  8. package/dist/chat_models.d.ts.map +1 -0
  9. package/dist/chat_models.js +775 -1003
  10. package/dist/chat_models.js.map +1 -0
  11. package/dist/index.cjs +6 -20
  12. package/dist/index.d.cts +4 -0
  13. package/dist/index.d.ts +4 -3
  14. package/dist/index.js +4 -2
  15. package/dist/output_parsers.cjs +65 -104
  16. package/dist/output_parsers.cjs.map +1 -0
  17. package/dist/output_parsers.js +64 -100
  18. package/dist/output_parsers.js.map +1 -0
  19. package/dist/types.d.cts +33 -0
  20. package/dist/types.d.cts.map +1 -0
  21. package/dist/types.d.ts +30 -32
  22. package/dist/types.d.ts.map +1 -0
  23. package/dist/utils/content.cjs +151 -0
  24. package/dist/utils/content.cjs.map +1 -0
  25. package/dist/utils/content.js +146 -0
  26. package/dist/utils/content.js.map +1 -0
  27. package/dist/utils/errors.cjs +16 -27
  28. package/dist/utils/errors.cjs.map +1 -0
  29. package/dist/utils/errors.js +17 -25
  30. package/dist/utils/errors.js.map +1 -0
  31. package/dist/utils/index.cjs +7 -0
  32. package/dist/utils/index.cjs.map +1 -0
  33. package/dist/utils/index.js +6 -0
  34. package/dist/utils/index.js.map +1 -0
  35. package/dist/utils/message_inputs.cjs +223 -534
  36. package/dist/utils/message_inputs.cjs.map +1 -0
  37. package/dist/utils/message_inputs.js +224 -532
  38. package/dist/utils/message_inputs.js.map +1 -0
  39. package/dist/utils/message_outputs.cjs +186 -250
  40. package/dist/utils/message_outputs.cjs.map +1 -0
  41. package/dist/utils/message_outputs.js +185 -247
  42. package/dist/utils/message_outputs.js.map +1 -0
  43. package/dist/utils/prompts.cjs +46 -45
  44. package/dist/utils/prompts.cjs.map +1 -0
  45. package/dist/utils/prompts.d.cts +45 -0
  46. package/dist/utils/prompts.d.cts.map +1 -0
  47. package/dist/utils/prompts.d.ts +8 -2
  48. package/dist/utils/prompts.d.ts.map +1 -0
  49. package/dist/utils/prompts.js +46 -42
  50. package/dist/utils/prompts.js.map +1 -0
  51. package/dist/utils/standard.cjs +285 -0
  52. package/dist/utils/standard.cjs.map +1 -0
  53. package/dist/utils/standard.js +285 -0
  54. package/dist/utils/standard.js.map +1 -0
  55. package/dist/utils/tools.cjs +15 -30
  56. package/dist/utils/tools.cjs.map +1 -0
  57. package/dist/utils/tools.js +15 -28
  58. package/dist/utils/tools.js.map +1 -0
  59. package/package.json +45 -71
  60. package/dist/experimental/index.cjs +0 -17
  61. package/dist/experimental/index.d.ts +0 -1
  62. package/dist/experimental/index.js +0 -1
  63. package/dist/experimental/tool_calling.cjs +0 -318
  64. package/dist/experimental/tool_calling.d.ts +0 -57
  65. package/dist/experimental/tool_calling.js +0 -314
  66. package/dist/experimental/utils/tool_calling.cjs +0 -106
  67. package/dist/experimental/utils/tool_calling.d.ts +0 -10
  68. package/dist/experimental/utils/tool_calling.js +0 -101
  69. package/dist/load/import_constants.cjs +0 -5
  70. package/dist/load/import_constants.d.ts +0 -1
  71. package/dist/load/import_constants.js +0 -2
  72. package/dist/load/import_map.cjs +0 -39
  73. package/dist/load/import_map.d.ts +0 -2
  74. package/dist/load/import_map.js +0 -3
  75. package/dist/load/import_type.cjs +0 -3
  76. package/dist/load/import_type.d.ts +0 -5
  77. package/dist/load/import_type.js +0 -2
  78. package/dist/load/index.cjs +0 -63
  79. package/dist/load/index.d.ts +0 -14
  80. package/dist/load/index.js +0 -25
  81. package/dist/load/map_keys.cjs +0 -2
  82. package/dist/load/map_keys.d.ts +0 -3
  83. package/dist/load/map_keys.js +0 -1
  84. package/dist/load/serializable.cjs +0 -17
  85. package/dist/load/serializable.d.ts +0 -1
  86. package/dist/load/serializable.js +0 -1
  87. package/dist/output_parsers.d.ts +0 -22
  88. package/dist/types.cjs +0 -48
  89. package/dist/types.js +0 -45
  90. package/dist/utils/errors.d.ts +0 -3
  91. package/dist/utils/message_inputs.d.ts +0 -14
  92. package/dist/utils/message_outputs.d.ts +0 -14
  93. package/dist/utils/tools.d.ts +0 -3
  94. package/experimental.cjs +0 -1
  95. package/experimental.d.cts +0 -1
  96. package/experimental.d.ts +0 -1
  97. package/experimental.js +0 -1
  98. package/index.cjs +0 -1
  99. package/index.d.cts +0 -1
  100. package/index.d.ts +0 -1
  101. package/index.js +0 -1
@@ -1,250 +1,188 @@
1
- import { AIMessage, AIMessageChunk, } from "@langchain/core/messages";
2
1
  import { extractToolCalls } from "../output_parsers.js";
3
- export function _makeMessageChunkFromAnthropicEvent(data, fields) {
4
- if (data.type === "message_start") {
5
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
6
- const { content, usage, ...additionalKwargs } = data.message;
7
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
- const filteredAdditionalKwargs = {};
9
- for (const [key, value] of Object.entries(additionalKwargs)) {
10
- if (value !== undefined && value !== null) {
11
- filteredAdditionalKwargs[key] = value;
12
- }
13
- }
14
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
- const { input_tokens, output_tokens, ...rest } = usage ?? {};
16
- const usageMetadata = {
17
- input_tokens,
18
- output_tokens,
19
- total_tokens: input_tokens + output_tokens,
20
- input_token_details: {
21
- cache_creation: rest.cache_creation_input_tokens,
22
- cache_read: rest.cache_read_input_tokens,
23
- },
24
- };
25
- return {
26
- chunk: new AIMessageChunk({
27
- content: fields.coerceContentToString ? "" : [],
28
- additional_kwargs: filteredAdditionalKwargs,
29
- usage_metadata: fields.streamUsage ? usageMetadata : undefined,
30
- response_metadata: {
31
- usage: {
32
- ...rest,
33
- },
34
- },
35
- id: data.message.id,
36
- }),
37
- };
38
- }
39
- else if (data.type === "message_delta") {
40
- const usageMetadata = {
41
- input_tokens: 0,
42
- output_tokens: data.usage.output_tokens,
43
- total_tokens: data.usage.output_tokens,
44
- input_token_details: {
45
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
- cache_creation: data.usage.cache_creation_input_tokens,
47
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
- cache_read: data.usage.cache_read_input_tokens,
49
- },
50
- };
51
- const responseMetadata = "context_management" in data.delta
52
- ? { context_management: data.delta.context_management }
53
- : undefined;
54
- return {
55
- chunk: new AIMessageChunk({
56
- content: fields.coerceContentToString ? "" : [],
57
- additional_kwargs: { ...data.delta },
58
- usage_metadata: fields.streamUsage ? usageMetadata : undefined,
59
- response_metadata: responseMetadata,
60
- }),
61
- };
62
- }
63
- else if (data.type === "content_block_start" &&
64
- [
65
- "tool_use",
66
- "document",
67
- "server_tool_use",
68
- "web_search_tool_result",
69
- ].includes(data.content_block.type)) {
70
- const contentBlock = data.content_block;
71
- let toolCallChunks;
72
- if (contentBlock.type === "tool_use") {
73
- toolCallChunks = [
74
- {
75
- id: contentBlock.id,
76
- index: data.index,
77
- name: contentBlock.name,
78
- args: "",
79
- },
80
- ];
81
- }
82
- else {
83
- toolCallChunks = [];
84
- }
85
- return {
86
- chunk: new AIMessageChunk({
87
- content: fields.coerceContentToString
88
- ? ""
89
- : [
90
- {
91
- index: data.index,
92
- ...data.content_block,
93
- input: contentBlock.type === "server_tool_use" ||
94
- contentBlock.type === "tool_use"
95
- ? ""
96
- : undefined,
97
- },
98
- ],
99
- additional_kwargs: {},
100
- tool_call_chunks: toolCallChunks,
101
- }),
102
- };
103
- }
104
- else if (data.type === "content_block_delta" &&
105
- [
106
- "text_delta",
107
- "citations_delta",
108
- "thinking_delta",
109
- "signature_delta",
110
- ].includes(data.delta.type)) {
111
- if (fields.coerceContentToString && "text" in data.delta) {
112
- return {
113
- chunk: new AIMessageChunk({
114
- content: data.delta.text,
115
- }),
116
- };
117
- }
118
- else {
119
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
- const contentBlock = data.delta;
121
- if ("citation" in contentBlock) {
122
- contentBlock.citations = [contentBlock.citation];
123
- delete contentBlock.citation;
124
- }
125
- if (contentBlock.type === "thinking_delta" ||
126
- contentBlock.type === "signature_delta") {
127
- return {
128
- chunk: new AIMessageChunk({
129
- content: [{ index: data.index, ...contentBlock, type: "thinking" }],
130
- }),
131
- };
132
- }
133
- return {
134
- chunk: new AIMessageChunk({
135
- content: [{ index: data.index, ...contentBlock, type: "text" }],
136
- }),
137
- };
138
- }
139
- }
140
- else if (data.type === "content_block_delta" &&
141
- data.delta.type === "input_json_delta") {
142
- return {
143
- chunk: new AIMessageChunk({
144
- content: fields.coerceContentToString
145
- ? ""
146
- : [
147
- {
148
- index: data.index,
149
- input: data.delta.partial_json,
150
- type: data.delta.type,
151
- },
152
- ],
153
- additional_kwargs: {},
154
- tool_call_chunks: [
155
- {
156
- index: data.index,
157
- args: data.delta.partial_json,
158
- },
159
- ],
160
- }),
161
- };
162
- }
163
- else if (data.type === "content_block_start" &&
164
- data.content_block.type === "text") {
165
- const content = data.content_block?.text;
166
- if (content !== undefined) {
167
- return {
168
- chunk: new AIMessageChunk({
169
- content: fields.coerceContentToString
170
- ? content
171
- : [
172
- {
173
- index: data.index,
174
- ...data.content_block,
175
- },
176
- ],
177
- additional_kwargs: {},
178
- }),
179
- };
180
- }
181
- }
182
- else if (data.type === "content_block_start" &&
183
- data.content_block.type === "redacted_thinking") {
184
- return {
185
- chunk: new AIMessageChunk({
186
- content: fields.coerceContentToString
187
- ? ""
188
- : [{ index: data.index, ...data.content_block }],
189
- }),
190
- };
191
- }
192
- else if (data.type === "content_block_start" &&
193
- data.content_block.type === "thinking") {
194
- const content = data.content_block.thinking;
195
- return {
196
- chunk: new AIMessageChunk({
197
- content: fields.coerceContentToString
198
- ? content
199
- : [{ index: data.index, ...data.content_block }],
200
- }),
201
- };
202
- }
203
- return null;
2
+ import { AIMessage, AIMessageChunk } from "@langchain/core/messages";
3
+
4
+ //#region src/utils/message_outputs.ts
5
+ function _makeMessageChunkFromAnthropicEvent(data, fields) {
6
+ const response_metadata = { model_provider: "anthropic" };
7
+ if (data.type === "message_start") {
8
+ const { content, usage,...additionalKwargs } = data.message;
9
+ const filteredAdditionalKwargs = {};
10
+ for (const [key, value] of Object.entries(additionalKwargs)) if (value !== void 0 && value !== null) filteredAdditionalKwargs[key] = value;
11
+ const { input_tokens, output_tokens,...rest } = usage ?? {};
12
+ const usageMetadata = {
13
+ input_tokens,
14
+ output_tokens,
15
+ total_tokens: input_tokens + output_tokens,
16
+ input_token_details: {
17
+ cache_creation: rest.cache_creation_input_tokens,
18
+ cache_read: rest.cache_read_input_tokens
19
+ }
20
+ };
21
+ return { chunk: new AIMessageChunk({
22
+ content: fields.coerceContentToString ? "" : [],
23
+ additional_kwargs: filteredAdditionalKwargs,
24
+ usage_metadata: fields.streamUsage ? usageMetadata : void 0,
25
+ response_metadata: {
26
+ ...response_metadata,
27
+ usage: { ...rest }
28
+ },
29
+ id: data.message.id
30
+ }) };
31
+ } else if (data.type === "message_delta") {
32
+ const usageMetadata = {
33
+ input_tokens: 0,
34
+ output_tokens: data.usage.output_tokens,
35
+ total_tokens: data.usage.output_tokens,
36
+ input_token_details: {
37
+ cache_creation: data.usage.cache_creation_input_tokens,
38
+ cache_read: data.usage.cache_read_input_tokens
39
+ }
40
+ };
41
+ const responseMetadata = "context_management" in data.delta ? { context_management: data.delta.context_management } : void 0;
42
+ return { chunk: new AIMessageChunk({
43
+ content: fields.coerceContentToString ? "" : [],
44
+ response_metadata: responseMetadata,
45
+ additional_kwargs: { ...data.delta },
46
+ usage_metadata: fields.streamUsage ? usageMetadata : void 0
47
+ }) };
48
+ } else if (data.type === "content_block_start" && [
49
+ "tool_use",
50
+ "document",
51
+ "server_tool_use",
52
+ "web_search_tool_result"
53
+ ].includes(data.content_block.type)) {
54
+ const contentBlock = data.content_block;
55
+ let toolCallChunks;
56
+ if (contentBlock.type === "tool_use") toolCallChunks = [{
57
+ id: contentBlock.id,
58
+ index: data.index,
59
+ name: contentBlock.name,
60
+ args: ""
61
+ }];
62
+ else toolCallChunks = [];
63
+ return { chunk: new AIMessageChunk({
64
+ content: fields.coerceContentToString ? "" : [{
65
+ index: data.index,
66
+ ...data.content_block,
67
+ input: contentBlock.type === "server_tool_use" || contentBlock.type === "tool_use" ? "" : void 0
68
+ }],
69
+ response_metadata,
70
+ additional_kwargs: {},
71
+ tool_call_chunks: toolCallChunks
72
+ }) };
73
+ } else if (data.type === "content_block_delta" && [
74
+ "text_delta",
75
+ "citations_delta",
76
+ "thinking_delta",
77
+ "signature_delta"
78
+ ].includes(data.delta.type)) if (fields.coerceContentToString && "text" in data.delta) return { chunk: new AIMessageChunk({ content: data.delta.text }) };
79
+ else {
80
+ const contentBlock = data.delta;
81
+ if ("citation" in contentBlock) {
82
+ contentBlock.citations = [contentBlock.citation];
83
+ delete contentBlock.citation;
84
+ }
85
+ if (contentBlock.type === "thinking_delta" || contentBlock.type === "signature_delta") return { chunk: new AIMessageChunk({
86
+ content: [{
87
+ index: data.index,
88
+ ...contentBlock,
89
+ type: "thinking"
90
+ }],
91
+ response_metadata
92
+ }) };
93
+ return { chunk: new AIMessageChunk({
94
+ content: [{
95
+ index: data.index,
96
+ ...contentBlock,
97
+ type: "text"
98
+ }],
99
+ response_metadata
100
+ }) };
101
+ }
102
+ else if (data.type === "content_block_delta" && data.delta.type === "input_json_delta") return { chunk: new AIMessageChunk({
103
+ content: fields.coerceContentToString ? "" : [{
104
+ index: data.index,
105
+ input: data.delta.partial_json,
106
+ type: data.delta.type
107
+ }],
108
+ response_metadata,
109
+ additional_kwargs: {},
110
+ tool_call_chunks: [{
111
+ index: data.index,
112
+ args: data.delta.partial_json
113
+ }]
114
+ }) };
115
+ else if (data.type === "content_block_start" && data.content_block.type === "text") {
116
+ const content = data.content_block?.text;
117
+ if (content !== void 0) return { chunk: new AIMessageChunk({
118
+ content: fields.coerceContentToString ? content : [{
119
+ index: data.index,
120
+ ...data.content_block
121
+ }],
122
+ response_metadata,
123
+ additional_kwargs: {}
124
+ }) };
125
+ } else if (data.type === "content_block_start" && data.content_block.type === "redacted_thinking") return { chunk: new AIMessageChunk({
126
+ content: fields.coerceContentToString ? "" : [{
127
+ index: data.index,
128
+ ...data.content_block
129
+ }],
130
+ response_metadata
131
+ }) };
132
+ else if (data.type === "content_block_start" && data.content_block.type === "thinking") {
133
+ const content = data.content_block.thinking;
134
+ return { chunk: new AIMessageChunk({
135
+ content: fields.coerceContentToString ? content : [{
136
+ index: data.index,
137
+ ...data.content_block
138
+ }],
139
+ response_metadata
140
+ }) };
141
+ }
142
+ return null;
204
143
  }
205
- export function anthropicResponseToChatMessages(messages, additionalKwargs) {
206
- const usage = additionalKwargs.usage;
207
- const usageMetadata = usage != null
208
- ? {
209
- input_tokens: usage.input_tokens ?? 0,
210
- output_tokens: usage.output_tokens ?? 0,
211
- total_tokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),
212
- input_token_details: {
213
- cache_creation: usage.cache_creation_input_tokens,
214
- cache_read: usage.cache_read_input_tokens,
215
- },
216
- }
217
- : undefined;
218
- if (messages.length === 1 && messages[0].type === "text") {
219
- return [
220
- {
221
- text: messages[0].text,
222
- message: new AIMessage({
223
- content: messages[0].text,
224
- additional_kwargs: additionalKwargs,
225
- usage_metadata: usageMetadata,
226
- response_metadata: additionalKwargs,
227
- id: additionalKwargs.id,
228
- }),
229
- },
230
- ];
231
- }
232
- else {
233
- const toolCalls = extractToolCalls(messages);
234
- const generations = [
235
- {
236
- text: "",
237
- message: new AIMessage({
238
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
239
- content: messages,
240
- additional_kwargs: additionalKwargs,
241
- tool_calls: toolCalls,
242
- usage_metadata: usageMetadata,
243
- response_metadata: additionalKwargs,
244
- id: additionalKwargs.id,
245
- }),
246
- },
247
- ];
248
- return generations;
249
- }
144
+ function anthropicResponseToChatMessages(messages, additionalKwargs) {
145
+ const response_metadata = {
146
+ ...additionalKwargs,
147
+ model_provider: "anthropic"
148
+ };
149
+ const usage = additionalKwargs.usage;
150
+ const usageMetadata = usage != null ? {
151
+ input_tokens: usage.input_tokens ?? 0,
152
+ output_tokens: usage.output_tokens ?? 0,
153
+ total_tokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),
154
+ input_token_details: {
155
+ cache_creation: usage.cache_creation_input_tokens,
156
+ cache_read: usage.cache_read_input_tokens
157
+ }
158
+ } : void 0;
159
+ if (messages.length === 1 && messages[0].type === "text") return [{
160
+ text: messages[0].text,
161
+ message: new AIMessage({
162
+ content: messages[0].text,
163
+ additional_kwargs: additionalKwargs,
164
+ usage_metadata: usageMetadata,
165
+ response_metadata,
166
+ id: additionalKwargs.id
167
+ })
168
+ }];
169
+ else {
170
+ const toolCalls = extractToolCalls(messages);
171
+ const generations = [{
172
+ text: "",
173
+ message: new AIMessage({
174
+ content: messages,
175
+ additional_kwargs: additionalKwargs,
176
+ tool_calls: toolCalls,
177
+ usage_metadata: usageMetadata,
178
+ response_metadata,
179
+ id: additionalKwargs.id
180
+ })
181
+ }];
182
+ return generations;
183
+ }
250
184
  }
185
+
186
+ //#endregion
187
+ export { _makeMessageChunkFromAnthropicEvent, anthropicResponseToChatMessages };
188
+ //# sourceMappingURL=message_outputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message_outputs.js","names":["data: Anthropic.Messages.RawMessageStreamEvent","fields: {\n streamUsage: boolean;\n coerceContentToString: boolean;\n }","filteredAdditionalKwargs: Record<string, any>","usageMetadata: UsageMetadata","toolCallChunks: ToolCallChunk[]","contentBlock: Record<string, any>","messages: AnthropicMessageResponse[]","additionalKwargs: Record<string, unknown>","usage: Record<string, number> | null | undefined","generations: ChatGeneration[]"],"sources":["../../src/utils/message_outputs.ts"],"sourcesContent":["/**\n * This util file contains functions for converting Anthropic messages to LangChain messages.\n */\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport {\n AIMessage,\n AIMessageChunk,\n UsageMetadata,\n} from \"@langchain/core/messages\";\nimport type { ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport { ChatGeneration } from \"@langchain/core/outputs\";\nimport { AnthropicMessageResponse } from \"../types.js\";\nimport { extractToolCalls } from \"../output_parsers.js\";\n\nexport function _makeMessageChunkFromAnthropicEvent(\n data: Anthropic.Messages.RawMessageStreamEvent,\n fields: {\n streamUsage: boolean;\n coerceContentToString: boolean;\n }\n): {\n chunk: AIMessageChunk;\n} | null {\n const response_metadata = { model_provider: \"anthropic\" };\n if (data.type === \"message_start\") {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { content, usage, ...additionalKwargs } = data.message;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredAdditionalKwargs: Record<string, any> = {};\n for (const [key, value] of Object.entries(additionalKwargs)) {\n if (value !== undefined && value !== null) {\n filteredAdditionalKwargs[key] = value;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { input_tokens, output_tokens, ...rest }: Record<string, any> =\n usage ?? {};\n const usageMetadata: UsageMetadata = {\n input_tokens,\n output_tokens,\n total_tokens: input_tokens + output_tokens,\n input_token_details: {\n cache_creation: rest.cache_creation_input_tokens,\n cache_read: rest.cache_read_input_tokens,\n },\n };\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? \"\" : [],\n additional_kwargs: filteredAdditionalKwargs,\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n response_metadata: {\n ...response_metadata,\n usage: {\n ...rest,\n },\n },\n id: data.message.id,\n }),\n };\n } else if (data.type === \"message_delta\") {\n const usageMetadata: UsageMetadata = {\n input_tokens: 0,\n output_tokens: data.usage.output_tokens,\n total_tokens: data.usage.output_tokens,\n input_token_details: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cache_creation: (data.usage as any).cache_creation_input_tokens,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cache_read: (data.usage as any).cache_read_input_tokens,\n },\n };\n const responseMetadata =\n \"context_management\" in data.delta\n ? { context_management: data.delta.context_management }\n : undefined;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? \"\" : [],\n response_metadata: responseMetadata,\n additional_kwargs: { ...data.delta },\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n [\n \"tool_use\",\n \"document\",\n \"server_tool_use\",\n \"web_search_tool_result\",\n ].includes(data.content_block.type)\n ) {\n const contentBlock = data.content_block;\n let toolCallChunks: ToolCallChunk[];\n if (contentBlock.type === \"tool_use\") {\n toolCallChunks = [\n {\n id: contentBlock.id,\n index: data.index,\n name: contentBlock.name,\n args: \"\",\n },\n ];\n } else {\n toolCallChunks = [];\n }\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n ...data.content_block,\n input:\n contentBlock.type === \"server_tool_use\" ||\n contentBlock.type === \"tool_use\"\n ? \"\"\n : undefined,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n tool_call_chunks: toolCallChunks,\n }),\n };\n } else if (\n data.type === \"content_block_delta\" &&\n [\n \"text_delta\",\n \"citations_delta\",\n \"thinking_delta\",\n \"signature_delta\",\n ].includes(data.delta.type)\n ) {\n if (fields.coerceContentToString && \"text\" in data.delta) {\n return {\n chunk: new AIMessageChunk({\n content: data.delta.text,\n }),\n };\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const contentBlock: Record<string, any> = data.delta;\n if (\"citation\" in contentBlock) {\n contentBlock.citations = [contentBlock.citation];\n delete contentBlock.citation;\n }\n if (\n contentBlock.type === \"thinking_delta\" ||\n contentBlock.type === \"signature_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"thinking\" }],\n response_metadata,\n }),\n };\n }\n\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"text\" }],\n response_metadata,\n }),\n };\n }\n } else if (\n data.type === \"content_block_delta\" &&\n data.delta.type === \"input_json_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n input: data.delta.partial_json,\n type: data.delta.type,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n tool_call_chunks: [\n {\n index: data.index,\n args: data.delta.partial_json,\n },\n ],\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"text\"\n ) {\n const content = data.content_block?.text;\n if (content !== undefined) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [\n {\n index: data.index,\n ...data.content_block,\n },\n ],\n response_metadata,\n additional_kwargs: {},\n }),\n };\n }\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"redacted_thinking\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"thinking\"\n ) {\n const content = data.content_block.thinking;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [{ index: data.index, ...data.content_block }],\n response_metadata,\n }),\n };\n }\n return null;\n}\n\nexport function anthropicResponseToChatMessages(\n messages: AnthropicMessageResponse[],\n additionalKwargs: Record<string, unknown>\n): ChatGeneration[] {\n const response_metadata = {\n ...additionalKwargs,\n model_provider: \"anthropic\",\n };\n const usage: Record<string, number> | null | undefined =\n additionalKwargs.usage as Record<string, number> | null | undefined;\n const usageMetadata =\n usage != null\n ? {\n input_tokens: usage.input_tokens ?? 0,\n output_tokens: usage.output_tokens ?? 0,\n total_tokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n input_token_details: {\n cache_creation: usage.cache_creation_input_tokens,\n cache_read: usage.cache_read_input_tokens,\n },\n }\n : undefined;\n if (messages.length === 1 && messages[0].type === \"text\") {\n return [\n {\n text: messages[0].text,\n message: new AIMessage({\n content: messages[0].text,\n additional_kwargs: additionalKwargs,\n usage_metadata: usageMetadata,\n response_metadata,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n } else {\n const toolCalls = extractToolCalls(messages);\n const generations: ChatGeneration[] = [\n {\n text: \"\",\n message: new AIMessage({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content: messages as any,\n additional_kwargs: additionalKwargs,\n tool_calls: toolCalls,\n usage_metadata: usageMetadata,\n response_metadata,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n return generations;\n }\n}\n"],"mappings":"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"}
@@ -1,48 +1,49 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertPromptToAnthropic = convertPromptToAnthropic;
4
- const message_inputs_js_1 = require("./message_inputs.cjs");
1
+ const require_message_inputs = require('./message_inputs.cjs');
2
+
3
+ //#region src/utils/prompts.ts
5
4
  /**
6
- * Convert a formatted LangChain prompt (e.g. pulled from the hub) into
7
- * a format expected by Anthropic's JS SDK.
8
- *
9
- * Requires the "@langchain/anthropic" package to be installed in addition
10
- * to the Anthropic SDK.
11
- *
12
- * @example
13
- * ```ts
14
- * import { convertPromptToAnthropic } from "langsmith/utils/hub/anthropic";
15
- * import { pull } from "langchain/hub";
16
- *
17
- * import Anthropic from '@anthropic-ai/sdk';
18
- *
19
- * const prompt = await pull("jacob/joke-generator");
20
- * const formattedPrompt = await prompt.invoke({
21
- * topic: "cats",
22
- * });
23
- *
24
- * const { system, messages } = convertPromptToAnthropic(formattedPrompt);
25
- *
26
- * const anthropicClient = new Anthropic({
27
- * apiKey: 'your_api_key',
28
- * });
29
- *
30
- * const anthropicResponse = await anthropicClient.messages.create({
31
- * model: "claude-3-5-sonnet-20240620",
32
- * max_tokens: 1024,
33
- * stream: false,
34
- * system,
35
- * messages,
36
- * });
37
- * ```
38
- * @param formattedPrompt
39
- * @returns A partial Anthropic payload.
40
- */
5
+ * Convert a formatted LangChain prompt (e.g. pulled from the hub) into
6
+ * a format expected by Anthropic's JS SDK.
7
+ *
8
+ * Requires the "@langchain/anthropic" package to be installed in addition
9
+ * to the Anthropic SDK.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { convertPromptToAnthropic } from "langsmith/utils/hub/anthropic";
14
+ * import { pull } from "langchain/hub";
15
+ *
16
+ * import Anthropic from '@anthropic-ai/sdk';
17
+ *
18
+ * const prompt = await pull("jacob/joke-generator");
19
+ * const formattedPrompt = await prompt.invoke({
20
+ * topic: "cats",
21
+ * });
22
+ *
23
+ * const { system, messages } = convertPromptToAnthropic(formattedPrompt);
24
+ *
25
+ * const anthropicClient = new Anthropic({
26
+ * apiKey: 'your_api_key',
27
+ * });
28
+ *
29
+ * const anthropicResponse = await anthropicClient.messages.create({
30
+ * model: "claude-3-5-sonnet-20240620",
31
+ * max_tokens: 1024,
32
+ * stream: false,
33
+ * system,
34
+ * messages,
35
+ * });
36
+ * ```
37
+ * @param formattedPrompt
38
+ * @returns A partial Anthropic payload.
39
+ */
41
40
  function convertPromptToAnthropic(formattedPrompt) {
42
- const messages = formattedPrompt.toChatMessages();
43
- const anthropicBody = (0, message_inputs_js_1._convertMessagesToAnthropicPayload)(messages);
44
- if (anthropicBody.messages === undefined) {
45
- anthropicBody.messages = [];
46
- }
47
- return anthropicBody;
41
+ const messages = formattedPrompt.toChatMessages();
42
+ const anthropicBody = require_message_inputs._convertMessagesToAnthropicPayload(messages);
43
+ if (anthropicBody.messages === void 0) anthropicBody.messages = [];
44
+ return anthropicBody;
48
45
  }
46
+
47
+ //#endregion
48
+ exports.convertPromptToAnthropic = convertPromptToAnthropic;
49
+ //# sourceMappingURL=prompts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.cjs","names":["formattedPrompt: BasePromptValue","_convertMessagesToAnthropicPayload"],"sources":["../../src/utils/prompts.ts"],"sourcesContent":["import type { BasePromptValue } from \"@langchain/core/prompt_values\";\nimport Anthropic from \"@anthropic-ai/sdk\";\n\nimport { _convertMessagesToAnthropicPayload } from \"./message_inputs.js\";\n\n/**\n * Convert a formatted LangChain prompt (e.g. pulled from the hub) into\n * a format expected by Anthropic's JS SDK.\n *\n * Requires the \"@langchain/anthropic\" package to be installed in addition\n * to the Anthropic SDK.\n *\n * @example\n * ```ts\n * import { convertPromptToAnthropic } from \"langsmith/utils/hub/anthropic\";\n * import { pull } from \"langchain/hub\";\n *\n * import Anthropic from '@anthropic-ai/sdk';\n *\n * const prompt = await pull(\"jacob/joke-generator\");\n * const formattedPrompt = await prompt.invoke({\n * topic: \"cats\",\n * });\n *\n * const { system, messages } = convertPromptToAnthropic(formattedPrompt);\n *\n * const anthropicClient = new Anthropic({\n * apiKey: 'your_api_key',\n * });\n *\n * const anthropicResponse = await anthropicClient.messages.create({\n * model: \"claude-3-5-sonnet-20240620\",\n * max_tokens: 1024,\n * stream: false,\n * system,\n * messages,\n * });\n * ```\n * @param formattedPrompt\n * @returns A partial Anthropic payload.\n */\nexport function convertPromptToAnthropic(\n formattedPrompt: BasePromptValue\n): Anthropic.Messages.MessageCreateParams {\n const messages = formattedPrompt.toChatMessages();\n const anthropicBody = _convertMessagesToAnthropicPayload(messages);\n if (anthropicBody.messages === undefined) {\n anthropicBody.messages = [];\n }\n return anthropicBody;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,SAAgB,yBACdA,iBACwC;CACxC,MAAM,WAAW,gBAAgB,gBAAgB;CACjD,MAAM,gBAAgBC,0DAAmC,SAAS;AAClE,KAAI,cAAc,aAAa,QAC7B,cAAc,WAAW,CAAE;AAE7B,QAAO;AACR"}
@@ -0,0 +1,45 @@
1
+ import Anthropic from "@anthropic-ai/sdk";
2
+ import { BasePromptValue } from "@langchain/core/prompt_values";
3
+
4
+ //#region src/utils/prompts.d.ts
5
+
6
+ /**
7
+ * Convert a formatted LangChain prompt (e.g. pulled from the hub) into
8
+ * a format expected by Anthropic's JS SDK.
9
+ *
10
+ * Requires the "@langchain/anthropic" package to be installed in addition
11
+ * to the Anthropic SDK.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { convertPromptToAnthropic } from "langsmith/utils/hub/anthropic";
16
+ * import { pull } from "langchain/hub";
17
+ *
18
+ * import Anthropic from '@anthropic-ai/sdk';
19
+ *
20
+ * const prompt = await pull("jacob/joke-generator");
21
+ * const formattedPrompt = await prompt.invoke({
22
+ * topic: "cats",
23
+ * });
24
+ *
25
+ * const { system, messages } = convertPromptToAnthropic(formattedPrompt);
26
+ *
27
+ * const anthropicClient = new Anthropic({
28
+ * apiKey: 'your_api_key',
29
+ * });
30
+ *
31
+ * const anthropicResponse = await anthropicClient.messages.create({
32
+ * model: "claude-3-5-sonnet-20240620",
33
+ * max_tokens: 1024,
34
+ * stream: false,
35
+ * system,
36
+ * messages,
37
+ * });
38
+ * ```
39
+ * @param formattedPrompt
40
+ * @returns A partial Anthropic payload.
41
+ */
42
+ declare function convertPromptToAnthropic(formattedPrompt: BasePromptValue): Anthropic.Messages.MessageCreateParams;
43
+ //#endregion
44
+ export { convertPromptToAnthropic };
45
+ //# sourceMappingURL=prompts.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.cts","names":["BasePromptValue","Anthropic","convertPromptToAnthropic","Messages","MessageCreateParams"],"sources":["../../src/utils/prompts.d.ts"],"sourcesContent":["import type { BasePromptValue } from \"@langchain/core/prompt_values\";\nimport Anthropic from \"@anthropic-ai/sdk\";\n/**\n * Convert a formatted LangChain prompt (e.g. pulled from the hub) into\n * a format expected by Anthropic's JS SDK.\n *\n * Requires the \"@langchain/anthropic\" package to be installed in addition\n * to the Anthropic SDK.\n *\n * @example\n * ```ts\n * import { convertPromptToAnthropic } from \"langsmith/utils/hub/anthropic\";\n * import { pull } from \"langchain/hub\";\n *\n * import Anthropic from '@anthropic-ai/sdk';\n *\n * const prompt = await pull(\"jacob/joke-generator\");\n * const formattedPrompt = await prompt.invoke({\n * topic: \"cats\",\n * });\n *\n * const { system, messages } = convertPromptToAnthropic(formattedPrompt);\n *\n * const anthropicClient = new Anthropic({\n * apiKey: 'your_api_key',\n * });\n *\n * const anthropicResponse = await anthropicClient.messages.create({\n * model: \"claude-3-5-sonnet-20240620\",\n * max_tokens: 1024,\n * stream: false,\n * system,\n * messages,\n * });\n * ```\n * @param formattedPrompt\n * @returns A partial Anthropic payload.\n */\nexport declare function convertPromptToAnthropic(formattedPrompt: BasePromptValue): Anthropic.Messages.MessageCreateParams;\n"],"mappings":";;;;;;;AAsCA;;;;AAA0H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAlGE,wBAAAA,kBAA0CF,kBAAkBC,SAAAA,CAAUE,QAAAA,CAASC"}
@@ -1,5 +1,8 @@
1
- import type { BasePromptValue } from "@langchain/core/prompt_values";
2
1
  import Anthropic from "@anthropic-ai/sdk";
2
+ import { BasePromptValue } from "@langchain/core/prompt_values";
3
+
4
+ //#region src/utils/prompts.d.ts
5
+
3
6
  /**
4
7
  * Convert a formatted LangChain prompt (e.g. pulled from the hub) into
5
8
  * a format expected by Anthropic's JS SDK.
@@ -36,4 +39,7 @@ import Anthropic from "@anthropic-ai/sdk";
36
39
  * @param formattedPrompt
37
40
  * @returns A partial Anthropic payload.
38
41
  */
39
- export declare function convertPromptToAnthropic(formattedPrompt: BasePromptValue): Anthropic.Messages.MessageCreateParams;
42
+ declare function convertPromptToAnthropic(formattedPrompt: BasePromptValue): Anthropic.Messages.MessageCreateParams;
43
+ //#endregion
44
+ export { convertPromptToAnthropic };
45
+ //# sourceMappingURL=prompts.d.ts.map