diff --git a/libs/providers/langchain-aws/src/chat_models.ts b/libs/providers/langchain-aws/src/chat_models.ts index 43a1e99a1cac..b34bb18c3b20 100644 --- a/libs/providers/langchain-aws/src/chat_models.ts +++ b/libs/providers/langchain-aws/src/chat_models.ts @@ -659,6 +659,8 @@ export class ChatBedrockConverse get lc_aliases(): { [key: string]: string } | undefined { return { apiKey: "API_KEY_NAME", + model: "model_id", + region: "region_name", }; } diff --git a/libs/providers/langchain-aws/src/tests/chat_models.test.ts b/libs/providers/langchain-aws/src/tests/chat_models.test.ts index aeeb0427eb75..ae51dabfa7c4 100644 --- a/libs/providers/langchain-aws/src/tests/chat_models.test.ts +++ b/libs/providers/langchain-aws/src/tests/chat_models.test.ts @@ -17,6 +17,7 @@ import { describe, expect, test, it } from "vitest"; import { convertToConverseMessages } from "../utils/message_inputs.js"; import { handleConverseStreamContentBlockDelta } from "../utils/message_outputs.js"; import { ChatBedrockConverse } from "../chat_models.js"; +import { load } from "@langchain/core/load"; describe("convertToConverseMessages", () => { const testCases: { @@ -666,3 +667,43 @@ describe("tool_choice works for supported models", () => { } ); }); + +test("Test ChatBedrockConverse deserialization from model_id and region_name", async () => { + delete process.env.AWS_ACCESS_KEY_ID; + delete process.env.AWS_SECRET_ACCESS_KEY; + delete process.env.AWS_DEFAULT_REGION; + + // Simulate a serialized ChatBedrockConverse with Python naming (model_id, region_name) + // This matches the format that LangSmith Hub stores prompts with model configuration + const serialized = JSON.stringify({ + lc: 1, + type: "constructor", + id: [ + "langchain", + "chat_models", + "chat_bedrock_converse", + "ChatBedrockConverse", + ], + kwargs: { + model_id: "anthropic.claude-3-sonnet-20240229-v1:0", + region_name: "us-west-2", + temperature: 0.7, + credentials: { + accessKeyId: "test-key", + secretAccessKey: "test-secret", + }, + }, + }); + + const loaded = await load(serialized, { + importMap: { + chat_models__chat_bedrock_converse: { ChatBedrockConverse }, + }, + }); + + // Verify deserialization correctly maps model_id -> model and region_name -> region + expect(loaded).toBeInstanceOf(ChatBedrockConverse); + expect(loaded.model).toBe("anthropic.claude-3-sonnet-20240229-v1:0"); + expect(loaded.region).toBe("us-west-2"); + expect(loaded.temperature).toBe(0.7); +});