langchain
Version:
Typescript bindings for langchain
1 lines • 2.94 kB
Source Map (JSON)
{"version":3,"file":"withAgentName.cjs","names":["model:\n | LanguageModelLike\n | Runnable<unknown, unknown, RunnableConfig<Record<string, unknown>>>","agentNameMode: AgentNameMode","processInputMessage: (message: BaseMessageLike) => BaseMessageLike","processOutputMessage: (message: BaseMessage) => BaseMessage","_addInlineAgentName","_removeInlineAgentName","messages: BaseMessageLike[]","RunnableSequence","RunnableLambda"],"sources":["../../src/agents/withAgentName.ts"],"sourcesContent":["import { BaseMessage, BaseMessageLike } from \"@langchain/core/messages\";\nimport { LanguageModelLike } from \"@langchain/core/language_models/base\";\nimport {\n Runnable,\n RunnableLambda,\n RunnableSequence,\n type RunnableConfig,\n} from \"@langchain/core/runnables\";\n\nimport {\n AgentNameMode,\n _addInlineAgentName,\n _removeInlineAgentName,\n} from \"./utils.js\";\n\n/**\n * Attach formatted agent names to the messages passed to and from a language model.\n *\n * This is useful for making a message history with multiple agents more coherent.\n *\n * NOTE: agent name is consumed from the message.name field.\n * If you're using an agent built with createAgent, name is automatically set.\n * If you're building a custom agent, make sure to set the name on the AI message returned by the LLM.\n *\n * @param model - Language model to add agent name formatting to\n * @param agentNameMode - How to expose the agent name to the LLM\n * - \"inline\": Add the agent name directly into the content field of the AI message using XML-style tags.\n * Example: \"How can I help you\" -> \"<name>agent_name</name><content>How can I help you?</content>\".\n */\nexport function withAgentName(\n model:\n | LanguageModelLike\n | Runnable<unknown, unknown, RunnableConfig<Record<string, unknown>>>,\n agentNameMode: AgentNameMode\n): LanguageModelLike {\n let processInputMessage: (message: BaseMessageLike) => BaseMessageLike;\n let processOutputMessage: (message: BaseMessage) => BaseMessage;\n\n if (agentNameMode === \"inline\") {\n processInputMessage = _addInlineAgentName;\n processOutputMessage = _removeInlineAgentName;\n } else {\n throw new Error(\n `Invalid agent name mode: ${agentNameMode}. Needs to be one of: \"inline\"`\n );\n }\n\n function processInputMessages(\n messages: BaseMessageLike[]\n ): BaseMessageLike[] {\n return messages.map(processInputMessage);\n }\n\n return RunnableSequence.from([\n RunnableLambda.from(processInputMessages),\n model,\n RunnableLambda.from(processOutputMessage),\n ]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,cACdA,OAGAC,eACmB;CACnB,IAAIC;CACJ,IAAIC;AAEJ,KAAI,kBAAkB,UAAU;EAC9B,sBAAsBC;EACtB,uBAAuBC;CACxB,MACC,OAAM,IAAI,MACR,CAAC,yBAAyB,EAAE,cAAc,8BAA8B,CAAC;CAI7E,SAAS,qBACPC,UACmB;AACnB,SAAO,SAAS,IAAI,oBAAoB;CACzC;AAED,QAAOC,4CAAiB,KAAK;EAC3BC,0CAAe,KAAK,qBAAqB;EACzC;EACAA,0CAAe,KAAK,qBAAqB;CAC1C,EAAC;AACH"}