-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs[minor]: bedrock tool calling/WSO docs (#5735)
* community[minor]: Add withStructuredOutput to bedrock * implement .bind, fix call options, add docs * chore: lint files * merge main
- Loading branch information
1 parent
b737245
commit ff0ac6e
Showing
3 changed files
with
125 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
import { BedrockChat } from "@langchain/community/chat_models/bedrock"; | ||
// Or, from web environments: | ||
// import { BedrockChat } from "@langchain/community/chat_models/bedrock/web"; | ||
import { z } from "zod"; | ||
import { zodToJsonSchema } from "zod-to-json-schema"; | ||
|
||
const model = new BedrockChat({ | ||
region: process.env.BEDROCK_AWS_REGION, | ||
model: "anthropic.claude-3-sonnet-20240229-v1:0", | ||
maxRetries: 0, | ||
credentials: { | ||
secretAccessKey: process.env.BEDROCK_AWS_SECRET_ACCESS_KEY!, | ||
accessKeyId: process.env.BEDROCK_AWS_ACCESS_KEY_ID!, | ||
}, | ||
}); | ||
|
||
const weatherSchema = z | ||
.object({ | ||
city: z.string().describe("The city to get the weather for"), | ||
state: z.string().describe("The state to get the weather for").optional(), | ||
}) | ||
.describe("Get the weather for a city"); | ||
|
||
const modelWithTools = model.bindTools([ | ||
{ | ||
name: "weather_tool", | ||
description: weatherSchema.description, | ||
input_schema: zodToJsonSchema(weatherSchema), | ||
}, | ||
]); | ||
// Optionally, you can bind tools via the `.bind` method: | ||
// const modelWithTools = model.bind({ | ||
// tools: [ | ||
// { | ||
// name: "weather_tool", | ||
// description: weatherSchema.description, | ||
// input_schema: zodToJsonSchema(weatherSchema), | ||
// }, | ||
// ], | ||
// }); | ||
|
||
const res = await modelWithTools.invoke("What's the weather in New York?"); | ||
console.log(res); | ||
|
||
/* | ||
AIMessage { | ||
additional_kwargs: { id: 'msg_bdrk_01JF7hb4PNQPywP4gnBbgpHi' }, | ||
response_metadata: { | ||
stop_reason: 'tool_use', | ||
usage: { input_tokens: 300, output_tokens: 85 } | ||
}, | ||
tool_calls: [ | ||
{ | ||
name: 'weather_tool', | ||
args: { | ||
city: 'New York', | ||
state: 'NY' | ||
}, | ||
id: 'toolu_bdrk_01AtEZRTCKioFXqhoNcpgaV7' | ||
} | ||
], | ||
} | ||
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import { BedrockChat } from "@langchain/community/chat_models/bedrock"; | ||
// Or, from web environments: | ||
// import { BedrockChat } from "@langchain/community/chat_models/bedrock/web"; | ||
import { z } from "zod"; | ||
|
||
const model = new BedrockChat({ | ||
region: process.env.BEDROCK_AWS_REGION, | ||
model: "anthropic.claude-3-sonnet-20240229-v1:0", | ||
maxRetries: 0, | ||
credentials: { | ||
secretAccessKey: process.env.BEDROCK_AWS_SECRET_ACCESS_KEY!, | ||
accessKeyId: process.env.BEDROCK_AWS_ACCESS_KEY_ID!, | ||
}, | ||
}); | ||
|
||
const weatherSchema = z | ||
.object({ | ||
city: z.string().describe("The city to get the weather for"), | ||
state: z.string().describe("The state to get the weather for").optional(), | ||
}) | ||
.describe("Get the weather for a city"); | ||
|
||
const modelWithStructuredOutput = model.withStructuredOutput(weatherSchema, { | ||
name: "weather_tool", // Optional, defaults to 'extract' | ||
}); | ||
|
||
const res = await modelWithStructuredOutput.invoke( | ||
"What's the weather in New York?" | ||
); | ||
console.log(res); | ||
|
||
/* | ||
{ city: 'New York', state: 'NY' } | ||
*/ |