@langchain/classic 1.0.33 → 1.0.35
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 +14 -0
- package/dist/agents/chat/index.cjs.map +1 -1
- package/dist/agents/chat/index.js.map +1 -1
- package/dist/agents/chat/outputParser.cjs.map +1 -1
- package/dist/agents/chat/outputParser.js.map +1 -1
- package/dist/agents/chat_convo/index.cjs.map +1 -1
- package/dist/agents/chat_convo/index.js.map +1 -1
- package/dist/agents/chat_convo/outputParser.cjs.map +1 -1
- package/dist/agents/chat_convo/outputParser.js.map +1 -1
- package/dist/agents/executor.cjs.map +1 -1
- package/dist/agents/executor.js.map +1 -1
- package/dist/agents/format_scratchpad/log.cjs.map +1 -1
- package/dist/agents/format_scratchpad/log.js.map +1 -1
- package/dist/agents/format_scratchpad/log_to_message.cjs.map +1 -1
- package/dist/agents/format_scratchpad/log_to_message.js.map +1 -1
- package/dist/agents/initialize.cjs.map +1 -1
- package/dist/agents/initialize.js.map +1 -1
- package/dist/agents/mrkl/index.cjs.map +1 -1
- package/dist/agents/mrkl/index.js.map +1 -1
- package/dist/agents/mrkl/outputParser.cjs.map +1 -1
- package/dist/agents/mrkl/outputParser.js.map +1 -1
- package/dist/agents/openai_functions/index.cjs.map +1 -1
- package/dist/agents/openai_functions/index.js.map +1 -1
- package/dist/agents/openai_tools/index.cjs.map +1 -1
- package/dist/agents/openai_tools/index.js.map +1 -1
- package/dist/agents/react/index.cjs.map +1 -1
- package/dist/agents/react/index.js.map +1 -1
- package/dist/agents/react/output_parser.cjs.map +1 -1
- package/dist/agents/react/output_parser.js.map +1 -1
- package/dist/agents/structured_chat/index.cjs.map +1 -1
- package/dist/agents/structured_chat/index.js.map +1 -1
- package/dist/agents/structured_chat/outputParser.cjs.map +1 -1
- package/dist/agents/structured_chat/outputParser.js.map +1 -1
- package/dist/agents/tool_calling/index.cjs.map +1 -1
- package/dist/agents/tool_calling/index.js.map +1 -1
- package/dist/agents/toolkits/conversational_retrieval/openai_functions.cjs.map +1 -1
- package/dist/agents/toolkits/conversational_retrieval/openai_functions.js.map +1 -1
- package/dist/agents/toolkits/conversational_retrieval/tool.cjs.map +1 -1
- package/dist/agents/toolkits/conversational_retrieval/tool.js.map +1 -1
- package/dist/agents/toolkits/json/json.cjs.map +1 -1
- package/dist/agents/toolkits/json/json.js.map +1 -1
- package/dist/agents/toolkits/openapi/openapi.cjs.map +1 -1
- package/dist/agents/toolkits/openapi/openapi.js.map +1 -1
- package/dist/agents/toolkits/sql/sql.cjs.map +1 -1
- package/dist/agents/toolkits/sql/sql.js.map +1 -1
- package/dist/agents/toolkits/vectorstore/vectorstore.cjs.map +1 -1
- package/dist/agents/toolkits/vectorstore/vectorstore.js.map +1 -1
- package/dist/agents/xml/index.cjs.map +1 -1
- package/dist/agents/xml/index.js.map +1 -1
- package/dist/chains/analyze_documents_chain.cjs.map +1 -1
- package/dist/chains/analyze_documents_chain.js.map +1 -1
- package/dist/chains/api/api_chain.cjs.map +1 -1
- package/dist/chains/api/api_chain.js.map +1 -1
- package/dist/chains/api/prompts.js.map +1 -1
- package/dist/chains/base.cjs.map +1 -1
- package/dist/chains/base.js.map +1 -1
- package/dist/chains/chat_vector_db_chain.cjs.map +1 -1
- package/dist/chains/chat_vector_db_chain.js.map +1 -1
- package/dist/chains/combine_docs_chain.cjs.map +1 -1
- package/dist/chains/combine_docs_chain.js.map +1 -1
- package/dist/chains/combine_documents/base.cjs.map +1 -1
- package/dist/chains/combine_documents/base.js.map +1 -1
- package/dist/chains/combine_documents/reduce.cjs.map +1 -1
- package/dist/chains/combine_documents/reduce.js.map +1 -1
- package/dist/chains/constitutional_ai/constitutional_prompts.cjs.map +1 -1
- package/dist/chains/constitutional_ai/constitutional_prompts.js.map +1 -1
- package/dist/chains/conversational_retrieval_chain.cjs.map +1 -1
- package/dist/chains/conversational_retrieval_chain.js.map +1 -1
- package/dist/chains/graph_qa/cypher.cjs.map +1 -1
- package/dist/chains/graph_qa/cypher.js.map +1 -1
- package/dist/chains/graph_qa/prompts.cjs.map +1 -1
- package/dist/chains/graph_qa/prompts.js.map +1 -1
- package/dist/chains/history_aware_retriever.cjs.map +1 -1
- package/dist/chains/history_aware_retriever.js.map +1 -1
- package/dist/chains/llm_chain.cjs.map +1 -1
- package/dist/chains/llm_chain.js.map +1 -1
- package/dist/chains/openai_functions/base.cjs.map +1 -1
- package/dist/chains/openai_functions/base.js.map +1 -1
- package/dist/chains/openai_functions/openapi.cjs.map +1 -1
- package/dist/chains/openai_functions/openapi.js.map +1 -1
- package/dist/chains/query_constructor/index.cjs.map +1 -1
- package/dist/chains/query_constructor/index.js.map +1 -1
- package/dist/chains/query_constructor/parser.cjs.map +1 -1
- package/dist/chains/query_constructor/parser.js.map +1 -1
- package/dist/chains/query_constructor/prompt.cjs.map +1 -1
- package/dist/chains/query_constructor/prompt.js.map +1 -1
- package/dist/chains/question_answering/load.cjs.map +1 -1
- package/dist/chains/question_answering/load.js.map +1 -1
- package/dist/chains/question_answering/map_reduce_prompts.cjs.map +1 -1
- package/dist/chains/question_answering/map_reduce_prompts.js.map +1 -1
- package/dist/chains/question_answering/refine_prompts.cjs.map +1 -1
- package/dist/chains/question_answering/refine_prompts.js.map +1 -1
- package/dist/chains/question_answering/stuff_prompts.cjs.map +1 -1
- package/dist/chains/question_answering/stuff_prompts.js.map +1 -1
- package/dist/chains/retrieval.cjs.map +1 -1
- package/dist/chains/retrieval.js.map +1 -1
- package/dist/chains/router/multi_prompt.cjs.map +1 -1
- package/dist/chains/router/multi_prompt.js.map +1 -1
- package/dist/chains/router/multi_retrieval_qa.cjs.map +1 -1
- package/dist/chains/router/multi_retrieval_qa.js.map +1 -1
- package/dist/chains/sql_db/sql_db_chain.cjs.map +1 -1
- package/dist/chains/sql_db/sql_db_chain.js.map +1 -1
- package/dist/chains/summarization/load.cjs.map +1 -1
- package/dist/chains/summarization/load.js.map +1 -1
- package/dist/chains/summarization/refine_prompts.cjs.map +1 -1
- package/dist/chains/summarization/refine_prompts.js.map +1 -1
- package/dist/chains/summarization/stuff_prompts.cjs.map +1 -1
- package/dist/chains/summarization/stuff_prompts.js.map +1 -1
- package/dist/chat_models/universal.cjs.map +1 -1
- package/dist/chat_models/universal.js.map +1 -1
- package/dist/document_loaders/fs/json.cjs.map +1 -1
- package/dist/document_loaders/fs/json.js.map +1 -1
- package/dist/document_loaders/fs/multi_file.cjs.map +1 -1
- package/dist/document_loaders/fs/multi_file.js.map +1 -1
- package/dist/document_transformers/openai_functions.cjs.map +1 -1
- package/dist/document_transformers/openai_functions.js.map +1 -1
- package/dist/evaluation/agents/prompt.cjs.map +1 -1
- package/dist/evaluation/agents/prompt.js.map +1 -1
- package/dist/evaluation/comparison/pairwise.cjs.map +1 -1
- package/dist/evaluation/comparison/pairwise.js.map +1 -1
- package/dist/evaluation/comparison/prompt.cjs.map +1 -1
- package/dist/evaluation/comparison/prompt.js.map +1 -1
- package/dist/evaluation/criteria/criteria.cjs.map +1 -1
- package/dist/evaluation/criteria/criteria.js.map +1 -1
- package/dist/evaluation/criteria/prompt.cjs.map +1 -1
- package/dist/evaluation/criteria/prompt.js.map +1 -1
- package/dist/evaluation/embedding_distance/base.cjs.map +1 -1
- package/dist/evaluation/embedding_distance/base.js.map +1 -1
- package/dist/evaluation/qa/eval_chain.cjs.map +1 -1
- package/dist/evaluation/qa/eval_chain.js.map +1 -1
- package/dist/evaluation/qa/prompt.cjs.map +1 -1
- package/dist/evaluation/qa/prompt.js.map +1 -1
- package/dist/experimental/autogpt/agent.cjs.map +1 -1
- package/dist/experimental/autogpt/agent.js.map +1 -1
- package/dist/experimental/autogpt/prompt.cjs.map +1 -1
- package/dist/experimental/autogpt/prompt.js.map +1 -1
- package/dist/experimental/autogpt/prompt_generator.cjs.map +1 -1
- package/dist/experimental/autogpt/prompt_generator.js.map +1 -1
- package/dist/experimental/babyagi/agent.cjs.map +1 -1
- package/dist/experimental/babyagi/agent.js.map +1 -1
- package/dist/experimental/babyagi/task_creation.cjs.map +1 -1
- package/dist/experimental/babyagi/task_creation.js.map +1 -1
- package/dist/experimental/babyagi/task_execution.cjs.map +1 -1
- package/dist/experimental/babyagi/task_execution.js.map +1 -1
- package/dist/experimental/babyagi/task_prioritization.cjs.map +1 -1
- package/dist/experimental/babyagi/task_prioritization.js.map +1 -1
- package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_chain.cjs.map +1 -1
- package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_chain.js.map +1 -1
- package/dist/experimental/generative_agents/generative_agent.cjs.map +1 -1
- package/dist/experimental/generative_agents/generative_agent.js.map +1 -1
- package/dist/experimental/generative_agents/generative_agent_memory.cjs.map +1 -1
- package/dist/experimental/generative_agents/generative_agent_memory.js.map +1 -1
- package/dist/experimental/masking/regex_masking_transformer.cjs.map +1 -1
- package/dist/experimental/masking/regex_masking_transformer.js.map +1 -1
- package/dist/experimental/openai_assistant/index.cjs.map +1 -1
- package/dist/experimental/openai_assistant/index.js.map +1 -1
- package/dist/experimental/plan_and_execute/agent_executor.cjs.map +1 -1
- package/dist/experimental/plan_and_execute/agent_executor.js.map +1 -1
- package/dist/experimental/plan_and_execute/base.cjs.map +1 -1
- package/dist/experimental/plan_and_execute/base.js.map +1 -1
- package/dist/experimental/prompts/handlebars.cjs.map +1 -1
- package/dist/experimental/prompts/handlebars.js.map +1 -1
- package/dist/hub/base.cjs.map +1 -1
- package/dist/hub/base.js.map +1 -1
- package/dist/hub/index.cjs.map +1 -1
- package/dist/hub/index.js.map +1 -1
- package/dist/hub/node.cjs.map +1 -1
- package/dist/hub/node.js.map +1 -1
- package/dist/memory/buffer_memory.cjs.map +1 -1
- package/dist/memory/buffer_memory.js.map +1 -1
- package/dist/memory/buffer_token_memory.cjs.map +1 -1
- package/dist/memory/buffer_token_memory.js.map +1 -1
- package/dist/memory/buffer_window_memory.cjs.map +1 -1
- package/dist/memory/buffer_window_memory.js.map +1 -1
- package/dist/memory/entity_memory.cjs.map +1 -1
- package/dist/memory/entity_memory.js.map +1 -1
- package/dist/memory/prompt.cjs.map +1 -1
- package/dist/memory/prompt.js.map +1 -1
- package/dist/memory/summary.cjs.map +1 -1
- package/dist/memory/summary.js.map +1 -1
- package/dist/output_parsers/expression.cjs.map +1 -1
- package/dist/output_parsers/expression.js.map +1 -1
- package/dist/output_parsers/expression_type_handlers/base.cjs.map +1 -1
- package/dist/output_parsers/expression_type_handlers/base.js.map +1 -1
- package/dist/output_parsers/expression_type_handlers/factory.cjs.map +1 -1
- package/dist/output_parsers/expression_type_handlers/factory.js.map +1 -1
- package/dist/output_parsers/expression_type_handlers/identifier_handler.cjs.map +1 -1
- package/dist/output_parsers/expression_type_handlers/identifier_handler.js.map +1 -1
- package/dist/output_parsers/expression_type_handlers/property_assignment_handler.cjs.map +1 -1
- package/dist/output_parsers/expression_type_handlers/property_assignment_handler.js.map +1 -1
- package/dist/output_parsers/expression_type_handlers/string_literal_handler.cjs.map +1 -1
- package/dist/output_parsers/expression_type_handlers/string_literal_handler.js.map +1 -1
- package/dist/output_parsers/fix.cjs.map +1 -1
- package/dist/output_parsers/fix.js.map +1 -1
- package/dist/output_parsers/http_response.cjs.map +1 -1
- package/dist/output_parsers/http_response.js.map +1 -1
- package/dist/output_parsers/openai_functions.cjs.map +1 -1
- package/dist/output_parsers/openai_functions.js.map +1 -1
- package/dist/output_parsers/openai_tools.cjs.map +1 -1
- package/dist/output_parsers/openai_tools.js.map +1 -1
- package/dist/output_parsers/prompts.cjs.map +1 -1
- package/dist/output_parsers/prompts.js.map +1 -1
- package/dist/output_parsers/structured.cjs.map +1 -1
- package/dist/output_parsers/structured.js.map +1 -1
- package/dist/retrievers/contextual_compression.cjs.map +1 -1
- package/dist/retrievers/contextual_compression.js.map +1 -1
- package/dist/retrievers/document_compressors/chain_extract.cjs.map +1 -1
- package/dist/retrievers/document_compressors/chain_extract.js.map +1 -1
- package/dist/retrievers/ensemble.cjs.map +1 -1
- package/dist/retrievers/ensemble.js.map +1 -1
- package/dist/retrievers/hyde.cjs.map +1 -1
- package/dist/retrievers/hyde.js.map +1 -1
- package/dist/retrievers/multi_query.cjs.map +1 -1
- package/dist/retrievers/multi_query.js.map +1 -1
- package/dist/retrievers/multi_vector.cjs.map +1 -1
- package/dist/retrievers/multi_vector.js.map +1 -1
- package/dist/retrievers/parent_document.cjs.map +1 -1
- package/dist/retrievers/parent_document.js.map +1 -1
- package/dist/retrievers/score_threshold.cjs.map +1 -1
- package/dist/retrievers/score_threshold.js.map +1 -1
- package/dist/smith/runner_utils.cjs.map +1 -1
- package/dist/smith/runner_utils.js.map +1 -1
- package/dist/storage/encoder_backed.cjs.map +1 -1
- package/dist/storage/encoder_backed.js.map +1 -1
- package/dist/storage/file_system.cjs.map +1 -1
- package/dist/storage/file_system.js.map +1 -1
- package/dist/tools/json.cjs.map +1 -1
- package/dist/tools/json.js.map +1 -1
- package/dist/tools/requests.cjs.map +1 -1
- package/dist/tools/requests.js.map +1 -1
- package/dist/tools/retriever.cjs.map +1 -1
- package/dist/tools/retriever.js.map +1 -1
- package/dist/tools/sql.cjs.map +1 -1
- package/dist/tools/sql.js.map +1 -1
- package/dist/tools/webbrowser.cjs.map +1 -1
- package/dist/tools/webbrowser.js.map +1 -1
- package/dist/util/hub.cjs.map +1 -1
- package/dist/util/hub.js.map +1 -1
- package/dist/util/load.cjs.map +1 -1
- package/dist/util/load.js.map +1 -1
- package/dist/util/openapi.cjs.map +1 -1
- package/dist/util/openapi.js.map +1 -1
- package/dist/util/sql_utils.cjs.map +1 -1
- package/dist/util/sql_utils.js.map +1 -1
- package/dist/vectorstores/memory.cjs.map +1 -1
- package/dist/vectorstores/memory.js.map +1 -1
- package/package.json +48 -49
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.cjs","names":["BaseToolkit","RequestsGetTool","RequestsPostTool","createJsonAgent","JsonToolkit","DynamicTool","JSON_EXPLORER_DESCRIPTION","OPENAPI_PREFIX","OPENAPI_SUFFIX","ZeroShotAgent","LLMChain","AgentExecutor"],"sources":["../../../../src/agents/toolkits/openapi/openapi.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { ToolInterface } from \"@langchain/core/tools\";\nimport { DynamicTool, BaseToolkit } from \"@langchain/core/tools\";\nimport { JsonSpec } from \"../../../tools/json.js\";\nimport { AgentExecutor } from \"../../executor.js\";\nimport {\n OPENAPI_PREFIX,\n OPENAPI_SUFFIX,\n JSON_EXPLORER_DESCRIPTION,\n} from \"./prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { ZeroShotCreatePromptArgs, ZeroShotAgent } from \"../../mrkl/index.js\";\nimport {\n Headers,\n RequestsGetTool,\n RequestsPostTool,\n} from \"../../../tools/requests.js\";\nimport { createJsonAgent, JsonToolkit } from \"../json/json.js\";\n\n/**\n * Represents a toolkit for making HTTP requests. It initializes the\n * request tools based on the provided headers.\n */\nexport class RequestsToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n constructor(headers?: Headers) {\n super();\n this.tools = [new RequestsGetTool(headers), new RequestsPostTool(headers)];\n }\n}\n\n/**\n * Extends the `RequestsToolkit` class and adds a dynamic tool for\n * exploring JSON data. It creates a JSON agent using the `JsonToolkit`\n * and the provided language model, and adds the JSON explorer tool to the\n * toolkit.\n * @example\n * ```typescript\n * const toolkit = new OpenApiToolkit(\n * new JsonSpec({\n * }),\n * new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * {\n * \"Content-Type\": \"application/json\",\n * Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,\n * },\n * );\n *\n * const result = await toolkit.invoke({\n * input:\n * \"Make a POST request to openai /completions. The prompt should be 'tell me a joke.'\",\n * });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class OpenApiToolkit extends RequestsToolkit {\n constructor(\n jsonSpec: JsonSpec,\n llm: BaseLanguageModelInterface,\n headers?: Headers\n ) {\n super(headers);\n const jsonAgent = createJsonAgent(llm, new JsonToolkit(jsonSpec));\n this.tools = [\n ...this.tools,\n new DynamicTool({\n name: \"json_explorer\",\n func: async (input: string) => {\n const result = await jsonAgent.call({ input });\n return result.output as string;\n },\n description: JSON_EXPLORER_DESCRIPTION,\n }),\n ];\n }\n}\n\n/**\n * Creates an OpenAPI agent using a language model, an OpenAPI toolkit,\n * and optional prompt arguments. It creates a prompt for the agent using\n * the OpenAPI tools and the provided prefix and suffix. It then creates a\n * ZeroShotAgent with the prompt and the OpenAPI tools, and returns an\n * AgentExecutor for executing the agent with the tools.\n * @param llm The language model to use.\n * @param openApiToolkit The OpenAPI toolkit to use.\n * @param args Optional arguments for creating the prompt.\n * @returns An AgentExecutor for executing the agent with the tools.\n *\n * @security **Security Notice** This agent provides access to external APIs.\n * Use with caution as this agent can make API calls with arbitrary headers.\n * Exposing this agent to users could lead to security vulnerabilities. Consider\n * limiting access to what endpoints it can hit, what actions can be taken, and\n * more.\n *\n * @link See https://js.langchain.com/docs/security for more information.\n */\nexport function createOpenApiAgent(\n llm: BaseLanguageModelInterface,\n openApiToolkit: OpenApiToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = OPENAPI_PREFIX,\n suffix = OPENAPI_SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n\n const { tools } = openApiToolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({\n prompt,\n llm,\n });\n const toolNames = tools.map((tool) => tool.name);\n const agent = new ZeroShotAgent({ llmChain: chain, allowedTools: toolNames });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAuBA,IAAa,kBAAb,cAAqCA,sBAAAA,YAAY;CAC/C;CAEA,YAAY,SAAmB;AAC7B,SAAO;AACP,OAAK,QAAQ,CAAC,IAAIC,iBAAAA,gBAAgB,QAAQ,EAAE,IAAIC,iBAAAA,iBAAiB,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B9E,IAAa,iBAAb,cAAoC,gBAAgB;CAClD,YACE,UACA,KACA,SACA;AACA,QAAM,QAAQ;EACd,MAAM,YAAYC,aAAAA,gBAAgB,KAAK,IAAIC,aAAAA,YAAY,SAAS,CAAC;AACjE,OAAK,QAAQ,CACX,GAAG,KAAK,OACR,IAAIC,sBAAAA,YAAY;GACd,MAAM;GACN,MAAM,OAAO,UAAkB;AAE7B,
|
|
1
|
+
{"version":3,"file":"openapi.cjs","names":["BaseToolkit","RequestsGetTool","RequestsPostTool","createJsonAgent","JsonToolkit","DynamicTool","JSON_EXPLORER_DESCRIPTION","OPENAPI_PREFIX","OPENAPI_SUFFIX","ZeroShotAgent","LLMChain","AgentExecutor"],"sources":["../../../../src/agents/toolkits/openapi/openapi.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { ToolInterface } from \"@langchain/core/tools\";\nimport { DynamicTool, BaseToolkit } from \"@langchain/core/tools\";\nimport { JsonSpec } from \"../../../tools/json.js\";\nimport { AgentExecutor } from \"../../executor.js\";\nimport {\n OPENAPI_PREFIX,\n OPENAPI_SUFFIX,\n JSON_EXPLORER_DESCRIPTION,\n} from \"./prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { ZeroShotCreatePromptArgs, ZeroShotAgent } from \"../../mrkl/index.js\";\nimport {\n Headers,\n RequestsGetTool,\n RequestsPostTool,\n} from \"../../../tools/requests.js\";\nimport { createJsonAgent, JsonToolkit } from \"../json/json.js\";\n\n/**\n * Represents a toolkit for making HTTP requests. It initializes the\n * request tools based on the provided headers.\n */\nexport class RequestsToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n constructor(headers?: Headers) {\n super();\n this.tools = [new RequestsGetTool(headers), new RequestsPostTool(headers)];\n }\n}\n\n/**\n * Extends the `RequestsToolkit` class and adds a dynamic tool for\n * exploring JSON data. It creates a JSON agent using the `JsonToolkit`\n * and the provided language model, and adds the JSON explorer tool to the\n * toolkit.\n * @example\n * ```typescript\n * const toolkit = new OpenApiToolkit(\n * new JsonSpec({\n * }),\n * new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * {\n * \"Content-Type\": \"application/json\",\n * Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,\n * },\n * );\n *\n * const result = await toolkit.invoke({\n * input:\n * \"Make a POST request to openai /completions. The prompt should be 'tell me a joke.'\",\n * });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class OpenApiToolkit extends RequestsToolkit {\n constructor(\n jsonSpec: JsonSpec,\n llm: BaseLanguageModelInterface,\n headers?: Headers\n ) {\n super(headers);\n const jsonAgent = createJsonAgent(llm, new JsonToolkit(jsonSpec));\n this.tools = [\n ...this.tools,\n new DynamicTool({\n name: \"json_explorer\",\n func: async (input: string) => {\n const result = await jsonAgent.call({ input });\n return result.output as string;\n },\n description: JSON_EXPLORER_DESCRIPTION,\n }),\n ];\n }\n}\n\n/**\n * Creates an OpenAPI agent using a language model, an OpenAPI toolkit,\n * and optional prompt arguments. It creates a prompt for the agent using\n * the OpenAPI tools and the provided prefix and suffix. It then creates a\n * ZeroShotAgent with the prompt and the OpenAPI tools, and returns an\n * AgentExecutor for executing the agent with the tools.\n * @param llm The language model to use.\n * @param openApiToolkit The OpenAPI toolkit to use.\n * @param args Optional arguments for creating the prompt.\n * @returns An AgentExecutor for executing the agent with the tools.\n *\n * @security **Security Notice** This agent provides access to external APIs.\n * Use with caution as this agent can make API calls with arbitrary headers.\n * Exposing this agent to users could lead to security vulnerabilities. Consider\n * limiting access to what endpoints it can hit, what actions can be taken, and\n * more.\n *\n * @link See https://js.langchain.com/docs/security for more information.\n */\nexport function createOpenApiAgent(\n llm: BaseLanguageModelInterface,\n openApiToolkit: OpenApiToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = OPENAPI_PREFIX,\n suffix = OPENAPI_SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n\n const { tools } = openApiToolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({\n prompt,\n llm,\n });\n const toolNames = tools.map((tool) => tool.name);\n const agent = new ZeroShotAgent({ llmChain: chain, allowedTools: toolNames });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAuBA,IAAa,kBAAb,cAAqCA,sBAAAA,YAAY;CAC/C;CAEA,YAAY,SAAmB;AAC7B,SAAO;AACP,OAAK,QAAQ,CAAC,IAAIC,iBAAAA,gBAAgB,QAAQ,EAAE,IAAIC,iBAAAA,iBAAiB,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B9E,IAAa,iBAAb,cAAoC,gBAAgB;CAClD,YACE,UACA,KACA,SACA;AACA,QAAM,QAAQ;EACd,MAAM,YAAYC,aAAAA,gBAAgB,KAAK,IAAIC,aAAAA,YAAY,SAAS,CAAC;AACjE,OAAK,QAAQ,CACX,GAAG,KAAK,OACR,IAAIC,sBAAAA,YAAY;GACd,MAAM;GACN,MAAM,OAAO,UAAkB;AAE7B,YAAO,MADc,UAAU,KAAK,EAAE,OAAO,CAAC,EAChC;;GAEhB,aAAaC,eAAAA;GACd,CAAC,CACH;;;;;;;;;;;;;;;;;;;;;;AAuBL,SAAgB,mBACd,KACA,gBACA,MACA;CACA,MAAM,EACJ,SAASC,eAAAA,gBACT,SAASC,eAAAA,gBACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;CAEd,MAAM,EAAE,UAAU;CAWlB,MAAM,QAAQ,IAAIC,cAAAA,cAAc;EAAE,UAAU,IAL1BC,kBAAAA,SAAS;GACzB,QANaD,cAAAA,cAAc,aAAa,OAAO;IAC/C;IACA;IACA;IACD,CAEO;GACN;GACD,CAEgD;EAAE,cADjC,MAAM,KAAK,SAAS,KAAK,KAC+B;EAAE,CAAC;AAC7E,QAAOE,iBAAAA,cAAc,kBAAkB;EACrC;EACA;EACA,yBAAyB;EAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","names":[],"sources":["../../../../src/agents/toolkits/openapi/openapi.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { ToolInterface } from \"@langchain/core/tools\";\nimport { DynamicTool, BaseToolkit } from \"@langchain/core/tools\";\nimport { JsonSpec } from \"../../../tools/json.js\";\nimport { AgentExecutor } from \"../../executor.js\";\nimport {\n OPENAPI_PREFIX,\n OPENAPI_SUFFIX,\n JSON_EXPLORER_DESCRIPTION,\n} from \"./prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { ZeroShotCreatePromptArgs, ZeroShotAgent } from \"../../mrkl/index.js\";\nimport {\n Headers,\n RequestsGetTool,\n RequestsPostTool,\n} from \"../../../tools/requests.js\";\nimport { createJsonAgent, JsonToolkit } from \"../json/json.js\";\n\n/**\n * Represents a toolkit for making HTTP requests. It initializes the\n * request tools based on the provided headers.\n */\nexport class RequestsToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n constructor(headers?: Headers) {\n super();\n this.tools = [new RequestsGetTool(headers), new RequestsPostTool(headers)];\n }\n}\n\n/**\n * Extends the `RequestsToolkit` class and adds a dynamic tool for\n * exploring JSON data. It creates a JSON agent using the `JsonToolkit`\n * and the provided language model, and adds the JSON explorer tool to the\n * toolkit.\n * @example\n * ```typescript\n * const toolkit = new OpenApiToolkit(\n * new JsonSpec({\n * }),\n * new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * {\n * \"Content-Type\": \"application/json\",\n * Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,\n * },\n * );\n *\n * const result = await toolkit.invoke({\n * input:\n * \"Make a POST request to openai /completions. The prompt should be 'tell me a joke.'\",\n * });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class OpenApiToolkit extends RequestsToolkit {\n constructor(\n jsonSpec: JsonSpec,\n llm: BaseLanguageModelInterface,\n headers?: Headers\n ) {\n super(headers);\n const jsonAgent = createJsonAgent(llm, new JsonToolkit(jsonSpec));\n this.tools = [\n ...this.tools,\n new DynamicTool({\n name: \"json_explorer\",\n func: async (input: string) => {\n const result = await jsonAgent.call({ input });\n return result.output as string;\n },\n description: JSON_EXPLORER_DESCRIPTION,\n }),\n ];\n }\n}\n\n/**\n * Creates an OpenAPI agent using a language model, an OpenAPI toolkit,\n * and optional prompt arguments. It creates a prompt for the agent using\n * the OpenAPI tools and the provided prefix and suffix. It then creates a\n * ZeroShotAgent with the prompt and the OpenAPI tools, and returns an\n * AgentExecutor for executing the agent with the tools.\n * @param llm The language model to use.\n * @param openApiToolkit The OpenAPI toolkit to use.\n * @param args Optional arguments for creating the prompt.\n * @returns An AgentExecutor for executing the agent with the tools.\n *\n * @security **Security Notice** This agent provides access to external APIs.\n * Use with caution as this agent can make API calls with arbitrary headers.\n * Exposing this agent to users could lead to security vulnerabilities. Consider\n * limiting access to what endpoints it can hit, what actions can be taken, and\n * more.\n *\n * @link See https://js.langchain.com/docs/security for more information.\n */\nexport function createOpenApiAgent(\n llm: BaseLanguageModelInterface,\n openApiToolkit: OpenApiToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = OPENAPI_PREFIX,\n suffix = OPENAPI_SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n\n const { tools } = openApiToolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({\n prompt,\n llm,\n });\n const toolNames = tools.map((tool) => tool.name);\n const agent = new ZeroShotAgent({ llmChain: chain, allowedTools: toolNames });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;AAuBA,IAAa,kBAAb,cAAqC,YAAY;CAC/C;CAEA,YAAY,SAAmB;AAC7B,SAAO;AACP,OAAK,QAAQ,CAAC,IAAI,gBAAgB,QAAQ,EAAE,IAAI,iBAAiB,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B9E,IAAa,iBAAb,cAAoC,gBAAgB;CAClD,YACE,UACA,KACA,SACA;AACA,QAAM,QAAQ;EACd,MAAM,YAAY,gBAAgB,KAAK,IAAI,YAAY,SAAS,CAAC;AACjE,OAAK,QAAQ,CACX,GAAG,KAAK,OACR,IAAI,YAAY;GACd,MAAM;GACN,MAAM,OAAO,UAAkB;AAE7B,
|
|
1
|
+
{"version":3,"file":"openapi.js","names":[],"sources":["../../../../src/agents/toolkits/openapi/openapi.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { ToolInterface } from \"@langchain/core/tools\";\nimport { DynamicTool, BaseToolkit } from \"@langchain/core/tools\";\nimport { JsonSpec } from \"../../../tools/json.js\";\nimport { AgentExecutor } from \"../../executor.js\";\nimport {\n OPENAPI_PREFIX,\n OPENAPI_SUFFIX,\n JSON_EXPLORER_DESCRIPTION,\n} from \"./prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { ZeroShotCreatePromptArgs, ZeroShotAgent } from \"../../mrkl/index.js\";\nimport {\n Headers,\n RequestsGetTool,\n RequestsPostTool,\n} from \"../../../tools/requests.js\";\nimport { createJsonAgent, JsonToolkit } from \"../json/json.js\";\n\n/**\n * Represents a toolkit for making HTTP requests. It initializes the\n * request tools based on the provided headers.\n */\nexport class RequestsToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n constructor(headers?: Headers) {\n super();\n this.tools = [new RequestsGetTool(headers), new RequestsPostTool(headers)];\n }\n}\n\n/**\n * Extends the `RequestsToolkit` class and adds a dynamic tool for\n * exploring JSON data. It creates a JSON agent using the `JsonToolkit`\n * and the provided language model, and adds the JSON explorer tool to the\n * toolkit.\n * @example\n * ```typescript\n * const toolkit = new OpenApiToolkit(\n * new JsonSpec({\n * }),\n * new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * {\n * \"Content-Type\": \"application/json\",\n * Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,\n * },\n * );\n *\n * const result = await toolkit.invoke({\n * input:\n * \"Make a POST request to openai /completions. The prompt should be 'tell me a joke.'\",\n * });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class OpenApiToolkit extends RequestsToolkit {\n constructor(\n jsonSpec: JsonSpec,\n llm: BaseLanguageModelInterface,\n headers?: Headers\n ) {\n super(headers);\n const jsonAgent = createJsonAgent(llm, new JsonToolkit(jsonSpec));\n this.tools = [\n ...this.tools,\n new DynamicTool({\n name: \"json_explorer\",\n func: async (input: string) => {\n const result = await jsonAgent.call({ input });\n return result.output as string;\n },\n description: JSON_EXPLORER_DESCRIPTION,\n }),\n ];\n }\n}\n\n/**\n * Creates an OpenAPI agent using a language model, an OpenAPI toolkit,\n * and optional prompt arguments. It creates a prompt for the agent using\n * the OpenAPI tools and the provided prefix and suffix. It then creates a\n * ZeroShotAgent with the prompt and the OpenAPI tools, and returns an\n * AgentExecutor for executing the agent with the tools.\n * @param llm The language model to use.\n * @param openApiToolkit The OpenAPI toolkit to use.\n * @param args Optional arguments for creating the prompt.\n * @returns An AgentExecutor for executing the agent with the tools.\n *\n * @security **Security Notice** This agent provides access to external APIs.\n * Use with caution as this agent can make API calls with arbitrary headers.\n * Exposing this agent to users could lead to security vulnerabilities. Consider\n * limiting access to what endpoints it can hit, what actions can be taken, and\n * more.\n *\n * @link See https://js.langchain.com/docs/security for more information.\n */\nexport function createOpenApiAgent(\n llm: BaseLanguageModelInterface,\n openApiToolkit: OpenApiToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = OPENAPI_PREFIX,\n suffix = OPENAPI_SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n\n const { tools } = openApiToolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({\n prompt,\n llm,\n });\n const toolNames = tools.map((tool) => tool.name);\n const agent = new ZeroShotAgent({ llmChain: chain, allowedTools: toolNames });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;AAuBA,IAAa,kBAAb,cAAqC,YAAY;CAC/C;CAEA,YAAY,SAAmB;AAC7B,SAAO;AACP,OAAK,QAAQ,CAAC,IAAI,gBAAgB,QAAQ,EAAE,IAAI,iBAAiB,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B9E,IAAa,iBAAb,cAAoC,gBAAgB;CAClD,YACE,UACA,KACA,SACA;AACA,QAAM,QAAQ;EACd,MAAM,YAAY,gBAAgB,KAAK,IAAI,YAAY,SAAS,CAAC;AACjE,OAAK,QAAQ,CACX,GAAG,KAAK,OACR,IAAI,YAAY;GACd,MAAM;GACN,MAAM,OAAO,UAAkB;AAE7B,YAAO,MADc,UAAU,KAAK,EAAE,OAAO,CAAC,EAChC;;GAEhB,aAAa;GACd,CAAC,CACH;;;;;;;;;;;;;;;;;;;;;;AAuBL,SAAgB,mBACd,KACA,gBACA,MACA;CACA,MAAM,EACJ,SAAS,gBACT,SAAS,gBACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;CAEd,MAAM,EAAE,UAAU;CAWlB,MAAM,QAAQ,IAAI,cAAc;EAAE,UAAU,IAL1B,SAAS;GACzB,QANa,cAAc,aAAa,OAAO;IAC/C;IACA;IACA;IACD,CAEO;GACN;GACD,CAEgD;EAAE,cADjC,MAAM,KAAK,SAAS,KAAK,KAC+B;EAAE,CAAC;AAC7E,QAAO,cAAc,kBAAkB;EACrC;EACA;EACA,yBAAyB;EAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.cjs","names":["BaseToolkit","QuerySqlTool","InfoSqlTool","ListTablesSqlTool","QueryCheckerTool","SQL_PREFIX","SQL_SUFFIX","ZeroShotAgent","LLMChain","AgentExecutor"],"sources":["../../../../src/agents/toolkits/sql/sql.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { type ToolInterface, BaseToolkit } from \"@langchain/core/tools\";\nimport { renderTemplate } from \"@langchain/core/prompts\";\nimport {\n InfoSqlTool,\n ListTablesSqlTool,\n QueryCheckerTool,\n QuerySqlTool,\n} from \"../../../tools/sql.js\";\nimport { SQL_PREFIX, SQL_SUFFIX } from \"./prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { ZeroShotAgent, ZeroShotCreatePromptArgs } from \"../../mrkl/index.js\";\nimport { AgentExecutor } from \"../../executor.js\";\nimport { SqlDatabase } from \"../../../sql_db.js\";\n\n/**\n * Interface that extends ZeroShotCreatePromptArgs and adds an optional\n * topK parameter for specifying the number of results to return.\n */\nexport interface SqlCreatePromptArgs extends ZeroShotCreatePromptArgs {\n /** Number of results to return. */\n topK?: number;\n}\n\n/**\n * Class that represents a toolkit for working with SQL databases. It\n * initializes SQL tools based on the provided SQL database.\n * @example\n * ```typescript\n * const model = new ChatOpenAI({ model: \"gpt-4o-mini\" });\n * const toolkit = new SqlToolkit(sqlDb, model);\n * const executor = createSqlAgent(model, toolkit);\n * const result = await executor.invoke({ input: 'List the total sales per country. Which country's customers spent the most?' });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class SqlToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n db: SqlDatabase;\n\n dialect = \"sqlite\";\n\n constructor(db: SqlDatabase, llm: BaseLanguageModelInterface) {\n super();\n this.db = db;\n this.tools = [\n new QuerySqlTool(db),\n new InfoSqlTool(db),\n new ListTablesSqlTool(db),\n new QueryCheckerTool({ llm }),\n ];\n }\n}\n\nexport function createSqlAgent(\n llm: BaseLanguageModelInterface,\n toolkit: SqlToolkit,\n args?: SqlCreatePromptArgs\n) {\n const {\n prefix = SQL_PREFIX,\n suffix = SQL_SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n topK = 10,\n } = args ?? {};\n const { tools } = toolkit;\n const formattedPrefix = renderTemplate(prefix, \"f-string\", {\n dialect: toolkit.dialect,\n top_k: topK,\n });\n\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix: formattedPrefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoCA,IAAa,aAAb,cAAgCA,sBAAAA,YAAY;CAC1C;CAEA;CAEA,UAAU;CAEV,YAAY,IAAiB,KAAiC;AAC5D,SAAO;AACP,OAAK,KAAK;AACV,OAAK,QAAQ;GACX,IAAIC,kBAAAA,aAAa,GAAG;GACpB,IAAIC,kBAAAA,YAAY,GAAG;GACnB,IAAIC,kBAAAA,kBAAkB,GAAG;GACzB,IAAIC,kBAAAA,iBAAiB,EAAE,KAAK,CAAC;GAC9B;;;AAIL,SAAgB,eACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAASC,eAAAA,YACT,SAASC,eAAAA,YACT,iBAAiB,CAAC,SAAS,mBAAmB,EAC9C,OAAO,OACL,QAAQ,EAAE;CACd,MAAM,EAAE,UAAU;CAClB,MAAM,mBAAA,GAAA,wBAAA,gBAAiC,QAAQ,YAAY;EACzD,SAAS,QAAQ;EACjB,OAAO;EACR,CAAC;CAQF,MAAM,QAAQ,IAAIC,cAAAA,cAAc;EAC9B,
|
|
1
|
+
{"version":3,"file":"sql.cjs","names":["BaseToolkit","QuerySqlTool","InfoSqlTool","ListTablesSqlTool","QueryCheckerTool","SQL_PREFIX","SQL_SUFFIX","ZeroShotAgent","LLMChain","AgentExecutor"],"sources":["../../../../src/agents/toolkits/sql/sql.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { type ToolInterface, BaseToolkit } from \"@langchain/core/tools\";\nimport { renderTemplate } from \"@langchain/core/prompts\";\nimport {\n InfoSqlTool,\n ListTablesSqlTool,\n QueryCheckerTool,\n QuerySqlTool,\n} from \"../../../tools/sql.js\";\nimport { SQL_PREFIX, SQL_SUFFIX } from \"./prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { ZeroShotAgent, ZeroShotCreatePromptArgs } from \"../../mrkl/index.js\";\nimport { AgentExecutor } from \"../../executor.js\";\nimport { SqlDatabase } from \"../../../sql_db.js\";\n\n/**\n * Interface that extends ZeroShotCreatePromptArgs and adds an optional\n * topK parameter for specifying the number of results to return.\n */\nexport interface SqlCreatePromptArgs extends ZeroShotCreatePromptArgs {\n /** Number of results to return. */\n topK?: number;\n}\n\n/**\n * Class that represents a toolkit for working with SQL databases. It\n * initializes SQL tools based on the provided SQL database.\n * @example\n * ```typescript\n * const model = new ChatOpenAI({ model: \"gpt-4o-mini\" });\n * const toolkit = new SqlToolkit(sqlDb, model);\n * const executor = createSqlAgent(model, toolkit);\n * const result = await executor.invoke({ input: 'List the total sales per country. Which country's customers spent the most?' });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class SqlToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n db: SqlDatabase;\n\n dialect = \"sqlite\";\n\n constructor(db: SqlDatabase, llm: BaseLanguageModelInterface) {\n super();\n this.db = db;\n this.tools = [\n new QuerySqlTool(db),\n new InfoSqlTool(db),\n new ListTablesSqlTool(db),\n new QueryCheckerTool({ llm }),\n ];\n }\n}\n\nexport function createSqlAgent(\n llm: BaseLanguageModelInterface,\n toolkit: SqlToolkit,\n args?: SqlCreatePromptArgs\n) {\n const {\n prefix = SQL_PREFIX,\n suffix = SQL_SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n topK = 10,\n } = args ?? {};\n const { tools } = toolkit;\n const formattedPrefix = renderTemplate(prefix, \"f-string\", {\n dialect: toolkit.dialect,\n top_k: topK,\n });\n\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix: formattedPrefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoCA,IAAa,aAAb,cAAgCA,sBAAAA,YAAY;CAC1C;CAEA;CAEA,UAAU;CAEV,YAAY,IAAiB,KAAiC;AAC5D,SAAO;AACP,OAAK,KAAK;AACV,OAAK,QAAQ;GACX,IAAIC,kBAAAA,aAAa,GAAG;GACpB,IAAIC,kBAAAA,YAAY,GAAG;GACnB,IAAIC,kBAAAA,kBAAkB,GAAG;GACzB,IAAIC,kBAAAA,iBAAiB,EAAE,KAAK,CAAC;GAC9B;;;AAIL,SAAgB,eACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAASC,eAAAA,YACT,SAASC,eAAAA,YACT,iBAAiB,CAAC,SAAS,mBAAmB,EAC9C,OAAO,OACL,QAAQ,EAAE;CACd,MAAM,EAAE,UAAU;CAClB,MAAM,mBAAA,GAAA,wBAAA,gBAAiC,QAAQ,YAAY;EACzD,SAAS,QAAQ;EACjB,OAAO;EACR,CAAC;CAQF,MAAM,QAAQ,IAAIC,cAAAA,cAAc;EAC9B,UAAU,IAFMC,kBAAAA,SAAS;GAAE,QALdD,cAAAA,cAAc,aAAa,OAAO;IAC/C,QAAQ;IACR;IACA;IACD,CACkC;GAAE;GAAK,CAEzB;EACf,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;EACvC,CAAC;AACF,QAAOE,iBAAAA,cAAc,kBAAkB;EACrC;EACA;EACA,yBAAyB;EAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.js","names":[],"sources":["../../../../src/agents/toolkits/sql/sql.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { type ToolInterface, BaseToolkit } from \"@langchain/core/tools\";\nimport { renderTemplate } from \"@langchain/core/prompts\";\nimport {\n InfoSqlTool,\n ListTablesSqlTool,\n QueryCheckerTool,\n QuerySqlTool,\n} from \"../../../tools/sql.js\";\nimport { SQL_PREFIX, SQL_SUFFIX } from \"./prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { ZeroShotAgent, ZeroShotCreatePromptArgs } from \"../../mrkl/index.js\";\nimport { AgentExecutor } from \"../../executor.js\";\nimport { SqlDatabase } from \"../../../sql_db.js\";\n\n/**\n * Interface that extends ZeroShotCreatePromptArgs and adds an optional\n * topK parameter for specifying the number of results to return.\n */\nexport interface SqlCreatePromptArgs extends ZeroShotCreatePromptArgs {\n /** Number of results to return. */\n topK?: number;\n}\n\n/**\n * Class that represents a toolkit for working with SQL databases. It\n * initializes SQL tools based on the provided SQL database.\n * @example\n * ```typescript\n * const model = new ChatOpenAI({ model: \"gpt-4o-mini\" });\n * const toolkit = new SqlToolkit(sqlDb, model);\n * const executor = createSqlAgent(model, toolkit);\n * const result = await executor.invoke({ input: 'List the total sales per country. Which country's customers spent the most?' });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class SqlToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n db: SqlDatabase;\n\n dialect = \"sqlite\";\n\n constructor(db: SqlDatabase, llm: BaseLanguageModelInterface) {\n super();\n this.db = db;\n this.tools = [\n new QuerySqlTool(db),\n new InfoSqlTool(db),\n new ListTablesSqlTool(db),\n new QueryCheckerTool({ llm }),\n ];\n }\n}\n\nexport function createSqlAgent(\n llm: BaseLanguageModelInterface,\n toolkit: SqlToolkit,\n args?: SqlCreatePromptArgs\n) {\n const {\n prefix = SQL_PREFIX,\n suffix = SQL_SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n topK = 10,\n } = args ?? {};\n const { tools } = toolkit;\n const formattedPrefix = renderTemplate(prefix, \"f-string\", {\n dialect: toolkit.dialect,\n top_k: topK,\n });\n\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix: formattedPrefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoCA,IAAa,aAAb,cAAgC,YAAY;CAC1C;CAEA;CAEA,UAAU;CAEV,YAAY,IAAiB,KAAiC;AAC5D,SAAO;AACP,OAAK,KAAK;AACV,OAAK,QAAQ;GACX,IAAI,aAAa,GAAG;GACpB,IAAI,YAAY,GAAG;GACnB,IAAI,kBAAkB,GAAG;GACzB,IAAI,iBAAiB,EAAE,KAAK,CAAC;GAC9B;;;AAIL,SAAgB,eACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAAS,YACT,SAAS,YACT,iBAAiB,CAAC,SAAS,mBAAmB,EAC9C,OAAO,OACL,QAAQ,EAAE;CACd,MAAM,EAAE,UAAU;CAClB,MAAM,kBAAkB,eAAe,QAAQ,YAAY;EACzD,SAAS,QAAQ;EACjB,OAAO;EACR,CAAC;CAQF,MAAM,QAAQ,IAAI,cAAc;EAC9B,
|
|
1
|
+
{"version":3,"file":"sql.js","names":[],"sources":["../../../../src/agents/toolkits/sql/sql.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { type ToolInterface, BaseToolkit } from \"@langchain/core/tools\";\nimport { renderTemplate } from \"@langchain/core/prompts\";\nimport {\n InfoSqlTool,\n ListTablesSqlTool,\n QueryCheckerTool,\n QuerySqlTool,\n} from \"../../../tools/sql.js\";\nimport { SQL_PREFIX, SQL_SUFFIX } from \"./prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { ZeroShotAgent, ZeroShotCreatePromptArgs } from \"../../mrkl/index.js\";\nimport { AgentExecutor } from \"../../executor.js\";\nimport { SqlDatabase } from \"../../../sql_db.js\";\n\n/**\n * Interface that extends ZeroShotCreatePromptArgs and adds an optional\n * topK parameter for specifying the number of results to return.\n */\nexport interface SqlCreatePromptArgs extends ZeroShotCreatePromptArgs {\n /** Number of results to return. */\n topK?: number;\n}\n\n/**\n * Class that represents a toolkit for working with SQL databases. It\n * initializes SQL tools based on the provided SQL database.\n * @example\n * ```typescript\n * const model = new ChatOpenAI({ model: \"gpt-4o-mini\" });\n * const toolkit = new SqlToolkit(sqlDb, model);\n * const executor = createSqlAgent(model, toolkit);\n * const result = await executor.invoke({ input: 'List the total sales per country. Which country's customers spent the most?' });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class SqlToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n db: SqlDatabase;\n\n dialect = \"sqlite\";\n\n constructor(db: SqlDatabase, llm: BaseLanguageModelInterface) {\n super();\n this.db = db;\n this.tools = [\n new QuerySqlTool(db),\n new InfoSqlTool(db),\n new ListTablesSqlTool(db),\n new QueryCheckerTool({ llm }),\n ];\n }\n}\n\nexport function createSqlAgent(\n llm: BaseLanguageModelInterface,\n toolkit: SqlToolkit,\n args?: SqlCreatePromptArgs\n) {\n const {\n prefix = SQL_PREFIX,\n suffix = SQL_SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n topK = 10,\n } = args ?? {};\n const { tools } = toolkit;\n const formattedPrefix = renderTemplate(prefix, \"f-string\", {\n dialect: toolkit.dialect,\n top_k: topK,\n });\n\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix: formattedPrefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoCA,IAAa,aAAb,cAAgC,YAAY;CAC1C;CAEA;CAEA,UAAU;CAEV,YAAY,IAAiB,KAAiC;AAC5D,SAAO;AACP,OAAK,KAAK;AACV,OAAK,QAAQ;GACX,IAAI,aAAa,GAAG;GACpB,IAAI,YAAY,GAAG;GACnB,IAAI,kBAAkB,GAAG;GACzB,IAAI,iBAAiB,EAAE,KAAK,CAAC;GAC9B;;;AAIL,SAAgB,eACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAAS,YACT,SAAS,YACT,iBAAiB,CAAC,SAAS,mBAAmB,EAC9C,OAAO,OACL,QAAQ,EAAE;CACd,MAAM,EAAE,UAAU;CAClB,MAAM,kBAAkB,eAAe,QAAQ,YAAY;EACzD,SAAS,QAAQ;EACjB,OAAO;EACR,CAAC;CAQF,MAAM,QAAQ,IAAI,cAAc;EAC9B,UAAU,IAFM,SAAS;GAAE,QALd,cAAc,aAAa,OAAO;IAC/C,QAAQ;IACR;IACA;IACD,CACkC;GAAE;GAAK,CAEzB;EACf,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;EACvC,CAAC;AACF,QAAO,cAAc,kBAAkB;EACrC;EACA;EACA,yBAAyB;EAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vectorstore.cjs","names":["BaseToolkit","VectorStoreQATool","VECTOR_PREFIX","SUFFIX","ZeroShotAgent","LLMChain","AgentExecutor","VECTOR_ROUTER_PREFIX"],"sources":["../../../../src/agents/toolkits/vectorstore/vectorstore.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { VectorStoreInterface } from \"@langchain/core/vectorstores\";\nimport { ToolInterface, BaseToolkit } from \"@langchain/core/tools\";\nimport { VectorStoreQATool } from \"../../../tools/vectorstore.js\";\nimport { ZeroShotCreatePromptArgs, ZeroShotAgent } from \"../../mrkl/index.js\";\nimport { VECTOR_PREFIX, VECTOR_ROUTER_PREFIX } from \"./prompt.js\";\nimport { SUFFIX } from \"../../mrkl/prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { AgentExecutor } from \"../../executor.js\";\n\n/**\n * Interface that defines the information about a vector store, including\n * the vector store itself, its name, and description.\n */\nexport interface VectorStoreInfo {\n vectorStore: VectorStoreInterface;\n name: string;\n description: string;\n}\n\n/**\n * Class representing a toolkit for working with a single vector store. It\n * initializes the vector store QA tool based on the provided vector store\n * information and language model.\n * @example\n * ```typescript\n * const toolkit = new VectorStoreToolkit(\n * {\n * name: \"state_of_union_address\",\n * description: \"the most recent state of the Union address\",\n * vectorStore: new HNSWLib(),\n * },\n * new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * );\n * const result = await toolkit.invoke({\n * input:\n * \"What did biden say about Ketanji Brown Jackson in the state of the union address?\",\n * });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class VectorStoreToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n llm: BaseLanguageModelInterface;\n\n constructor(\n vectorStoreInfo: VectorStoreInfo,\n llm: BaseLanguageModelInterface\n ) {\n super();\n const description = VectorStoreQATool.getDescription(\n vectorStoreInfo.name,\n vectorStoreInfo.description\n );\n this.llm = llm;\n this.tools = [\n new VectorStoreQATool(vectorStoreInfo.name, description, {\n vectorStore: vectorStoreInfo.vectorStore,\n llm: this.llm,\n }),\n ];\n }\n}\n\n/**\n * Class representing a toolkit for working with multiple vector stores.\n * It initializes multiple vector store QA tools based on the provided\n * vector store information and language model.\n */\nexport class VectorStoreRouterToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n vectorStoreInfos: VectorStoreInfo[];\n\n llm: BaseLanguageModelInterface;\n\n constructor(\n vectorStoreInfos: VectorStoreInfo[],\n llm: BaseLanguageModelInterface\n ) {\n super();\n this.llm = llm;\n this.vectorStoreInfos = vectorStoreInfos;\n this.tools = vectorStoreInfos.map((vectorStoreInfo) => {\n const description = VectorStoreQATool.getDescription(\n vectorStoreInfo.name,\n vectorStoreInfo.description\n );\n return new VectorStoreQATool(vectorStoreInfo.name, description, {\n vectorStore: vectorStoreInfo.vectorStore,\n llm: this.llm,\n });\n });\n }\n}\n\nexport function createVectorStoreAgent(\n llm: BaseLanguageModelInterface,\n toolkit: VectorStoreToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = VECTOR_PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const { tools } = toolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n\nexport function createVectorStoreRouterAgent(\n llm: BaseLanguageModelInterface,\n toolkit: VectorStoreRouterToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = VECTOR_ROUTER_PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const { tools } = toolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,IAAa,qBAAb,cAAwCA,sBAAAA,YAAY;CAClD;CAEA;CAEA,YACE,iBACA,KACA;AACA,SAAO;EACP,MAAM,cAAcC,oBAAAA,kBAAkB,eACpC,gBAAgB,MAChB,gBAAgB,YACjB;AACD,OAAK,MAAM;AACX,OAAK,QAAQ,CACX,IAAIA,oBAAAA,kBAAkB,gBAAgB,MAAM,aAAa;GACvD,aAAa,gBAAgB;GAC7B,KAAK,KAAK;GACX,CAAC,CACH;;;;;;;;AASL,IAAa,2BAAb,cAA8CD,sBAAAA,YAAY;CACxD;CAEA;CAEA;CAEA,YACE,kBACA,KACA;AACA,SAAO;AACP,OAAK,MAAM;AACX,OAAK,mBAAmB;AACxB,OAAK,QAAQ,iBAAiB,KAAK,oBAAoB;GACrD,MAAM,cAAcC,oBAAAA,kBAAkB,eACpC,gBAAgB,MAChB,gBAAgB,YACjB;AACD,UAAO,IAAIA,oBAAAA,kBAAkB,gBAAgB,MAAM,aAAa;IAC9D,aAAa,gBAAgB;IAC7B,KAAK,KAAK;IACX,CAAC;IACF;;;AAIN,SAAgB,uBACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAASC,iBAAAA,eACT,SAASC,eAAAA,QACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;CACd,MAAM,EAAE,UAAU;CAOlB,MAAM,QAAQ,IAAIC,cAAAA,cAAc;EAC9B,
|
|
1
|
+
{"version":3,"file":"vectorstore.cjs","names":["BaseToolkit","VectorStoreQATool","VECTOR_PREFIX","SUFFIX","ZeroShotAgent","LLMChain","AgentExecutor","VECTOR_ROUTER_PREFIX"],"sources":["../../../../src/agents/toolkits/vectorstore/vectorstore.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { VectorStoreInterface } from \"@langchain/core/vectorstores\";\nimport { ToolInterface, BaseToolkit } from \"@langchain/core/tools\";\nimport { VectorStoreQATool } from \"../../../tools/vectorstore.js\";\nimport { ZeroShotCreatePromptArgs, ZeroShotAgent } from \"../../mrkl/index.js\";\nimport { VECTOR_PREFIX, VECTOR_ROUTER_PREFIX } from \"./prompt.js\";\nimport { SUFFIX } from \"../../mrkl/prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { AgentExecutor } from \"../../executor.js\";\n\n/**\n * Interface that defines the information about a vector store, including\n * the vector store itself, its name, and description.\n */\nexport interface VectorStoreInfo {\n vectorStore: VectorStoreInterface;\n name: string;\n description: string;\n}\n\n/**\n * Class representing a toolkit for working with a single vector store. It\n * initializes the vector store QA tool based on the provided vector store\n * information and language model.\n * @example\n * ```typescript\n * const toolkit = new VectorStoreToolkit(\n * {\n * name: \"state_of_union_address\",\n * description: \"the most recent state of the Union address\",\n * vectorStore: new HNSWLib(),\n * },\n * new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * );\n * const result = await toolkit.invoke({\n * input:\n * \"What did biden say about Ketanji Brown Jackson in the state of the union address?\",\n * });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class VectorStoreToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n llm: BaseLanguageModelInterface;\n\n constructor(\n vectorStoreInfo: VectorStoreInfo,\n llm: BaseLanguageModelInterface\n ) {\n super();\n const description = VectorStoreQATool.getDescription(\n vectorStoreInfo.name,\n vectorStoreInfo.description\n );\n this.llm = llm;\n this.tools = [\n new VectorStoreQATool(vectorStoreInfo.name, description, {\n vectorStore: vectorStoreInfo.vectorStore,\n llm: this.llm,\n }),\n ];\n }\n}\n\n/**\n * Class representing a toolkit for working with multiple vector stores.\n * It initializes multiple vector store QA tools based on the provided\n * vector store information and language model.\n */\nexport class VectorStoreRouterToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n vectorStoreInfos: VectorStoreInfo[];\n\n llm: BaseLanguageModelInterface;\n\n constructor(\n vectorStoreInfos: VectorStoreInfo[],\n llm: BaseLanguageModelInterface\n ) {\n super();\n this.llm = llm;\n this.vectorStoreInfos = vectorStoreInfos;\n this.tools = vectorStoreInfos.map((vectorStoreInfo) => {\n const description = VectorStoreQATool.getDescription(\n vectorStoreInfo.name,\n vectorStoreInfo.description\n );\n return new VectorStoreQATool(vectorStoreInfo.name, description, {\n vectorStore: vectorStoreInfo.vectorStore,\n llm: this.llm,\n });\n });\n }\n}\n\nexport function createVectorStoreAgent(\n llm: BaseLanguageModelInterface,\n toolkit: VectorStoreToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = VECTOR_PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const { tools } = toolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n\nexport function createVectorStoreRouterAgent(\n llm: BaseLanguageModelInterface,\n toolkit: VectorStoreRouterToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = VECTOR_ROUTER_PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const { tools } = toolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,IAAa,qBAAb,cAAwCA,sBAAAA,YAAY;CAClD;CAEA;CAEA,YACE,iBACA,KACA;AACA,SAAO;EACP,MAAM,cAAcC,oBAAAA,kBAAkB,eACpC,gBAAgB,MAChB,gBAAgB,YACjB;AACD,OAAK,MAAM;AACX,OAAK,QAAQ,CACX,IAAIA,oBAAAA,kBAAkB,gBAAgB,MAAM,aAAa;GACvD,aAAa,gBAAgB;GAC7B,KAAK,KAAK;GACX,CAAC,CACH;;;;;;;;AASL,IAAa,2BAAb,cAA8CD,sBAAAA,YAAY;CACxD;CAEA;CAEA;CAEA,YACE,kBACA,KACA;AACA,SAAO;AACP,OAAK,MAAM;AACX,OAAK,mBAAmB;AACxB,OAAK,QAAQ,iBAAiB,KAAK,oBAAoB;GACrD,MAAM,cAAcC,oBAAAA,kBAAkB,eACpC,gBAAgB,MAChB,gBAAgB,YACjB;AACD,UAAO,IAAIA,oBAAAA,kBAAkB,gBAAgB,MAAM,aAAa;IAC9D,aAAa,gBAAgB;IAC7B,KAAK,KAAK;IACX,CAAC;IACF;;;AAIN,SAAgB,uBACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAASC,iBAAAA,eACT,SAASC,eAAAA,QACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;CACd,MAAM,EAAE,UAAU;CAOlB,MAAM,QAAQ,IAAIC,cAAAA,cAAc;EAC9B,UAAU,IAFMC,kBAAAA,SAAS;GAAE,QALdD,cAAAA,cAAc,aAAa,OAAO;IAC/C;IACA;IACA;IACD,CACkC;GAAE;GAAK,CAEzB;EACf,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;EACvC,CAAC;AACF,QAAOE,iBAAAA,cAAc,kBAAkB;EACrC;EACA;EACA,yBAAyB;EAC1B,CAAC;;AAGJ,SAAgB,6BACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAASC,iBAAAA,sBACT,SAASJ,eAAAA,QACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;CACd,MAAM,EAAE,UAAU;CAOlB,MAAM,QAAQ,IAAIC,cAAAA,cAAc;EAC9B,UAAU,IAFMC,kBAAAA,SAAS;GAAE,QALdD,cAAAA,cAAc,aAAa,OAAO;IAC/C;IACA;IACA;IACD,CACkC;GAAE;GAAK,CAEzB;EACf,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;EACvC,CAAC;AACF,QAAOE,iBAAAA,cAAc,kBAAkB;EACrC;EACA;EACA,yBAAyB;EAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vectorstore.js","names":[],"sources":["../../../../src/agents/toolkits/vectorstore/vectorstore.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { VectorStoreInterface } from \"@langchain/core/vectorstores\";\nimport { ToolInterface, BaseToolkit } from \"@langchain/core/tools\";\nimport { VectorStoreQATool } from \"../../../tools/vectorstore.js\";\nimport { ZeroShotCreatePromptArgs, ZeroShotAgent } from \"../../mrkl/index.js\";\nimport { VECTOR_PREFIX, VECTOR_ROUTER_PREFIX } from \"./prompt.js\";\nimport { SUFFIX } from \"../../mrkl/prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { AgentExecutor } from \"../../executor.js\";\n\n/**\n * Interface that defines the information about a vector store, including\n * the vector store itself, its name, and description.\n */\nexport interface VectorStoreInfo {\n vectorStore: VectorStoreInterface;\n name: string;\n description: string;\n}\n\n/**\n * Class representing a toolkit for working with a single vector store. It\n * initializes the vector store QA tool based on the provided vector store\n * information and language model.\n * @example\n * ```typescript\n * const toolkit = new VectorStoreToolkit(\n * {\n * name: \"state_of_union_address\",\n * description: \"the most recent state of the Union address\",\n * vectorStore: new HNSWLib(),\n * },\n * new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * );\n * const result = await toolkit.invoke({\n * input:\n * \"What did biden say about Ketanji Brown Jackson in the state of the union address?\",\n * });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class VectorStoreToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n llm: BaseLanguageModelInterface;\n\n constructor(\n vectorStoreInfo: VectorStoreInfo,\n llm: BaseLanguageModelInterface\n ) {\n super();\n const description = VectorStoreQATool.getDescription(\n vectorStoreInfo.name,\n vectorStoreInfo.description\n );\n this.llm = llm;\n this.tools = [\n new VectorStoreQATool(vectorStoreInfo.name, description, {\n vectorStore: vectorStoreInfo.vectorStore,\n llm: this.llm,\n }),\n ];\n }\n}\n\n/**\n * Class representing a toolkit for working with multiple vector stores.\n * It initializes multiple vector store QA tools based on the provided\n * vector store information and language model.\n */\nexport class VectorStoreRouterToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n vectorStoreInfos: VectorStoreInfo[];\n\n llm: BaseLanguageModelInterface;\n\n constructor(\n vectorStoreInfos: VectorStoreInfo[],\n llm: BaseLanguageModelInterface\n ) {\n super();\n this.llm = llm;\n this.vectorStoreInfos = vectorStoreInfos;\n this.tools = vectorStoreInfos.map((vectorStoreInfo) => {\n const description = VectorStoreQATool.getDescription(\n vectorStoreInfo.name,\n vectorStoreInfo.description\n );\n return new VectorStoreQATool(vectorStoreInfo.name, description, {\n vectorStore: vectorStoreInfo.vectorStore,\n llm: this.llm,\n });\n });\n }\n}\n\nexport function createVectorStoreAgent(\n llm: BaseLanguageModelInterface,\n toolkit: VectorStoreToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = VECTOR_PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const { tools } = toolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n\nexport function createVectorStoreRouterAgent(\n llm: BaseLanguageModelInterface,\n toolkit: VectorStoreRouterToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = VECTOR_ROUTER_PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const { tools } = toolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,IAAa,qBAAb,cAAwC,YAAY;CAClD;CAEA;CAEA,YACE,iBACA,KACA;AACA,SAAO;EACP,MAAM,cAAc,kBAAkB,eACpC,gBAAgB,MAChB,gBAAgB,YACjB;AACD,OAAK,MAAM;AACX,OAAK,QAAQ,CACX,IAAI,kBAAkB,gBAAgB,MAAM,aAAa;GACvD,aAAa,gBAAgB;GAC7B,KAAK,KAAK;GACX,CAAC,CACH;;;;;;;;AASL,IAAa,2BAAb,cAA8C,YAAY;CACxD;CAEA;CAEA;CAEA,YACE,kBACA,KACA;AACA,SAAO;AACP,OAAK,MAAM;AACX,OAAK,mBAAmB;AACxB,OAAK,QAAQ,iBAAiB,KAAK,oBAAoB;GACrD,MAAM,cAAc,kBAAkB,eACpC,gBAAgB,MAChB,gBAAgB,YACjB;AACD,UAAO,IAAI,kBAAkB,gBAAgB,MAAM,aAAa;IAC9D,aAAa,gBAAgB;IAC7B,KAAK,KAAK;IACX,CAAC;IACF;;;AAIN,SAAgB,uBACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAAS,eACT,SAAS,QACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;CACd,MAAM,EAAE,UAAU;CAOlB,MAAM,QAAQ,IAAI,cAAc;EAC9B,
|
|
1
|
+
{"version":3,"file":"vectorstore.js","names":[],"sources":["../../../../src/agents/toolkits/vectorstore/vectorstore.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { VectorStoreInterface } from \"@langchain/core/vectorstores\";\nimport { ToolInterface, BaseToolkit } from \"@langchain/core/tools\";\nimport { VectorStoreQATool } from \"../../../tools/vectorstore.js\";\nimport { ZeroShotCreatePromptArgs, ZeroShotAgent } from \"../../mrkl/index.js\";\nimport { VECTOR_PREFIX, VECTOR_ROUTER_PREFIX } from \"./prompt.js\";\nimport { SUFFIX } from \"../../mrkl/prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { AgentExecutor } from \"../../executor.js\";\n\n/**\n * Interface that defines the information about a vector store, including\n * the vector store itself, its name, and description.\n */\nexport interface VectorStoreInfo {\n vectorStore: VectorStoreInterface;\n name: string;\n description: string;\n}\n\n/**\n * Class representing a toolkit for working with a single vector store. It\n * initializes the vector store QA tool based on the provided vector store\n * information and language model.\n * @example\n * ```typescript\n * const toolkit = new VectorStoreToolkit(\n * {\n * name: \"state_of_union_address\",\n * description: \"the most recent state of the Union address\",\n * vectorStore: new HNSWLib(),\n * },\n * new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * );\n * const result = await toolkit.invoke({\n * input:\n * \"What did biden say about Ketanji Brown Jackson in the state of the union address?\",\n * });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class VectorStoreToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n llm: BaseLanguageModelInterface;\n\n constructor(\n vectorStoreInfo: VectorStoreInfo,\n llm: BaseLanguageModelInterface\n ) {\n super();\n const description = VectorStoreQATool.getDescription(\n vectorStoreInfo.name,\n vectorStoreInfo.description\n );\n this.llm = llm;\n this.tools = [\n new VectorStoreQATool(vectorStoreInfo.name, description, {\n vectorStore: vectorStoreInfo.vectorStore,\n llm: this.llm,\n }),\n ];\n }\n}\n\n/**\n * Class representing a toolkit for working with multiple vector stores.\n * It initializes multiple vector store QA tools based on the provided\n * vector store information and language model.\n */\nexport class VectorStoreRouterToolkit extends BaseToolkit {\n tools: ToolInterface[];\n\n vectorStoreInfos: VectorStoreInfo[];\n\n llm: BaseLanguageModelInterface;\n\n constructor(\n vectorStoreInfos: VectorStoreInfo[],\n llm: BaseLanguageModelInterface\n ) {\n super();\n this.llm = llm;\n this.vectorStoreInfos = vectorStoreInfos;\n this.tools = vectorStoreInfos.map((vectorStoreInfo) => {\n const description = VectorStoreQATool.getDescription(\n vectorStoreInfo.name,\n vectorStoreInfo.description\n );\n return new VectorStoreQATool(vectorStoreInfo.name, description, {\n vectorStore: vectorStoreInfo.vectorStore,\n llm: this.llm,\n });\n });\n }\n}\n\nexport function createVectorStoreAgent(\n llm: BaseLanguageModelInterface,\n toolkit: VectorStoreToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = VECTOR_PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const { tools } = toolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n\nexport function createVectorStoreRouterAgent(\n llm: BaseLanguageModelInterface,\n toolkit: VectorStoreRouterToolkit,\n args?: ZeroShotCreatePromptArgs\n) {\n const {\n prefix = VECTOR_ROUTER_PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const { tools } = toolkit;\n const prompt = ZeroShotAgent.createPrompt(tools, {\n prefix,\n suffix,\n inputVariables,\n });\n const chain = new LLMChain({ prompt, llm });\n const agent = new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n });\n return AgentExecutor.fromAgentAndTools({\n agent,\n tools,\n returnIntermediateSteps: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,IAAa,qBAAb,cAAwC,YAAY;CAClD;CAEA;CAEA,YACE,iBACA,KACA;AACA,SAAO;EACP,MAAM,cAAc,kBAAkB,eACpC,gBAAgB,MAChB,gBAAgB,YACjB;AACD,OAAK,MAAM;AACX,OAAK,QAAQ,CACX,IAAI,kBAAkB,gBAAgB,MAAM,aAAa;GACvD,aAAa,gBAAgB;GAC7B,KAAK,KAAK;GACX,CAAC,CACH;;;;;;;;AASL,IAAa,2BAAb,cAA8C,YAAY;CACxD;CAEA;CAEA;CAEA,YACE,kBACA,KACA;AACA,SAAO;AACP,OAAK,MAAM;AACX,OAAK,mBAAmB;AACxB,OAAK,QAAQ,iBAAiB,KAAK,oBAAoB;GACrD,MAAM,cAAc,kBAAkB,eACpC,gBAAgB,MAChB,gBAAgB,YACjB;AACD,UAAO,IAAI,kBAAkB,gBAAgB,MAAM,aAAa;IAC9D,aAAa,gBAAgB;IAC7B,KAAK,KAAK;IACX,CAAC;IACF;;;AAIN,SAAgB,uBACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAAS,eACT,SAAS,QACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;CACd,MAAM,EAAE,UAAU;CAOlB,MAAM,QAAQ,IAAI,cAAc;EAC9B,UAAU,IAFM,SAAS;GAAE,QALd,cAAc,aAAa,OAAO;IAC/C;IACA;IACA;IACD,CACkC;GAAE;GAAK,CAEzB;EACf,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;EACvC,CAAC;AACF,QAAO,cAAc,kBAAkB;EACrC;EACA;EACA,yBAAyB;EAC1B,CAAC;;AAGJ,SAAgB,6BACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAAS,sBACT,SAAS,QACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;CACd,MAAM,EAAE,UAAU;CAOlB,MAAM,QAAQ,IAAI,cAAc;EAC9B,UAAU,IAFM,SAAS;GAAE,QALd,cAAc,aAAa,OAAO;IAC/C;IACA;IACA;IACD,CACkC;GAAE;GAAK,CAEzB;EACf,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;EACvC,CAAC;AACF,QAAO,cAAc,kBAAkB;EACrC;EACA;EACA,yBAAyB;EAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["BaseSingleActionAgent","XMLAgentOutputParser","ChatPromptTemplate","HumanMessagePromptTemplate","AGENT_INSTRUCTIONS","AIMessagePromptTemplate","LLMChain","renderTextDescription","AgentRunnableSequence","RunnablePassthrough","formatXml"],"sources":["../../../src/agents/xml/index.ts"],"sourcesContent":["import type {\n BaseLanguageModel,\n BaseLanguageModelInterface,\n} from \"@langchain/core/language_models/base\";\nimport type { ToolInterface } from \"@langchain/core/tools\";\nimport { RunnablePassthrough } from \"@langchain/core/runnables\";\nimport type { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { AgentStep, AgentAction, AgentFinish } from \"@langchain/core/agents\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n AIMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManager } from \"@langchain/core/callbacks/manager\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport {\n AgentArgs,\n AgentRunnableSequence,\n BaseSingleActionAgent,\n} from \"../agent.js\";\nimport { AGENT_INSTRUCTIONS } from \"./prompt.js\";\nimport { XMLAgentOutputParser } from \"./output_parser.js\";\nimport { renderTextDescription } from \"../../tools/render.js\";\nimport { formatXml } from \"../format_scratchpad/xml.js\";\n\n/**\n * Interface for the input to the XMLAgent class.\n */\nexport interface XMLAgentInput {\n tools: ToolInterface[];\n llmChain: LLMChain;\n}\n\n/**\n * Class that represents an agent that uses XML tags.\n */\nexport class XMLAgent extends BaseSingleActionAgent implements XMLAgentInput {\n static lc_name() {\n return \"XMLAgent\";\n }\n\n lc_namespace = [\"langchain\", \"agents\", \"xml\"];\n\n tools: ToolInterface[];\n\n llmChain: LLMChain;\n\n outputParser: XMLAgentOutputParser = new XMLAgentOutputParser();\n\n _agentType() {\n return \"xml\" as const;\n }\n\n constructor(fields: XMLAgentInput) {\n super(fields);\n this.tools = fields.tools;\n this.llmChain = fields.llmChain;\n }\n\n get inputKeys() {\n return [\"input\"];\n }\n\n static createPrompt() {\n return ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(AGENT_INSTRUCTIONS),\n AIMessagePromptTemplate.fromTemplate(\"{intermediate_steps}\"),\n ]);\n }\n\n /**\n * Plans the next action or finish state of the agent based on the\n * provided steps, inputs, and optional callback manager.\n * @param steps The steps to consider in planning.\n * @param inputs The inputs to consider in planning.\n * @param callbackManager Optional CallbackManager to use in planning.\n * @returns A Promise that resolves to an AgentAction or AgentFinish object representing the planned action or finish state.\n */\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n let log = \"\";\n for (const { action, observation } of steps) {\n log += `<tool>${action.tool}</tool><tool_input>${action.toolInput}</tool_input><observation>${observation}</observation>`;\n }\n let tools = \"\";\n for (const tool of this.tools) {\n tools += `${tool.name}: ${tool.description}\\n`;\n }\n const _inputs = {\n intermediate_steps: log,\n tools,\n question: inputs.input,\n stop: [\"</tool_input>\", \"</final_answer>\"],\n };\n const response = await this.llmChain.call(_inputs, callbackManager);\n return this.outputParser.parse(response[this.llmChain.outputKey]);\n }\n\n /**\n * Creates an XMLAgent from a BaseLanguageModel and a list of tools.\n * @param llm The BaseLanguageModel to use.\n * @param tools The tools to be used by the agent.\n * @param args Optional arguments for creating the agent.\n * @returns An instance of XMLAgent.\n */\n static fromLLMAndTools(\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args?: XMLAgentInput & Pick<AgentArgs, \"callbacks\">\n ) {\n const prompt = XMLAgent.createPrompt();\n const chain = new LLMChain({\n prompt,\n llm,\n callbacks: args?.callbacks,\n });\n return new XMLAgent({\n llmChain: chain,\n tools,\n });\n }\n}\n\n/**\n * Params used by the createXmlAgent function.\n */\nexport type CreateXmlAgentParams = {\n /** LLM to use for the agent. */\n llm: BaseLanguageModelInterface;\n /** Tools this agent has access to. */\n tools: ToolInterface[];\n /**\n * The prompt to use. Must have input keys for\n * `tools` and `agent_scratchpad`.\n */\n prompt: BasePromptTemplate;\n /**\n * Whether to invoke the underlying model in streaming mode,\n * allowing streaming of intermediate steps. Defaults to true.\n */\n streamRunnable?: boolean;\n};\n\n/**\n * Create an agent that uses XML to format its logic.\n * @param params Params required to create the agent. Includes an LLM, tools, and prompt.\n * @returns A runnable sequence representing an agent. It takes as input all the same input\n * variables as the prompt passed in does. It returns as output either an\n * AgentAction or AgentFinish.\n *\n * @example\n * ```typescript\n * import { AgentExecutor, createXmlAgent } from \"langchain/agents\";\n * import { pull } from \"langchain/hub\";\n * import type { PromptTemplate } from \"@langchain/core/prompts\";\n *\n * import { ChatAnthropic } from \"@langchain/anthropic\";\n *\n * // Define the tools the agent will have access to.\n * const tools = [...];\n *\n * // Get the prompt to use - you can modify this!\n * // If you want to see the prompt in full, you can at:\n * // https://smith.langchain.com/hub/hwchase17/xml-agent-convo\n * const prompt = await pull<PromptTemplate>(\"hwchase17/xml-agent-convo\");\n *\n * const llm = new ChatAnthropic({\n * temperature: 0,\n * });\n *\n * const agent = await createXmlAgent({\n * llm,\n * tools,\n * prompt,\n * });\n *\n * const agentExecutor = new AgentExecutor({\n * agent,\n * tools,\n * });\n *\n * const result = await agentExecutor.invoke({\n * input: \"what is LangChain?\",\n * });\n *\n * // With chat history\n * const result2 = await agentExecutor.invoke({\n * input: \"what's my name?\",\n * // Notice that chat_history is a string, since this prompt is aimed at LLMs, not chat models\n * chat_history: \"Human: Hi! My name is Cob\\nAI: Hello Cob! Nice to meet you\",\n * });\n * ```\n */\nexport async function createXmlAgent({\n llm,\n tools,\n prompt,\n streamRunnable,\n}: CreateXmlAgentParams) {\n const missingVariables = [\"tools\", \"agent_scratchpad\"].filter(\n (v) => !prompt.inputVariables.includes(v)\n );\n if (missingVariables.length > 0) {\n throw new Error(\n `Provided prompt is missing required input variables: ${JSON.stringify(\n missingVariables\n )}`\n );\n }\n const partialedPrompt = await prompt.partial({\n tools: renderTextDescription(tools),\n });\n // TODO: Add .bind to core runnable interface.\n const llmWithStop = (llm as BaseLanguageModel).withConfig({\n stop: [\"</tool_input>\", \"</final_answer>\"],\n });\n const agent = AgentRunnableSequence.fromRunnables(\n [\n RunnablePassthrough.assign({\n agent_scratchpad: (input: { steps: AgentStep[] }) =>\n formatXml(input.steps),\n }),\n partialedPrompt,\n llmWithStop,\n new XMLAgentOutputParser(),\n ],\n {\n name: \"XMLAgent\",\n streamRunnable,\n singleAction: true,\n }\n );\n return agent;\n}\n"],"mappings":";;;;;;;;;;;;;AAqCA,IAAa,WAAb,MAAa,iBAAiBA,cAAAA,sBAA+C;CAC3E,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAU;EAAM;CAE7C;CAEA;CAEA,eAAqC,IAAIC,iCAAAA,sBAAsB;CAE/D,aAAa;AACX,SAAO;;CAGT,YAAY,QAAuB;AACjC,QAAM,OAAO;AACb,OAAK,QAAQ,OAAO;AACpB,OAAK,WAAW,OAAO;;CAGzB,IAAI,YAAY;AACd,SAAO,CAAC,QAAQ;;CAGlB,OAAO,eAAe;AACpB,SAAOC,wBAAAA,mBAAmB,aAAa,CACrCC,wBAAAA,2BAA2B,aAAaC,eAAAA,mBAAmB,EAC3DC,wBAAAA,wBAAwB,aAAa,uBAAuB,CAC7D,CAAC;;;;;;;;;;CAWJ,MAAM,KACJ,OACA,QACA,iBACoC;EACpC,IAAI,MAAM;AACV,OAAK,MAAM,EAAE,QAAQ,iBAAiB,MACpC,QAAO,SAAS,OAAO,KAAK,qBAAqB,OAAO,UAAU,4BAA4B,YAAY;EAE5G,IAAI,QAAQ;AACZ,OAAK,MAAM,QAAQ,KAAK,MACtB,UAAS,GAAG,KAAK,KAAK,IAAI,KAAK,YAAY;EAE7C,MAAM,UAAU;GACd,oBAAoB;GACpB;GACA,UAAU,OAAO;GACjB,MAAM,CAAC,iBAAiB,kBAAkB;GAC3C;EACD,MAAM,WAAW,MAAM,KAAK,SAAS,KAAK,SAAS,gBAAgB;AACnE,SAAO,KAAK,aAAa,MAAM,SAAS,KAAK,SAAS,WAAW;;;;;;;;;CAUnE,OAAO,gBACL,KACA,OACA,MACA;AAOA,SAAO,IAAI,SAAS;GAClB,
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["BaseSingleActionAgent","XMLAgentOutputParser","ChatPromptTemplate","HumanMessagePromptTemplate","AGENT_INSTRUCTIONS","AIMessagePromptTemplate","LLMChain","renderTextDescription","AgentRunnableSequence","RunnablePassthrough","formatXml"],"sources":["../../../src/agents/xml/index.ts"],"sourcesContent":["import type {\n BaseLanguageModel,\n BaseLanguageModelInterface,\n} from \"@langchain/core/language_models/base\";\nimport type { ToolInterface } from \"@langchain/core/tools\";\nimport { RunnablePassthrough } from \"@langchain/core/runnables\";\nimport type { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { AgentStep, AgentAction, AgentFinish } from \"@langchain/core/agents\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n AIMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManager } from \"@langchain/core/callbacks/manager\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport {\n AgentArgs,\n AgentRunnableSequence,\n BaseSingleActionAgent,\n} from \"../agent.js\";\nimport { AGENT_INSTRUCTIONS } from \"./prompt.js\";\nimport { XMLAgentOutputParser } from \"./output_parser.js\";\nimport { renderTextDescription } from \"../../tools/render.js\";\nimport { formatXml } from \"../format_scratchpad/xml.js\";\n\n/**\n * Interface for the input to the XMLAgent class.\n */\nexport interface XMLAgentInput {\n tools: ToolInterface[];\n llmChain: LLMChain;\n}\n\n/**\n * Class that represents an agent that uses XML tags.\n */\nexport class XMLAgent extends BaseSingleActionAgent implements XMLAgentInput {\n static lc_name() {\n return \"XMLAgent\";\n }\n\n lc_namespace = [\"langchain\", \"agents\", \"xml\"];\n\n tools: ToolInterface[];\n\n llmChain: LLMChain;\n\n outputParser: XMLAgentOutputParser = new XMLAgentOutputParser();\n\n _agentType() {\n return \"xml\" as const;\n }\n\n constructor(fields: XMLAgentInput) {\n super(fields);\n this.tools = fields.tools;\n this.llmChain = fields.llmChain;\n }\n\n get inputKeys() {\n return [\"input\"];\n }\n\n static createPrompt() {\n return ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(AGENT_INSTRUCTIONS),\n AIMessagePromptTemplate.fromTemplate(\"{intermediate_steps}\"),\n ]);\n }\n\n /**\n * Plans the next action or finish state of the agent based on the\n * provided steps, inputs, and optional callback manager.\n * @param steps The steps to consider in planning.\n * @param inputs The inputs to consider in planning.\n * @param callbackManager Optional CallbackManager to use in planning.\n * @returns A Promise that resolves to an AgentAction or AgentFinish object representing the planned action or finish state.\n */\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n let log = \"\";\n for (const { action, observation } of steps) {\n log += `<tool>${action.tool}</tool><tool_input>${action.toolInput}</tool_input><observation>${observation}</observation>`;\n }\n let tools = \"\";\n for (const tool of this.tools) {\n tools += `${tool.name}: ${tool.description}\\n`;\n }\n const _inputs = {\n intermediate_steps: log,\n tools,\n question: inputs.input,\n stop: [\"</tool_input>\", \"</final_answer>\"],\n };\n const response = await this.llmChain.call(_inputs, callbackManager);\n return this.outputParser.parse(response[this.llmChain.outputKey]);\n }\n\n /**\n * Creates an XMLAgent from a BaseLanguageModel and a list of tools.\n * @param llm The BaseLanguageModel to use.\n * @param tools The tools to be used by the agent.\n * @param args Optional arguments for creating the agent.\n * @returns An instance of XMLAgent.\n */\n static fromLLMAndTools(\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args?: XMLAgentInput & Pick<AgentArgs, \"callbacks\">\n ) {\n const prompt = XMLAgent.createPrompt();\n const chain = new LLMChain({\n prompt,\n llm,\n callbacks: args?.callbacks,\n });\n return new XMLAgent({\n llmChain: chain,\n tools,\n });\n }\n}\n\n/**\n * Params used by the createXmlAgent function.\n */\nexport type CreateXmlAgentParams = {\n /** LLM to use for the agent. */\n llm: BaseLanguageModelInterface;\n /** Tools this agent has access to. */\n tools: ToolInterface[];\n /**\n * The prompt to use. Must have input keys for\n * `tools` and `agent_scratchpad`.\n */\n prompt: BasePromptTemplate;\n /**\n * Whether to invoke the underlying model in streaming mode,\n * allowing streaming of intermediate steps. Defaults to true.\n */\n streamRunnable?: boolean;\n};\n\n/**\n * Create an agent that uses XML to format its logic.\n * @param params Params required to create the agent. Includes an LLM, tools, and prompt.\n * @returns A runnable sequence representing an agent. It takes as input all the same input\n * variables as the prompt passed in does. It returns as output either an\n * AgentAction or AgentFinish.\n *\n * @example\n * ```typescript\n * import { AgentExecutor, createXmlAgent } from \"langchain/agents\";\n * import { pull } from \"langchain/hub\";\n * import type { PromptTemplate } from \"@langchain/core/prompts\";\n *\n * import { ChatAnthropic } from \"@langchain/anthropic\";\n *\n * // Define the tools the agent will have access to.\n * const tools = [...];\n *\n * // Get the prompt to use - you can modify this!\n * // If you want to see the prompt in full, you can at:\n * // https://smith.langchain.com/hub/hwchase17/xml-agent-convo\n * const prompt = await pull<PromptTemplate>(\"hwchase17/xml-agent-convo\");\n *\n * const llm = new ChatAnthropic({\n * temperature: 0,\n * });\n *\n * const agent = await createXmlAgent({\n * llm,\n * tools,\n * prompt,\n * });\n *\n * const agentExecutor = new AgentExecutor({\n * agent,\n * tools,\n * });\n *\n * const result = await agentExecutor.invoke({\n * input: \"what is LangChain?\",\n * });\n *\n * // With chat history\n * const result2 = await agentExecutor.invoke({\n * input: \"what's my name?\",\n * // Notice that chat_history is a string, since this prompt is aimed at LLMs, not chat models\n * chat_history: \"Human: Hi! My name is Cob\\nAI: Hello Cob! Nice to meet you\",\n * });\n * ```\n */\nexport async function createXmlAgent({\n llm,\n tools,\n prompt,\n streamRunnable,\n}: CreateXmlAgentParams) {\n const missingVariables = [\"tools\", \"agent_scratchpad\"].filter(\n (v) => !prompt.inputVariables.includes(v)\n );\n if (missingVariables.length > 0) {\n throw new Error(\n `Provided prompt is missing required input variables: ${JSON.stringify(\n missingVariables\n )}`\n );\n }\n const partialedPrompt = await prompt.partial({\n tools: renderTextDescription(tools),\n });\n // TODO: Add .bind to core runnable interface.\n const llmWithStop = (llm as BaseLanguageModel).withConfig({\n stop: [\"</tool_input>\", \"</final_answer>\"],\n });\n const agent = AgentRunnableSequence.fromRunnables(\n [\n RunnablePassthrough.assign({\n agent_scratchpad: (input: { steps: AgentStep[] }) =>\n formatXml(input.steps),\n }),\n partialedPrompt,\n llmWithStop,\n new XMLAgentOutputParser(),\n ],\n {\n name: \"XMLAgent\",\n streamRunnable,\n singleAction: true,\n }\n );\n return agent;\n}\n"],"mappings":";;;;;;;;;;;;;AAqCA,IAAa,WAAb,MAAa,iBAAiBA,cAAAA,sBAA+C;CAC3E,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAU;EAAM;CAE7C;CAEA;CAEA,eAAqC,IAAIC,iCAAAA,sBAAsB;CAE/D,aAAa;AACX,SAAO;;CAGT,YAAY,QAAuB;AACjC,QAAM,OAAO;AACb,OAAK,QAAQ,OAAO;AACpB,OAAK,WAAW,OAAO;;CAGzB,IAAI,YAAY;AACd,SAAO,CAAC,QAAQ;;CAGlB,OAAO,eAAe;AACpB,SAAOC,wBAAAA,mBAAmB,aAAa,CACrCC,wBAAAA,2BAA2B,aAAaC,eAAAA,mBAAmB,EAC3DC,wBAAAA,wBAAwB,aAAa,uBAAuB,CAC7D,CAAC;;;;;;;;;;CAWJ,MAAM,KACJ,OACA,QACA,iBACoC;EACpC,IAAI,MAAM;AACV,OAAK,MAAM,EAAE,QAAQ,iBAAiB,MACpC,QAAO,SAAS,OAAO,KAAK,qBAAqB,OAAO,UAAU,4BAA4B,YAAY;EAE5G,IAAI,QAAQ;AACZ,OAAK,MAAM,QAAQ,KAAK,MACtB,UAAS,GAAG,KAAK,KAAK,IAAI,KAAK,YAAY;EAE7C,MAAM,UAAU;GACd,oBAAoB;GACpB;GACA,UAAU,OAAO;GACjB,MAAM,CAAC,iBAAiB,kBAAkB;GAC3C;EACD,MAAM,WAAW,MAAM,KAAK,SAAS,KAAK,SAAS,gBAAgB;AACnE,SAAO,KAAK,aAAa,MAAM,SAAS,KAAK,SAAS,WAAW;;;;;;;;;CAUnE,OAAO,gBACL,KACA,OACA,MACA;AAOA,SAAO,IAAI,SAAS;GAClB,UAAU,IANMC,kBAAAA,SAAS;IACzB,QAFa,SAAS,cAEhB;IACN;IACA,WAAW,MAAM;IAClB,CAEgB;GACf;GACD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EN,eAAsB,eAAe,EACnC,KACA,OACA,QACA,kBACuB;CACvB,MAAM,mBAAmB,CAAC,SAAS,mBAAmB,CAAC,QACpD,MAAM,CAAC,OAAO,eAAe,SAAS,EAAE,CAC1C;AACD,KAAI,iBAAiB,SAAS,EAC5B,OAAM,IAAI,MACR,wDAAwD,KAAK,UAC3D,iBACD,GACF;CAEH,MAAM,kBAAkB,MAAM,OAAO,QAAQ,EAC3C,OAAOC,qBAAAA,sBAAsB,MAAM,EACpC,CAAC;CAEF,MAAM,cAAe,IAA0B,WAAW,EACxD,MAAM,CAAC,iBAAiB,kBAAkB,EAC3C,CAAC;AAiBF,QAhBcC,cAAAA,sBAAsB,cAClC;EACEC,0BAAAA,oBAAoB,OAAO,EACzB,mBAAmB,UACjBC,qCAAAA,UAAU,MAAM,MAAM,EACzB,CAAC;EACF;EACA;EACA,IAAIT,iCAAAA,sBAAsB;EAC3B,EACD;EACE,MAAM;EACN;EACA,cAAc;EACf,CAES"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/agents/xml/index.ts"],"sourcesContent":["import type {\n BaseLanguageModel,\n BaseLanguageModelInterface,\n} from \"@langchain/core/language_models/base\";\nimport type { ToolInterface } from \"@langchain/core/tools\";\nimport { RunnablePassthrough } from \"@langchain/core/runnables\";\nimport type { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { AgentStep, AgentAction, AgentFinish } from \"@langchain/core/agents\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n AIMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManager } from \"@langchain/core/callbacks/manager\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport {\n AgentArgs,\n AgentRunnableSequence,\n BaseSingleActionAgent,\n} from \"../agent.js\";\nimport { AGENT_INSTRUCTIONS } from \"./prompt.js\";\nimport { XMLAgentOutputParser } from \"./output_parser.js\";\nimport { renderTextDescription } from \"../../tools/render.js\";\nimport { formatXml } from \"../format_scratchpad/xml.js\";\n\n/**\n * Interface for the input to the XMLAgent class.\n */\nexport interface XMLAgentInput {\n tools: ToolInterface[];\n llmChain: LLMChain;\n}\n\n/**\n * Class that represents an agent that uses XML tags.\n */\nexport class XMLAgent extends BaseSingleActionAgent implements XMLAgentInput {\n static lc_name() {\n return \"XMLAgent\";\n }\n\n lc_namespace = [\"langchain\", \"agents\", \"xml\"];\n\n tools: ToolInterface[];\n\n llmChain: LLMChain;\n\n outputParser: XMLAgentOutputParser = new XMLAgentOutputParser();\n\n _agentType() {\n return \"xml\" as const;\n }\n\n constructor(fields: XMLAgentInput) {\n super(fields);\n this.tools = fields.tools;\n this.llmChain = fields.llmChain;\n }\n\n get inputKeys() {\n return [\"input\"];\n }\n\n static createPrompt() {\n return ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(AGENT_INSTRUCTIONS),\n AIMessagePromptTemplate.fromTemplate(\"{intermediate_steps}\"),\n ]);\n }\n\n /**\n * Plans the next action or finish state of the agent based on the\n * provided steps, inputs, and optional callback manager.\n * @param steps The steps to consider in planning.\n * @param inputs The inputs to consider in planning.\n * @param callbackManager Optional CallbackManager to use in planning.\n * @returns A Promise that resolves to an AgentAction or AgentFinish object representing the planned action or finish state.\n */\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n let log = \"\";\n for (const { action, observation } of steps) {\n log += `<tool>${action.tool}</tool><tool_input>${action.toolInput}</tool_input><observation>${observation}</observation>`;\n }\n let tools = \"\";\n for (const tool of this.tools) {\n tools += `${tool.name}: ${tool.description}\\n`;\n }\n const _inputs = {\n intermediate_steps: log,\n tools,\n question: inputs.input,\n stop: [\"</tool_input>\", \"</final_answer>\"],\n };\n const response = await this.llmChain.call(_inputs, callbackManager);\n return this.outputParser.parse(response[this.llmChain.outputKey]);\n }\n\n /**\n * Creates an XMLAgent from a BaseLanguageModel and a list of tools.\n * @param llm The BaseLanguageModel to use.\n * @param tools The tools to be used by the agent.\n * @param args Optional arguments for creating the agent.\n * @returns An instance of XMLAgent.\n */\n static fromLLMAndTools(\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args?: XMLAgentInput & Pick<AgentArgs, \"callbacks\">\n ) {\n const prompt = XMLAgent.createPrompt();\n const chain = new LLMChain({\n prompt,\n llm,\n callbacks: args?.callbacks,\n });\n return new XMLAgent({\n llmChain: chain,\n tools,\n });\n }\n}\n\n/**\n * Params used by the createXmlAgent function.\n */\nexport type CreateXmlAgentParams = {\n /** LLM to use for the agent. */\n llm: BaseLanguageModelInterface;\n /** Tools this agent has access to. */\n tools: ToolInterface[];\n /**\n * The prompt to use. Must have input keys for\n * `tools` and `agent_scratchpad`.\n */\n prompt: BasePromptTemplate;\n /**\n * Whether to invoke the underlying model in streaming mode,\n * allowing streaming of intermediate steps. Defaults to true.\n */\n streamRunnable?: boolean;\n};\n\n/**\n * Create an agent that uses XML to format its logic.\n * @param params Params required to create the agent. Includes an LLM, tools, and prompt.\n * @returns A runnable sequence representing an agent. It takes as input all the same input\n * variables as the prompt passed in does. It returns as output either an\n * AgentAction or AgentFinish.\n *\n * @example\n * ```typescript\n * import { AgentExecutor, createXmlAgent } from \"langchain/agents\";\n * import { pull } from \"langchain/hub\";\n * import type { PromptTemplate } from \"@langchain/core/prompts\";\n *\n * import { ChatAnthropic } from \"@langchain/anthropic\";\n *\n * // Define the tools the agent will have access to.\n * const tools = [...];\n *\n * // Get the prompt to use - you can modify this!\n * // If you want to see the prompt in full, you can at:\n * // https://smith.langchain.com/hub/hwchase17/xml-agent-convo\n * const prompt = await pull<PromptTemplate>(\"hwchase17/xml-agent-convo\");\n *\n * const llm = new ChatAnthropic({\n * temperature: 0,\n * });\n *\n * const agent = await createXmlAgent({\n * llm,\n * tools,\n * prompt,\n * });\n *\n * const agentExecutor = new AgentExecutor({\n * agent,\n * tools,\n * });\n *\n * const result = await agentExecutor.invoke({\n * input: \"what is LangChain?\",\n * });\n *\n * // With chat history\n * const result2 = await agentExecutor.invoke({\n * input: \"what's my name?\",\n * // Notice that chat_history is a string, since this prompt is aimed at LLMs, not chat models\n * chat_history: \"Human: Hi! My name is Cob\\nAI: Hello Cob! Nice to meet you\",\n * });\n * ```\n */\nexport async function createXmlAgent({\n llm,\n tools,\n prompt,\n streamRunnable,\n}: CreateXmlAgentParams) {\n const missingVariables = [\"tools\", \"agent_scratchpad\"].filter(\n (v) => !prompt.inputVariables.includes(v)\n );\n if (missingVariables.length > 0) {\n throw new Error(\n `Provided prompt is missing required input variables: ${JSON.stringify(\n missingVariables\n )}`\n );\n }\n const partialedPrompt = await prompt.partial({\n tools: renderTextDescription(tools),\n });\n // TODO: Add .bind to core runnable interface.\n const llmWithStop = (llm as BaseLanguageModel).withConfig({\n stop: [\"</tool_input>\", \"</final_answer>\"],\n });\n const agent = AgentRunnableSequence.fromRunnables(\n [\n RunnablePassthrough.assign({\n agent_scratchpad: (input: { steps: AgentStep[] }) =>\n formatXml(input.steps),\n }),\n partialedPrompt,\n llmWithStop,\n new XMLAgentOutputParser(),\n ],\n {\n name: \"XMLAgent\",\n streamRunnable,\n singleAction: true,\n }\n );\n return agent;\n}\n"],"mappings":";;;;;;;;;;;;AAqCA,IAAa,WAAb,MAAa,iBAAiB,sBAA+C;CAC3E,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAU;EAAM;CAE7C;CAEA;CAEA,eAAqC,IAAI,sBAAsB;CAE/D,aAAa;AACX,SAAO;;CAGT,YAAY,QAAuB;AACjC,QAAM,OAAO;AACb,OAAK,QAAQ,OAAO;AACpB,OAAK,WAAW,OAAO;;CAGzB,IAAI,YAAY;AACd,SAAO,CAAC,QAAQ;;CAGlB,OAAO,eAAe;AACpB,SAAO,mBAAmB,aAAa,CACrC,2BAA2B,aAAa,mBAAmB,EAC3D,wBAAwB,aAAa,uBAAuB,CAC7D,CAAC;;;;;;;;;;CAWJ,MAAM,KACJ,OACA,QACA,iBACoC;EACpC,IAAI,MAAM;AACV,OAAK,MAAM,EAAE,QAAQ,iBAAiB,MACpC,QAAO,SAAS,OAAO,KAAK,qBAAqB,OAAO,UAAU,4BAA4B,YAAY;EAE5G,IAAI,QAAQ;AACZ,OAAK,MAAM,QAAQ,KAAK,MACtB,UAAS,GAAG,KAAK,KAAK,IAAI,KAAK,YAAY;EAE7C,MAAM,UAAU;GACd,oBAAoB;GACpB;GACA,UAAU,OAAO;GACjB,MAAM,CAAC,iBAAiB,kBAAkB;GAC3C;EACD,MAAM,WAAW,MAAM,KAAK,SAAS,KAAK,SAAS,gBAAgB;AACnE,SAAO,KAAK,aAAa,MAAM,SAAS,KAAK,SAAS,WAAW;;;;;;;;;CAUnE,OAAO,gBACL,KACA,OACA,MACA;AAOA,SAAO,IAAI,SAAS;GAClB,
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/agents/xml/index.ts"],"sourcesContent":["import type {\n BaseLanguageModel,\n BaseLanguageModelInterface,\n} from \"@langchain/core/language_models/base\";\nimport type { ToolInterface } from \"@langchain/core/tools\";\nimport { RunnablePassthrough } from \"@langchain/core/runnables\";\nimport type { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { AgentStep, AgentAction, AgentFinish } from \"@langchain/core/agents\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n AIMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManager } from \"@langchain/core/callbacks/manager\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport {\n AgentArgs,\n AgentRunnableSequence,\n BaseSingleActionAgent,\n} from \"../agent.js\";\nimport { AGENT_INSTRUCTIONS } from \"./prompt.js\";\nimport { XMLAgentOutputParser } from \"./output_parser.js\";\nimport { renderTextDescription } from \"../../tools/render.js\";\nimport { formatXml } from \"../format_scratchpad/xml.js\";\n\n/**\n * Interface for the input to the XMLAgent class.\n */\nexport interface XMLAgentInput {\n tools: ToolInterface[];\n llmChain: LLMChain;\n}\n\n/**\n * Class that represents an agent that uses XML tags.\n */\nexport class XMLAgent extends BaseSingleActionAgent implements XMLAgentInput {\n static lc_name() {\n return \"XMLAgent\";\n }\n\n lc_namespace = [\"langchain\", \"agents\", \"xml\"];\n\n tools: ToolInterface[];\n\n llmChain: LLMChain;\n\n outputParser: XMLAgentOutputParser = new XMLAgentOutputParser();\n\n _agentType() {\n return \"xml\" as const;\n }\n\n constructor(fields: XMLAgentInput) {\n super(fields);\n this.tools = fields.tools;\n this.llmChain = fields.llmChain;\n }\n\n get inputKeys() {\n return [\"input\"];\n }\n\n static createPrompt() {\n return ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(AGENT_INSTRUCTIONS),\n AIMessagePromptTemplate.fromTemplate(\"{intermediate_steps}\"),\n ]);\n }\n\n /**\n * Plans the next action or finish state of the agent based on the\n * provided steps, inputs, and optional callback manager.\n * @param steps The steps to consider in planning.\n * @param inputs The inputs to consider in planning.\n * @param callbackManager Optional CallbackManager to use in planning.\n * @returns A Promise that resolves to an AgentAction or AgentFinish object representing the planned action or finish state.\n */\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n let log = \"\";\n for (const { action, observation } of steps) {\n log += `<tool>${action.tool}</tool><tool_input>${action.toolInput}</tool_input><observation>${observation}</observation>`;\n }\n let tools = \"\";\n for (const tool of this.tools) {\n tools += `${tool.name}: ${tool.description}\\n`;\n }\n const _inputs = {\n intermediate_steps: log,\n tools,\n question: inputs.input,\n stop: [\"</tool_input>\", \"</final_answer>\"],\n };\n const response = await this.llmChain.call(_inputs, callbackManager);\n return this.outputParser.parse(response[this.llmChain.outputKey]);\n }\n\n /**\n * Creates an XMLAgent from a BaseLanguageModel and a list of tools.\n * @param llm The BaseLanguageModel to use.\n * @param tools The tools to be used by the agent.\n * @param args Optional arguments for creating the agent.\n * @returns An instance of XMLAgent.\n */\n static fromLLMAndTools(\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args?: XMLAgentInput & Pick<AgentArgs, \"callbacks\">\n ) {\n const prompt = XMLAgent.createPrompt();\n const chain = new LLMChain({\n prompt,\n llm,\n callbacks: args?.callbacks,\n });\n return new XMLAgent({\n llmChain: chain,\n tools,\n });\n }\n}\n\n/**\n * Params used by the createXmlAgent function.\n */\nexport type CreateXmlAgentParams = {\n /** LLM to use for the agent. */\n llm: BaseLanguageModelInterface;\n /** Tools this agent has access to. */\n tools: ToolInterface[];\n /**\n * The prompt to use. Must have input keys for\n * `tools` and `agent_scratchpad`.\n */\n prompt: BasePromptTemplate;\n /**\n * Whether to invoke the underlying model in streaming mode,\n * allowing streaming of intermediate steps. Defaults to true.\n */\n streamRunnable?: boolean;\n};\n\n/**\n * Create an agent that uses XML to format its logic.\n * @param params Params required to create the agent. Includes an LLM, tools, and prompt.\n * @returns A runnable sequence representing an agent. It takes as input all the same input\n * variables as the prompt passed in does. It returns as output either an\n * AgentAction or AgentFinish.\n *\n * @example\n * ```typescript\n * import { AgentExecutor, createXmlAgent } from \"langchain/agents\";\n * import { pull } from \"langchain/hub\";\n * import type { PromptTemplate } from \"@langchain/core/prompts\";\n *\n * import { ChatAnthropic } from \"@langchain/anthropic\";\n *\n * // Define the tools the agent will have access to.\n * const tools = [...];\n *\n * // Get the prompt to use - you can modify this!\n * // If you want to see the prompt in full, you can at:\n * // https://smith.langchain.com/hub/hwchase17/xml-agent-convo\n * const prompt = await pull<PromptTemplate>(\"hwchase17/xml-agent-convo\");\n *\n * const llm = new ChatAnthropic({\n * temperature: 0,\n * });\n *\n * const agent = await createXmlAgent({\n * llm,\n * tools,\n * prompt,\n * });\n *\n * const agentExecutor = new AgentExecutor({\n * agent,\n * tools,\n * });\n *\n * const result = await agentExecutor.invoke({\n * input: \"what is LangChain?\",\n * });\n *\n * // With chat history\n * const result2 = await agentExecutor.invoke({\n * input: \"what's my name?\",\n * // Notice that chat_history is a string, since this prompt is aimed at LLMs, not chat models\n * chat_history: \"Human: Hi! My name is Cob\\nAI: Hello Cob! Nice to meet you\",\n * });\n * ```\n */\nexport async function createXmlAgent({\n llm,\n tools,\n prompt,\n streamRunnable,\n}: CreateXmlAgentParams) {\n const missingVariables = [\"tools\", \"agent_scratchpad\"].filter(\n (v) => !prompt.inputVariables.includes(v)\n );\n if (missingVariables.length > 0) {\n throw new Error(\n `Provided prompt is missing required input variables: ${JSON.stringify(\n missingVariables\n )}`\n );\n }\n const partialedPrompt = await prompt.partial({\n tools: renderTextDescription(tools),\n });\n // TODO: Add .bind to core runnable interface.\n const llmWithStop = (llm as BaseLanguageModel).withConfig({\n stop: [\"</tool_input>\", \"</final_answer>\"],\n });\n const agent = AgentRunnableSequence.fromRunnables(\n [\n RunnablePassthrough.assign({\n agent_scratchpad: (input: { steps: AgentStep[] }) =>\n formatXml(input.steps),\n }),\n partialedPrompt,\n llmWithStop,\n new XMLAgentOutputParser(),\n ],\n {\n name: \"XMLAgent\",\n streamRunnable,\n singleAction: true,\n }\n );\n return agent;\n}\n"],"mappings":";;;;;;;;;;;;AAqCA,IAAa,WAAb,MAAa,iBAAiB,sBAA+C;CAC3E,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAU;EAAM;CAE7C;CAEA;CAEA,eAAqC,IAAI,sBAAsB;CAE/D,aAAa;AACX,SAAO;;CAGT,YAAY,QAAuB;AACjC,QAAM,OAAO;AACb,OAAK,QAAQ,OAAO;AACpB,OAAK,WAAW,OAAO;;CAGzB,IAAI,YAAY;AACd,SAAO,CAAC,QAAQ;;CAGlB,OAAO,eAAe;AACpB,SAAO,mBAAmB,aAAa,CACrC,2BAA2B,aAAa,mBAAmB,EAC3D,wBAAwB,aAAa,uBAAuB,CAC7D,CAAC;;;;;;;;;;CAWJ,MAAM,KACJ,OACA,QACA,iBACoC;EACpC,IAAI,MAAM;AACV,OAAK,MAAM,EAAE,QAAQ,iBAAiB,MACpC,QAAO,SAAS,OAAO,KAAK,qBAAqB,OAAO,UAAU,4BAA4B,YAAY;EAE5G,IAAI,QAAQ;AACZ,OAAK,MAAM,QAAQ,KAAK,MACtB,UAAS,GAAG,KAAK,KAAK,IAAI,KAAK,YAAY;EAE7C,MAAM,UAAU;GACd,oBAAoB;GACpB;GACA,UAAU,OAAO;GACjB,MAAM,CAAC,iBAAiB,kBAAkB;GAC3C;EACD,MAAM,WAAW,MAAM,KAAK,SAAS,KAAK,SAAS,gBAAgB;AACnE,SAAO,KAAK,aAAa,MAAM,SAAS,KAAK,SAAS,WAAW;;;;;;;;;CAUnE,OAAO,gBACL,KACA,OACA,MACA;AAOA,SAAO,IAAI,SAAS;GAClB,UAAU,IANM,SAAS;IACzB,QAFa,SAAS,cAEhB;IACN;IACA,WAAW,MAAM;IAClB,CAEgB;GACf;GACD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EN,eAAsB,eAAe,EACnC,KACA,OACA,QACA,kBACuB;CACvB,MAAM,mBAAmB,CAAC,SAAS,mBAAmB,CAAC,QACpD,MAAM,CAAC,OAAO,eAAe,SAAS,EAAE,CAC1C;AACD,KAAI,iBAAiB,SAAS,EAC5B,OAAM,IAAI,MACR,wDAAwD,KAAK,UAC3D,iBACD,GACF;CAEH,MAAM,kBAAkB,MAAM,OAAO,QAAQ,EAC3C,OAAO,sBAAsB,MAAM,EACpC,CAAC;CAEF,MAAM,cAAe,IAA0B,WAAW,EACxD,MAAM,CAAC,iBAAiB,kBAAkB,EAC3C,CAAC;AAiBF,QAhBc,sBAAsB,cAClC;EACE,oBAAoB,OAAO,EACzB,mBAAmB,UACjB,UAAU,MAAM,MAAM,EACzB,CAAC;EACF;EACA;EACA,IAAI,sBAAsB;EAC3B,EACD;EACE,MAAM;EACN;EACA,cAAc;EACf,CAES"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze_documents_chain.cjs","names":["BaseChain","RecursiveCharacterTextSplitter"],"sources":["../../src/chains/analyze_documents_chain.ts"],"sourcesContent":["import { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n TextSplitter,\n RecursiveCharacterTextSplitter,\n} from \"@langchain/textsplitters\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedAnalyzeDocumentChain } from \"./serde.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\n/**\n * Interface for the input parameters required by the AnalyzeDocumentChain\n * class.\n */\nexport interface AnalyzeDocumentChainInput extends Omit<ChainInputs, \"memory\"> {\n combineDocumentsChain: BaseChain;\n textSplitter?: TextSplitter;\n inputKey?: string;\n}\n\n/**\n * Chain that combines documents by stuffing into context.\n * @augments BaseChain\n * @augments StuffDocumentsChainInput\n * @example\n * ```typescript\n * const model = new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 });\n * const combineDocsChain = loadSummarizationChain(model);\n * const chain = new AnalyzeDocumentChain({\n * combineDocumentsChain: combineDocsChain,\n * });\n *\n * // Read the text from a file (this is a placeholder for actual file reading)\n * const text = readTextFromFile(\"state_of_the_union.txt\");\n *\n * // Invoke the chain to analyze the document\n * const res = await chain.call({\n * input_document: text,\n * });\n *\n * console.log({ res });\n * ```\n */\nexport class AnalyzeDocumentChain\n extends BaseChain\n implements AnalyzeDocumentChainInput\n{\n static lc_name() {\n return \"AnalyzeDocumentChain\";\n }\n\n inputKey = \"input_document\";\n\n combineDocumentsChain: BaseChain;\n\n textSplitter: TextSplitter;\n\n constructor(fields: AnalyzeDocumentChainInput) {\n super(fields);\n this.combineDocumentsChain = fields.combineDocumentsChain;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.textSplitter =\n fields.textSplitter ?? new RecursiveCharacterTextSplitter();\n }\n\n get inputKeys(): string[] {\n return [this.inputKey];\n }\n\n get outputKeys(): string[] {\n return this.combineDocumentsChain.outputKeys;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.inputKey in values)) {\n throw new Error(`Document key ${this.inputKey} not found.`);\n }\n const { [this.inputKey]: doc, ...rest } = values;\n\n const currentDoc = doc as string;\n const currentDocs = await this.textSplitter.createDocuments([currentDoc]);\n\n const newInputs = { input_documents: currentDocs, ...rest };\n const result = await this.combineDocumentsChain.call(\n newInputs,\n runManager?.getChild(\"combine_documents\")\n );\n return result;\n }\n\n _chainType() {\n return \"analyze_document_chain\" as const;\n }\n\n static async deserialize(\n data: SerializedAnalyzeDocumentChain,\n values: LoadValues\n ) {\n if (!(\"text_splitter\" in values)) {\n throw new Error(\n `Need to pass in a text_splitter to deserialize AnalyzeDocumentChain.`\n );\n }\n const { text_splitter } = values;\n\n if (!data.combine_document_chain) {\n throw new Error(\n `Need to pass in a combine_document_chain to deserialize AnalyzeDocumentChain.`\n );\n }\n\n return new AnalyzeDocumentChain({\n combineDocumentsChain: await BaseChain.deserialize(\n data.combine_document_chain\n ),\n textSplitter: text_splitter,\n });\n }\n\n serialize(): SerializedAnalyzeDocumentChain {\n return {\n _type: this._chainType(),\n combine_document_chain: this.combineDocumentsChain.serialize(),\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,IAAa,uBAAb,MAAa,6BACHA,aAAAA,UAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,WAAW;CAEX;CAEA;CAEA,YAAY,QAAmC;AAC7C,QAAM,OAAO;AACb,OAAK,wBAAwB,OAAO;AACpC,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,eACH,OAAO,gBAAgB,IAAIC,yBAAAA,gCAAgC;;CAG/D,IAAI,YAAsB;AACxB,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAuB;AACzB,SAAO,KAAK,sBAAsB;;;CAIpC,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,YAAY,QACrB,OAAM,IAAI,MAAM,gBAAgB,KAAK,SAAS,aAAa;EAE7D,MAAM,GAAG,KAAK,WAAW,KAAK,GAAG,SAAS;EAE1C,MAAM,aAAa;EAGnB,MAAM,YAAY;GAAE,
|
|
1
|
+
{"version":3,"file":"analyze_documents_chain.cjs","names":["BaseChain","RecursiveCharacterTextSplitter"],"sources":["../../src/chains/analyze_documents_chain.ts"],"sourcesContent":["import { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n TextSplitter,\n RecursiveCharacterTextSplitter,\n} from \"@langchain/textsplitters\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedAnalyzeDocumentChain } from \"./serde.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\n/**\n * Interface for the input parameters required by the AnalyzeDocumentChain\n * class.\n */\nexport interface AnalyzeDocumentChainInput extends Omit<ChainInputs, \"memory\"> {\n combineDocumentsChain: BaseChain;\n textSplitter?: TextSplitter;\n inputKey?: string;\n}\n\n/**\n * Chain that combines documents by stuffing into context.\n * @augments BaseChain\n * @augments StuffDocumentsChainInput\n * @example\n * ```typescript\n * const model = new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 });\n * const combineDocsChain = loadSummarizationChain(model);\n * const chain = new AnalyzeDocumentChain({\n * combineDocumentsChain: combineDocsChain,\n * });\n *\n * // Read the text from a file (this is a placeholder for actual file reading)\n * const text = readTextFromFile(\"state_of_the_union.txt\");\n *\n * // Invoke the chain to analyze the document\n * const res = await chain.call({\n * input_document: text,\n * });\n *\n * console.log({ res });\n * ```\n */\nexport class AnalyzeDocumentChain\n extends BaseChain\n implements AnalyzeDocumentChainInput\n{\n static lc_name() {\n return \"AnalyzeDocumentChain\";\n }\n\n inputKey = \"input_document\";\n\n combineDocumentsChain: BaseChain;\n\n textSplitter: TextSplitter;\n\n constructor(fields: AnalyzeDocumentChainInput) {\n super(fields);\n this.combineDocumentsChain = fields.combineDocumentsChain;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.textSplitter =\n fields.textSplitter ?? new RecursiveCharacterTextSplitter();\n }\n\n get inputKeys(): string[] {\n return [this.inputKey];\n }\n\n get outputKeys(): string[] {\n return this.combineDocumentsChain.outputKeys;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.inputKey in values)) {\n throw new Error(`Document key ${this.inputKey} not found.`);\n }\n const { [this.inputKey]: doc, ...rest } = values;\n\n const currentDoc = doc as string;\n const currentDocs = await this.textSplitter.createDocuments([currentDoc]);\n\n const newInputs = { input_documents: currentDocs, ...rest };\n const result = await this.combineDocumentsChain.call(\n newInputs,\n runManager?.getChild(\"combine_documents\")\n );\n return result;\n }\n\n _chainType() {\n return \"analyze_document_chain\" as const;\n }\n\n static async deserialize(\n data: SerializedAnalyzeDocumentChain,\n values: LoadValues\n ) {\n if (!(\"text_splitter\" in values)) {\n throw new Error(\n `Need to pass in a text_splitter to deserialize AnalyzeDocumentChain.`\n );\n }\n const { text_splitter } = values;\n\n if (!data.combine_document_chain) {\n throw new Error(\n `Need to pass in a combine_document_chain to deserialize AnalyzeDocumentChain.`\n );\n }\n\n return new AnalyzeDocumentChain({\n combineDocumentsChain: await BaseChain.deserialize(\n data.combine_document_chain\n ),\n textSplitter: text_splitter,\n });\n }\n\n serialize(): SerializedAnalyzeDocumentChain {\n return {\n _type: this._chainType(),\n combine_document_chain: this.combineDocumentsChain.serialize(),\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,IAAa,uBAAb,MAAa,6BACHA,aAAAA,UAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,WAAW;CAEX;CAEA;CAEA,YAAY,QAAmC;AAC7C,QAAM,OAAO;AACb,OAAK,wBAAwB,OAAO;AACpC,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,eACH,OAAO,gBAAgB,IAAIC,yBAAAA,gCAAgC;;CAG/D,IAAI,YAAsB;AACxB,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAuB;AACzB,SAAO,KAAK,sBAAsB;;;CAIpC,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,YAAY,QACrB,OAAM,IAAI,MAAM,gBAAgB,KAAK,SAAS,aAAa;EAE7D,MAAM,GAAG,KAAK,WAAW,KAAK,GAAG,SAAS;EAE1C,MAAM,aAAa;EAGnB,MAAM,YAAY;GAAE,iBAAiB,MAFX,KAAK,aAAa,gBAAgB,CAAC,WAAW,CAAC;GAEvB,GAAG;GAAM;AAK3D,SAAO,MAJc,KAAK,sBAAsB,KAC9C,WACA,YAAY,SAAS,oBAAoB,CAC1C;;CAIH,aAAa;AACX,SAAO;;CAGT,aAAa,YACX,MACA,QACA;AACA,MAAI,EAAE,mBAAmB,QACvB,OAAM,IAAI,MACR,uEACD;EAEH,MAAM,EAAE,kBAAkB;AAE1B,MAAI,CAAC,KAAK,uBACR,OAAM,IAAI,MACR,gFACD;AAGH,SAAO,IAAI,qBAAqB;GAC9B,uBAAuB,MAAMD,aAAAA,UAAU,YACrC,KAAK,uBACN;GACD,cAAc;GACf,CAAC;;CAGJ,YAA4C;AAC1C,SAAO;GACL,OAAO,KAAK,YAAY;GACxB,wBAAwB,KAAK,sBAAsB,WAAW;GAC/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze_documents_chain.js","names":[],"sources":["../../src/chains/analyze_documents_chain.ts"],"sourcesContent":["import { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n TextSplitter,\n RecursiveCharacterTextSplitter,\n} from \"@langchain/textsplitters\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedAnalyzeDocumentChain } from \"./serde.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\n/**\n * Interface for the input parameters required by the AnalyzeDocumentChain\n * class.\n */\nexport interface AnalyzeDocumentChainInput extends Omit<ChainInputs, \"memory\"> {\n combineDocumentsChain: BaseChain;\n textSplitter?: TextSplitter;\n inputKey?: string;\n}\n\n/**\n * Chain that combines documents by stuffing into context.\n * @augments BaseChain\n * @augments StuffDocumentsChainInput\n * @example\n * ```typescript\n * const model = new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 });\n * const combineDocsChain = loadSummarizationChain(model);\n * const chain = new AnalyzeDocumentChain({\n * combineDocumentsChain: combineDocsChain,\n * });\n *\n * // Read the text from a file (this is a placeholder for actual file reading)\n * const text = readTextFromFile(\"state_of_the_union.txt\");\n *\n * // Invoke the chain to analyze the document\n * const res = await chain.call({\n * input_document: text,\n * });\n *\n * console.log({ res });\n * ```\n */\nexport class AnalyzeDocumentChain\n extends BaseChain\n implements AnalyzeDocumentChainInput\n{\n static lc_name() {\n return \"AnalyzeDocumentChain\";\n }\n\n inputKey = \"input_document\";\n\n combineDocumentsChain: BaseChain;\n\n textSplitter: TextSplitter;\n\n constructor(fields: AnalyzeDocumentChainInput) {\n super(fields);\n this.combineDocumentsChain = fields.combineDocumentsChain;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.textSplitter =\n fields.textSplitter ?? new RecursiveCharacterTextSplitter();\n }\n\n get inputKeys(): string[] {\n return [this.inputKey];\n }\n\n get outputKeys(): string[] {\n return this.combineDocumentsChain.outputKeys;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.inputKey in values)) {\n throw new Error(`Document key ${this.inputKey} not found.`);\n }\n const { [this.inputKey]: doc, ...rest } = values;\n\n const currentDoc = doc as string;\n const currentDocs = await this.textSplitter.createDocuments([currentDoc]);\n\n const newInputs = { input_documents: currentDocs, ...rest };\n const result = await this.combineDocumentsChain.call(\n newInputs,\n runManager?.getChild(\"combine_documents\")\n );\n return result;\n }\n\n _chainType() {\n return \"analyze_document_chain\" as const;\n }\n\n static async deserialize(\n data: SerializedAnalyzeDocumentChain,\n values: LoadValues\n ) {\n if (!(\"text_splitter\" in values)) {\n throw new Error(\n `Need to pass in a text_splitter to deserialize AnalyzeDocumentChain.`\n );\n }\n const { text_splitter } = values;\n\n if (!data.combine_document_chain) {\n throw new Error(\n `Need to pass in a combine_document_chain to deserialize AnalyzeDocumentChain.`\n );\n }\n\n return new AnalyzeDocumentChain({\n combineDocumentsChain: await BaseChain.deserialize(\n data.combine_document_chain\n ),\n textSplitter: text_splitter,\n });\n }\n\n serialize(): SerializedAnalyzeDocumentChain {\n return {\n _type: this._chainType(),\n combine_document_chain: this.combineDocumentsChain.serialize(),\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,IAAa,uBAAb,MAAa,6BACH,UAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,WAAW;CAEX;CAEA;CAEA,YAAY,QAAmC;AAC7C,QAAM,OAAO;AACb,OAAK,wBAAwB,OAAO;AACpC,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,eACH,OAAO,gBAAgB,IAAI,gCAAgC;;CAG/D,IAAI,YAAsB;AACxB,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAuB;AACzB,SAAO,KAAK,sBAAsB;;;CAIpC,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,YAAY,QACrB,OAAM,IAAI,MAAM,gBAAgB,KAAK,SAAS,aAAa;EAE7D,MAAM,GAAG,KAAK,WAAW,KAAK,GAAG,SAAS;EAE1C,MAAM,aAAa;EAGnB,MAAM,YAAY;GAAE,
|
|
1
|
+
{"version":3,"file":"analyze_documents_chain.js","names":[],"sources":["../../src/chains/analyze_documents_chain.ts"],"sourcesContent":["import { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n TextSplitter,\n RecursiveCharacterTextSplitter,\n} from \"@langchain/textsplitters\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedAnalyzeDocumentChain } from \"./serde.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\n/**\n * Interface for the input parameters required by the AnalyzeDocumentChain\n * class.\n */\nexport interface AnalyzeDocumentChainInput extends Omit<ChainInputs, \"memory\"> {\n combineDocumentsChain: BaseChain;\n textSplitter?: TextSplitter;\n inputKey?: string;\n}\n\n/**\n * Chain that combines documents by stuffing into context.\n * @augments BaseChain\n * @augments StuffDocumentsChainInput\n * @example\n * ```typescript\n * const model = new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 });\n * const combineDocsChain = loadSummarizationChain(model);\n * const chain = new AnalyzeDocumentChain({\n * combineDocumentsChain: combineDocsChain,\n * });\n *\n * // Read the text from a file (this is a placeholder for actual file reading)\n * const text = readTextFromFile(\"state_of_the_union.txt\");\n *\n * // Invoke the chain to analyze the document\n * const res = await chain.call({\n * input_document: text,\n * });\n *\n * console.log({ res });\n * ```\n */\nexport class AnalyzeDocumentChain\n extends BaseChain\n implements AnalyzeDocumentChainInput\n{\n static lc_name() {\n return \"AnalyzeDocumentChain\";\n }\n\n inputKey = \"input_document\";\n\n combineDocumentsChain: BaseChain;\n\n textSplitter: TextSplitter;\n\n constructor(fields: AnalyzeDocumentChainInput) {\n super(fields);\n this.combineDocumentsChain = fields.combineDocumentsChain;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.textSplitter =\n fields.textSplitter ?? new RecursiveCharacterTextSplitter();\n }\n\n get inputKeys(): string[] {\n return [this.inputKey];\n }\n\n get outputKeys(): string[] {\n return this.combineDocumentsChain.outputKeys;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.inputKey in values)) {\n throw new Error(`Document key ${this.inputKey} not found.`);\n }\n const { [this.inputKey]: doc, ...rest } = values;\n\n const currentDoc = doc as string;\n const currentDocs = await this.textSplitter.createDocuments([currentDoc]);\n\n const newInputs = { input_documents: currentDocs, ...rest };\n const result = await this.combineDocumentsChain.call(\n newInputs,\n runManager?.getChild(\"combine_documents\")\n );\n return result;\n }\n\n _chainType() {\n return \"analyze_document_chain\" as const;\n }\n\n static async deserialize(\n data: SerializedAnalyzeDocumentChain,\n values: LoadValues\n ) {\n if (!(\"text_splitter\" in values)) {\n throw new Error(\n `Need to pass in a text_splitter to deserialize AnalyzeDocumentChain.`\n );\n }\n const { text_splitter } = values;\n\n if (!data.combine_document_chain) {\n throw new Error(\n `Need to pass in a combine_document_chain to deserialize AnalyzeDocumentChain.`\n );\n }\n\n return new AnalyzeDocumentChain({\n combineDocumentsChain: await BaseChain.deserialize(\n data.combine_document_chain\n ),\n textSplitter: text_splitter,\n });\n }\n\n serialize(): SerializedAnalyzeDocumentChain {\n return {\n _type: this._chainType(),\n combine_document_chain: this.combineDocumentsChain.serialize(),\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,IAAa,uBAAb,MAAa,6BACH,UAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,WAAW;CAEX;CAEA;CAEA,YAAY,QAAmC;AAC7C,QAAM,OAAO;AACb,OAAK,wBAAwB,OAAO;AACpC,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,eACH,OAAO,gBAAgB,IAAI,gCAAgC;;CAG/D,IAAI,YAAsB;AACxB,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAuB;AACzB,SAAO,KAAK,sBAAsB;;;CAIpC,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,YAAY,QACrB,OAAM,IAAI,MAAM,gBAAgB,KAAK,SAAS,aAAa;EAE7D,MAAM,GAAG,KAAK,WAAW,KAAK,GAAG,SAAS;EAE1C,MAAM,aAAa;EAGnB,MAAM,YAAY;GAAE,iBAAiB,MAFX,KAAK,aAAa,gBAAgB,CAAC,WAAW,CAAC;GAEvB,GAAG;GAAM;AAK3D,SAAO,MAJc,KAAK,sBAAsB,KAC9C,WACA,YAAY,SAAS,oBAAoB,CAC1C;;CAIH,aAAa;AACX,SAAO;;CAGT,aAAa,YACX,MACA,QACA;AACA,MAAI,EAAE,mBAAmB,QACvB,OAAM,IAAI,MACR,uEACD;EAEH,MAAM,EAAE,kBAAkB;AAE1B,MAAI,CAAC,KAAK,uBACR,OAAM,IAAI,MACR,gFACD;AAGH,SAAO,IAAI,qBAAqB;GAC9B,uBAAuB,MAAM,UAAU,YACrC,KAAK,uBACN;GACD,cAAc;GACf,CAAC;;CAGJ,YAA4C;AAC1C,SAAO;GACL,OAAO,KAAK,YAAY;GACxB,wBAAwB,KAAK,sBAAsB,WAAW;GAC/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api_chain.cjs","names":["BaseChain","LLMChain","API_URL_PROMPT_TEMPLATE","API_RESPONSE_PROMPT_TEMPLATE"],"sources":["../../../src/chains/api/api_chain.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { BaseChain, ChainInputs } from \"../base.js\";\nimport { SerializedAPIChain } from \"../serde.js\";\nimport { LLMChain } from \"../llm_chain.js\";\nimport {\n API_URL_PROMPT_TEMPLATE,\n API_RESPONSE_PROMPT_TEMPLATE,\n} from \"./prompts.js\";\n\n/**\n * Interface that extends ChainInputs and defines additional input\n * parameters specific to an APIChain.\n */\nexport interface APIChainInput extends Omit<ChainInputs, \"memory\"> {\n apiAnswerChain: LLMChain;\n apiRequestChain: LLMChain;\n apiDocs: string;\n inputKey?: string;\n headers?: Record<string, string>;\n /** Key to use for output, defaults to `output` */\n outputKey?: string;\n}\n\n/**\n * Type that defines optional configuration options for an APIChain.\n */\nexport type APIChainOptions = {\n headers?: Record<string, string>;\n apiUrlPrompt?: BasePromptTemplate;\n apiResponsePrompt?: BasePromptTemplate;\n};\n\n/**\n * Class that extends BaseChain and represents a chain specifically\n * designed for making API requests and processing API responses.\n */\nexport class APIChain extends BaseChain implements APIChainInput {\n apiAnswerChain: LLMChain;\n\n apiRequestChain: LLMChain;\n\n apiDocs: string;\n\n headers = {};\n\n inputKey = \"question\";\n\n outputKey = \"output\";\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n constructor(fields: APIChainInput) {\n super(fields);\n this.apiRequestChain = fields.apiRequestChain;\n this.apiAnswerChain = fields.apiAnswerChain;\n this.apiDocs = fields.apiDocs;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.outputKey = fields.outputKey ?? this.outputKey;\n this.headers = fields.headers ?? this.headers;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const question: string = values[this.inputKey];\n\n const api_url = await this.apiRequestChain.predict(\n { question, api_docs: this.apiDocs },\n runManager?.getChild(\"request\")\n );\n\n const res = await fetch(api_url, { headers: this.headers });\n const api_response = await res.text();\n\n const answer = await this.apiAnswerChain.predict(\n { question, api_docs: this.apiDocs, api_url, api_response },\n runManager?.getChild(\"response\")\n );\n\n return { [this.outputKey]: answer };\n }\n\n _chainType() {\n return \"api_chain\" as const;\n }\n\n static async deserialize(data: SerializedAPIChain) {\n const { api_request_chain, api_answer_chain, api_docs } = data;\n\n if (!api_request_chain) {\n throw new Error(\"LLMChain must have api_request_chain\");\n }\n if (!api_answer_chain) {\n throw new Error(\"LLMChain must have api_answer_chain\");\n }\n\n if (!api_docs) {\n throw new Error(\"LLMChain must have api_docs\");\n }\n\n return new APIChain({\n apiAnswerChain: await LLMChain.deserialize(api_answer_chain),\n apiRequestChain: await LLMChain.deserialize(api_request_chain),\n apiDocs: api_docs,\n });\n }\n\n serialize(): SerializedAPIChain {\n return {\n _type: this._chainType(),\n api_answer_chain: this.apiAnswerChain.serialize(),\n api_request_chain: this.apiRequestChain.serialize(),\n api_docs: this.apiDocs,\n };\n }\n\n /**\n * Static method to create a new APIChain from a BaseLanguageModel and API\n * documentation.\n * @param llm BaseLanguageModel instance.\n * @param apiDocs API documentation.\n * @param options Optional configuration options for the APIChain.\n * @returns New APIChain instance.\n */\n static fromLLMAndAPIDocs(\n llm: BaseLanguageModelInterface,\n apiDocs: string,\n options: APIChainOptions &\n Omit<APIChainInput, \"apiAnswerChain\" | \"apiRequestChain\" | \"apiDocs\"> = {}\n ): APIChain {\n const {\n apiUrlPrompt = API_URL_PROMPT_TEMPLATE,\n apiResponsePrompt = API_RESPONSE_PROMPT_TEMPLATE,\n } = options;\n const apiRequestChain = new LLMChain({ prompt: apiUrlPrompt, llm });\n const apiAnswerChain = new LLMChain({ prompt: apiResponsePrompt, llm });\n return new this({\n apiAnswerChain,\n apiRequestChain,\n apiDocs,\n ...options,\n });\n }\n}\n"],"mappings":";;;;;;;;AAuCA,IAAa,WAAb,MAAa,iBAAiBA,aAAAA,UAAmC;CAC/D;CAEA;CAEA;CAEA,UAAU,EAAE;CAEZ,WAAW;CAEX,YAAY;CAEZ,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAa;AACf,SAAO,CAAC,KAAK,UAAU;;CAGzB,YAAY,QAAuB;AACjC,QAAM,OAAO;AACb,OAAK,kBAAkB,OAAO;AAC9B,OAAK,iBAAiB,OAAO;AAC7B,OAAK,UAAU,OAAO;AACtB,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,YAAY,OAAO,aAAa,KAAK;AAC1C,OAAK,UAAU,OAAO,WAAW,KAAK;;;CAIxC,MAAM,MACJ,QACA,YACsB;EACtB,MAAM,WAAmB,OAAO,KAAK;EAErC,MAAM,UAAU,MAAM,KAAK,gBAAgB,QACzC;GAAE;GAAU,UAAU,KAAK;GAAS,EACpC,YAAY,SAAS,UAAU,CAChC;EAGD,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"api_chain.cjs","names":["BaseChain","LLMChain","API_URL_PROMPT_TEMPLATE","API_RESPONSE_PROMPT_TEMPLATE"],"sources":["../../../src/chains/api/api_chain.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { BaseChain, ChainInputs } from \"../base.js\";\nimport { SerializedAPIChain } from \"../serde.js\";\nimport { LLMChain } from \"../llm_chain.js\";\nimport {\n API_URL_PROMPT_TEMPLATE,\n API_RESPONSE_PROMPT_TEMPLATE,\n} from \"./prompts.js\";\n\n/**\n * Interface that extends ChainInputs and defines additional input\n * parameters specific to an APIChain.\n */\nexport interface APIChainInput extends Omit<ChainInputs, \"memory\"> {\n apiAnswerChain: LLMChain;\n apiRequestChain: LLMChain;\n apiDocs: string;\n inputKey?: string;\n headers?: Record<string, string>;\n /** Key to use for output, defaults to `output` */\n outputKey?: string;\n}\n\n/**\n * Type that defines optional configuration options for an APIChain.\n */\nexport type APIChainOptions = {\n headers?: Record<string, string>;\n apiUrlPrompt?: BasePromptTemplate;\n apiResponsePrompt?: BasePromptTemplate;\n};\n\n/**\n * Class that extends BaseChain and represents a chain specifically\n * designed for making API requests and processing API responses.\n */\nexport class APIChain extends BaseChain implements APIChainInput {\n apiAnswerChain: LLMChain;\n\n apiRequestChain: LLMChain;\n\n apiDocs: string;\n\n headers = {};\n\n inputKey = \"question\";\n\n outputKey = \"output\";\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n constructor(fields: APIChainInput) {\n super(fields);\n this.apiRequestChain = fields.apiRequestChain;\n this.apiAnswerChain = fields.apiAnswerChain;\n this.apiDocs = fields.apiDocs;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.outputKey = fields.outputKey ?? this.outputKey;\n this.headers = fields.headers ?? this.headers;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const question: string = values[this.inputKey];\n\n const api_url = await this.apiRequestChain.predict(\n { question, api_docs: this.apiDocs },\n runManager?.getChild(\"request\")\n );\n\n const res = await fetch(api_url, { headers: this.headers });\n const api_response = await res.text();\n\n const answer = await this.apiAnswerChain.predict(\n { question, api_docs: this.apiDocs, api_url, api_response },\n runManager?.getChild(\"response\")\n );\n\n return { [this.outputKey]: answer };\n }\n\n _chainType() {\n return \"api_chain\" as const;\n }\n\n static async deserialize(data: SerializedAPIChain) {\n const { api_request_chain, api_answer_chain, api_docs } = data;\n\n if (!api_request_chain) {\n throw new Error(\"LLMChain must have api_request_chain\");\n }\n if (!api_answer_chain) {\n throw new Error(\"LLMChain must have api_answer_chain\");\n }\n\n if (!api_docs) {\n throw new Error(\"LLMChain must have api_docs\");\n }\n\n return new APIChain({\n apiAnswerChain: await LLMChain.deserialize(api_answer_chain),\n apiRequestChain: await LLMChain.deserialize(api_request_chain),\n apiDocs: api_docs,\n });\n }\n\n serialize(): SerializedAPIChain {\n return {\n _type: this._chainType(),\n api_answer_chain: this.apiAnswerChain.serialize(),\n api_request_chain: this.apiRequestChain.serialize(),\n api_docs: this.apiDocs,\n };\n }\n\n /**\n * Static method to create a new APIChain from a BaseLanguageModel and API\n * documentation.\n * @param llm BaseLanguageModel instance.\n * @param apiDocs API documentation.\n * @param options Optional configuration options for the APIChain.\n * @returns New APIChain instance.\n */\n static fromLLMAndAPIDocs(\n llm: BaseLanguageModelInterface,\n apiDocs: string,\n options: APIChainOptions &\n Omit<APIChainInput, \"apiAnswerChain\" | \"apiRequestChain\" | \"apiDocs\"> = {}\n ): APIChain {\n const {\n apiUrlPrompt = API_URL_PROMPT_TEMPLATE,\n apiResponsePrompt = API_RESPONSE_PROMPT_TEMPLATE,\n } = options;\n const apiRequestChain = new LLMChain({ prompt: apiUrlPrompt, llm });\n const apiAnswerChain = new LLMChain({ prompt: apiResponsePrompt, llm });\n return new this({\n apiAnswerChain,\n apiRequestChain,\n apiDocs,\n ...options,\n });\n }\n}\n"],"mappings":";;;;;;;;AAuCA,IAAa,WAAb,MAAa,iBAAiBA,aAAAA,UAAmC;CAC/D;CAEA;CAEA;CAEA,UAAU,EAAE;CAEZ,WAAW;CAEX,YAAY;CAEZ,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAa;AACf,SAAO,CAAC,KAAK,UAAU;;CAGzB,YAAY,QAAuB;AACjC,QAAM,OAAO;AACb,OAAK,kBAAkB,OAAO;AAC9B,OAAK,iBAAiB,OAAO;AAC7B,OAAK,UAAU,OAAO;AACtB,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,YAAY,OAAO,aAAa,KAAK;AAC1C,OAAK,UAAU,OAAO,WAAW,KAAK;;;CAIxC,MAAM,MACJ,QACA,YACsB;EACtB,MAAM,WAAmB,OAAO,KAAK;EAErC,MAAM,UAAU,MAAM,KAAK,gBAAgB,QACzC;GAAE;GAAU,UAAU,KAAK;GAAS,EACpC,YAAY,SAAS,UAAU,CAChC;EAGD,MAAM,eAAe,OAAM,MADT,MAAM,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC,EAC5B,MAAM;EAErC,MAAM,SAAS,MAAM,KAAK,eAAe,QACvC;GAAE;GAAU,UAAU,KAAK;GAAS;GAAS;GAAc,EAC3D,YAAY,SAAS,WAAW,CACjC;AAED,SAAO,GAAG,KAAK,YAAY,QAAQ;;CAGrC,aAAa;AACX,SAAO;;CAGT,aAAa,YAAY,MAA0B;EACjD,MAAM,EAAE,mBAAmB,kBAAkB,aAAa;AAE1D,MAAI,CAAC,kBACH,OAAM,IAAI,MAAM,uCAAuC;AAEzD,MAAI,CAAC,iBACH,OAAM,IAAI,MAAM,sCAAsC;AAGxD,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,8BAA8B;AAGhD,SAAO,IAAI,SAAS;GAClB,gBAAgB,MAAMC,kBAAAA,SAAS,YAAY,iBAAiB;GAC5D,iBAAiB,MAAMA,kBAAAA,SAAS,YAAY,kBAAkB;GAC9D,SAAS;GACV,CAAC;;CAGJ,YAAgC;AAC9B,SAAO;GACL,OAAO,KAAK,YAAY;GACxB,kBAAkB,KAAK,eAAe,WAAW;GACjD,mBAAmB,KAAK,gBAAgB,WAAW;GACnD,UAAU,KAAK;GAChB;;;;;;;;;;CAWH,OAAO,kBACL,KACA,SACA,UAC0E,EAAE,EAClE;EACV,MAAM,EACJ,eAAeC,gBAAAA,yBACf,oBAAoBC,gBAAAA,iCAClB;EACJ,MAAM,kBAAkB,IAAIF,kBAAAA,SAAS;GAAE,QAAQ;GAAc;GAAK,CAAC;EACnE,MAAM,iBAAiB,IAAIA,kBAAAA,SAAS;GAAE,QAAQ;GAAmB;GAAK,CAAC;AACvE,SAAO,IAAI,KAAK;GACd;GACA;GACA;GACA,GAAG;GACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api_chain.js","names":[],"sources":["../../../src/chains/api/api_chain.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { BaseChain, ChainInputs } from \"../base.js\";\nimport { SerializedAPIChain } from \"../serde.js\";\nimport { LLMChain } from \"../llm_chain.js\";\nimport {\n API_URL_PROMPT_TEMPLATE,\n API_RESPONSE_PROMPT_TEMPLATE,\n} from \"./prompts.js\";\n\n/**\n * Interface that extends ChainInputs and defines additional input\n * parameters specific to an APIChain.\n */\nexport interface APIChainInput extends Omit<ChainInputs, \"memory\"> {\n apiAnswerChain: LLMChain;\n apiRequestChain: LLMChain;\n apiDocs: string;\n inputKey?: string;\n headers?: Record<string, string>;\n /** Key to use for output, defaults to `output` */\n outputKey?: string;\n}\n\n/**\n * Type that defines optional configuration options for an APIChain.\n */\nexport type APIChainOptions = {\n headers?: Record<string, string>;\n apiUrlPrompt?: BasePromptTemplate;\n apiResponsePrompt?: BasePromptTemplate;\n};\n\n/**\n * Class that extends BaseChain and represents a chain specifically\n * designed for making API requests and processing API responses.\n */\nexport class APIChain extends BaseChain implements APIChainInput {\n apiAnswerChain: LLMChain;\n\n apiRequestChain: LLMChain;\n\n apiDocs: string;\n\n headers = {};\n\n inputKey = \"question\";\n\n outputKey = \"output\";\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n constructor(fields: APIChainInput) {\n super(fields);\n this.apiRequestChain = fields.apiRequestChain;\n this.apiAnswerChain = fields.apiAnswerChain;\n this.apiDocs = fields.apiDocs;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.outputKey = fields.outputKey ?? this.outputKey;\n this.headers = fields.headers ?? this.headers;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const question: string = values[this.inputKey];\n\n const api_url = await this.apiRequestChain.predict(\n { question, api_docs: this.apiDocs },\n runManager?.getChild(\"request\")\n );\n\n const res = await fetch(api_url, { headers: this.headers });\n const api_response = await res.text();\n\n const answer = await this.apiAnswerChain.predict(\n { question, api_docs: this.apiDocs, api_url, api_response },\n runManager?.getChild(\"response\")\n );\n\n return { [this.outputKey]: answer };\n }\n\n _chainType() {\n return \"api_chain\" as const;\n }\n\n static async deserialize(data: SerializedAPIChain) {\n const { api_request_chain, api_answer_chain, api_docs } = data;\n\n if (!api_request_chain) {\n throw new Error(\"LLMChain must have api_request_chain\");\n }\n if (!api_answer_chain) {\n throw new Error(\"LLMChain must have api_answer_chain\");\n }\n\n if (!api_docs) {\n throw new Error(\"LLMChain must have api_docs\");\n }\n\n return new APIChain({\n apiAnswerChain: await LLMChain.deserialize(api_answer_chain),\n apiRequestChain: await LLMChain.deserialize(api_request_chain),\n apiDocs: api_docs,\n });\n }\n\n serialize(): SerializedAPIChain {\n return {\n _type: this._chainType(),\n api_answer_chain: this.apiAnswerChain.serialize(),\n api_request_chain: this.apiRequestChain.serialize(),\n api_docs: this.apiDocs,\n };\n }\n\n /**\n * Static method to create a new APIChain from a BaseLanguageModel and API\n * documentation.\n * @param llm BaseLanguageModel instance.\n * @param apiDocs API documentation.\n * @param options Optional configuration options for the APIChain.\n * @returns New APIChain instance.\n */\n static fromLLMAndAPIDocs(\n llm: BaseLanguageModelInterface,\n apiDocs: string,\n options: APIChainOptions &\n Omit<APIChainInput, \"apiAnswerChain\" | \"apiRequestChain\" | \"apiDocs\"> = {}\n ): APIChain {\n const {\n apiUrlPrompt = API_URL_PROMPT_TEMPLATE,\n apiResponsePrompt = API_RESPONSE_PROMPT_TEMPLATE,\n } = options;\n const apiRequestChain = new LLMChain({ prompt: apiUrlPrompt, llm });\n const apiAnswerChain = new LLMChain({ prompt: apiResponsePrompt, llm });\n return new this({\n apiAnswerChain,\n apiRequestChain,\n apiDocs,\n ...options,\n });\n }\n}\n"],"mappings":";;;;;;;;AAuCA,IAAa,WAAb,MAAa,iBAAiB,UAAmC;CAC/D;CAEA;CAEA;CAEA,UAAU,EAAE;CAEZ,WAAW;CAEX,YAAY;CAEZ,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAa;AACf,SAAO,CAAC,KAAK,UAAU;;CAGzB,YAAY,QAAuB;AACjC,QAAM,OAAO;AACb,OAAK,kBAAkB,OAAO;AAC9B,OAAK,iBAAiB,OAAO;AAC7B,OAAK,UAAU,OAAO;AACtB,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,YAAY,OAAO,aAAa,KAAK;AAC1C,OAAK,UAAU,OAAO,WAAW,KAAK;;;CAIxC,MAAM,MACJ,QACA,YACsB;EACtB,MAAM,WAAmB,OAAO,KAAK;EAErC,MAAM,UAAU,MAAM,KAAK,gBAAgB,QACzC;GAAE;GAAU,UAAU,KAAK;GAAS,EACpC,YAAY,SAAS,UAAU,CAChC;EAGD,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"api_chain.js","names":[],"sources":["../../../src/chains/api/api_chain.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { BaseChain, ChainInputs } from \"../base.js\";\nimport { SerializedAPIChain } from \"../serde.js\";\nimport { LLMChain } from \"../llm_chain.js\";\nimport {\n API_URL_PROMPT_TEMPLATE,\n API_RESPONSE_PROMPT_TEMPLATE,\n} from \"./prompts.js\";\n\n/**\n * Interface that extends ChainInputs and defines additional input\n * parameters specific to an APIChain.\n */\nexport interface APIChainInput extends Omit<ChainInputs, \"memory\"> {\n apiAnswerChain: LLMChain;\n apiRequestChain: LLMChain;\n apiDocs: string;\n inputKey?: string;\n headers?: Record<string, string>;\n /** Key to use for output, defaults to `output` */\n outputKey?: string;\n}\n\n/**\n * Type that defines optional configuration options for an APIChain.\n */\nexport type APIChainOptions = {\n headers?: Record<string, string>;\n apiUrlPrompt?: BasePromptTemplate;\n apiResponsePrompt?: BasePromptTemplate;\n};\n\n/**\n * Class that extends BaseChain and represents a chain specifically\n * designed for making API requests and processing API responses.\n */\nexport class APIChain extends BaseChain implements APIChainInput {\n apiAnswerChain: LLMChain;\n\n apiRequestChain: LLMChain;\n\n apiDocs: string;\n\n headers = {};\n\n inputKey = \"question\";\n\n outputKey = \"output\";\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n constructor(fields: APIChainInput) {\n super(fields);\n this.apiRequestChain = fields.apiRequestChain;\n this.apiAnswerChain = fields.apiAnswerChain;\n this.apiDocs = fields.apiDocs;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.outputKey = fields.outputKey ?? this.outputKey;\n this.headers = fields.headers ?? this.headers;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const question: string = values[this.inputKey];\n\n const api_url = await this.apiRequestChain.predict(\n { question, api_docs: this.apiDocs },\n runManager?.getChild(\"request\")\n );\n\n const res = await fetch(api_url, { headers: this.headers });\n const api_response = await res.text();\n\n const answer = await this.apiAnswerChain.predict(\n { question, api_docs: this.apiDocs, api_url, api_response },\n runManager?.getChild(\"response\")\n );\n\n return { [this.outputKey]: answer };\n }\n\n _chainType() {\n return \"api_chain\" as const;\n }\n\n static async deserialize(data: SerializedAPIChain) {\n const { api_request_chain, api_answer_chain, api_docs } = data;\n\n if (!api_request_chain) {\n throw new Error(\"LLMChain must have api_request_chain\");\n }\n if (!api_answer_chain) {\n throw new Error(\"LLMChain must have api_answer_chain\");\n }\n\n if (!api_docs) {\n throw new Error(\"LLMChain must have api_docs\");\n }\n\n return new APIChain({\n apiAnswerChain: await LLMChain.deserialize(api_answer_chain),\n apiRequestChain: await LLMChain.deserialize(api_request_chain),\n apiDocs: api_docs,\n });\n }\n\n serialize(): SerializedAPIChain {\n return {\n _type: this._chainType(),\n api_answer_chain: this.apiAnswerChain.serialize(),\n api_request_chain: this.apiRequestChain.serialize(),\n api_docs: this.apiDocs,\n };\n }\n\n /**\n * Static method to create a new APIChain from a BaseLanguageModel and API\n * documentation.\n * @param llm BaseLanguageModel instance.\n * @param apiDocs API documentation.\n * @param options Optional configuration options for the APIChain.\n * @returns New APIChain instance.\n */\n static fromLLMAndAPIDocs(\n llm: BaseLanguageModelInterface,\n apiDocs: string,\n options: APIChainOptions &\n Omit<APIChainInput, \"apiAnswerChain\" | \"apiRequestChain\" | \"apiDocs\"> = {}\n ): APIChain {\n const {\n apiUrlPrompt = API_URL_PROMPT_TEMPLATE,\n apiResponsePrompt = API_RESPONSE_PROMPT_TEMPLATE,\n } = options;\n const apiRequestChain = new LLMChain({ prompt: apiUrlPrompt, llm });\n const apiAnswerChain = new LLMChain({ prompt: apiResponsePrompt, llm });\n return new this({\n apiAnswerChain,\n apiRequestChain,\n apiDocs,\n ...options,\n });\n }\n}\n"],"mappings":";;;;;;;;AAuCA,IAAa,WAAb,MAAa,iBAAiB,UAAmC;CAC/D;CAEA;CAEA;CAEA,UAAU,EAAE;CAEZ,WAAW;CAEX,YAAY;CAEZ,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAa;AACf,SAAO,CAAC,KAAK,UAAU;;CAGzB,YAAY,QAAuB;AACjC,QAAM,OAAO;AACb,OAAK,kBAAkB,OAAO;AAC9B,OAAK,iBAAiB,OAAO;AAC7B,OAAK,UAAU,OAAO;AACtB,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,YAAY,OAAO,aAAa,KAAK;AAC1C,OAAK,UAAU,OAAO,WAAW,KAAK;;;CAIxC,MAAM,MACJ,QACA,YACsB;EACtB,MAAM,WAAmB,OAAO,KAAK;EAErC,MAAM,UAAU,MAAM,KAAK,gBAAgB,QACzC;GAAE;GAAU,UAAU,KAAK;GAAS,EACpC,YAAY,SAAS,UAAU,CAChC;EAGD,MAAM,eAAe,OAAM,MADT,MAAM,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC,EAC5B,MAAM;EAErC,MAAM,SAAS,MAAM,KAAK,eAAe,QACvC;GAAE;GAAU,UAAU,KAAK;GAAS;GAAS;GAAc,EAC3D,YAAY,SAAS,WAAW,CACjC;AAED,SAAO,GAAG,KAAK,YAAY,QAAQ;;CAGrC,aAAa;AACX,SAAO;;CAGT,aAAa,YAAY,MAA0B;EACjD,MAAM,EAAE,mBAAmB,kBAAkB,aAAa;AAE1D,MAAI,CAAC,kBACH,OAAM,IAAI,MAAM,uCAAuC;AAEzD,MAAI,CAAC,iBACH,OAAM,IAAI,MAAM,sCAAsC;AAGxD,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,8BAA8B;AAGhD,SAAO,IAAI,SAAS;GAClB,gBAAgB,MAAM,SAAS,YAAY,iBAAiB;GAC5D,iBAAiB,MAAM,SAAS,YAAY,kBAAkB;GAC9D,SAAS;GACV,CAAC;;CAGJ,YAAgC;AAC9B,SAAO;GACL,OAAO,KAAK,YAAY;GACxB,kBAAkB,KAAK,eAAe,WAAW;GACjD,mBAAmB,KAAK,gBAAgB,WAAW;GACnD,UAAU,KAAK;GAChB;;;;;;;;;;CAWH,OAAO,kBACL,KACA,SACA,UAC0E,EAAE,EAClE;EACV,MAAM,EACJ,eAAe,yBACf,oBAAoB,iCAClB;EACJ,MAAM,kBAAkB,IAAI,SAAS;GAAE,QAAQ;GAAc;GAAK,CAAC;EACnE,MAAM,iBAAiB,IAAI,SAAS;GAAE,QAAQ;GAAmB;GAAK,CAAC;AACvE,SAAO,IAAI,KAAK;GACd;GACA;GACA;GACA,GAAG;GACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","names":[],"sources":["../../../src/chains/api/prompts.ts"],"sourcesContent":["import { PromptTemplate } from \"@langchain/core/prompts\";\n\nexport const API_URL_RAW_PROMPT_TEMPLATE = `You are given the below API Documentation:\n{api_docs}\nUsing this documentation, generate the full API url to call for answering the user question.\nYou should build the API url in order to get a response that is as short as possible, while still getting the necessary information to answer the question. Pay attention to deliberately exclude any unnecessary pieces of data in the API call.\n\nQuestion:{question}\nAPI url:`;\n\nexport const API_URL_PROMPT_TEMPLATE = /* #__PURE__ */ new PromptTemplate({\n inputVariables: [\"api_docs\", \"question\"],\n template: API_URL_RAW_PROMPT_TEMPLATE,\n});\n\nexport const API_RESPONSE_RAW_PROMPT_TEMPLATE = `${API_URL_RAW_PROMPT_TEMPLATE} {api_url}\n\nHere is the response from the API:\n\n{api_response}\n\nSummarize this response to answer the original question.\n\nSummary:`;\nexport const API_RESPONSE_PROMPT_TEMPLATE = /* #__PURE__ */ new PromptTemplate({\n inputVariables: [\"api_docs\", \"question\", \"api_url\", \"api_response\"],\n template: API_RESPONSE_RAW_PROMPT_TEMPLATE,\n});\n"],"mappings":";;AAEA,MAAa,8BAA8B;;;;;;;AAQ3C,MAAa,0CAA0C,IAAI,eAAe;CACxE,gBAAgB,CAAC,YAAY,WAAW;CACxC,UAAU;CACX,CAAC;AAWF,MAAa,+CAA+C,IAAI,eAAe;CAC7E,gBAAgB;EAAC;EAAY;EAAY;EAAW;EAAe;CACnE,
|
|
1
|
+
{"version":3,"file":"prompts.js","names":[],"sources":["../../../src/chains/api/prompts.ts"],"sourcesContent":["import { PromptTemplate } from \"@langchain/core/prompts\";\n\nexport const API_URL_RAW_PROMPT_TEMPLATE = `You are given the below API Documentation:\n{api_docs}\nUsing this documentation, generate the full API url to call for answering the user question.\nYou should build the API url in order to get a response that is as short as possible, while still getting the necessary information to answer the question. Pay attention to deliberately exclude any unnecessary pieces of data in the API call.\n\nQuestion:{question}\nAPI url:`;\n\nexport const API_URL_PROMPT_TEMPLATE = /* #__PURE__ */ new PromptTemplate({\n inputVariables: [\"api_docs\", \"question\"],\n template: API_URL_RAW_PROMPT_TEMPLATE,\n});\n\nexport const API_RESPONSE_RAW_PROMPT_TEMPLATE = `${API_URL_RAW_PROMPT_TEMPLATE} {api_url}\n\nHere is the response from the API:\n\n{api_response}\n\nSummarize this response to answer the original question.\n\nSummary:`;\nexport const API_RESPONSE_PROMPT_TEMPLATE = /* #__PURE__ */ new PromptTemplate({\n inputVariables: [\"api_docs\", \"question\", \"api_url\", \"api_response\"],\n template: API_RESPONSE_RAW_PROMPT_TEMPLATE,\n});\n"],"mappings":";;AAEA,MAAa,8BAA8B;;;;;;;AAQ3C,MAAa,0CAA0C,IAAI,eAAe;CACxE,gBAAgB,CAAC,YAAY,WAAW;CACxC,UAAU;CACX,CAAC;AAWF,MAAa,+CAA+C,IAAI,eAAe;CAC7E,gBAAgB;EAAC;EAAY;EAAY;EAAW;EAAe;CACnE,UAAU,GAXuC,4BAA4B;;;;;;;;;CAY9E,CAAC"}
|
package/dist/chains/base.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.cjs","names":["BaseLangChain","CallbackManager","RUN_KEY"],"sources":["../../src/chains/base.ts"],"sourcesContent":["import { BaseMemory } from \"@langchain/core/memory\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { RUN_KEY } from \"@langchain/core/outputs\";\nimport {\n CallbackManagerForChainRun,\n CallbackManager,\n Callbacks,\n parseCallbackConfigArg,\n} from \"@langchain/core/callbacks/manager\";\nimport { ensureConfig, type RunnableConfig } from \"@langchain/core/runnables\";\nimport {\n BaseLangChain,\n BaseLangChainParams,\n} from \"@langchain/core/language_models/base\";\nimport { SerializedBaseChain } from \"./serde.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\nexport interface ChainInputs extends BaseLangChainParams {\n memory?: BaseMemory;\n\n /**\n * @deprecated Use `callbacks` instead\n */\n callbackManager?: CallbackManager;\n}\n\n/**\n * Base interface that all chains must implement.\n */\nexport abstract class BaseChain<\n RunInput extends ChainValues = ChainValues,\n RunOutput extends ChainValues = ChainValues,\n>\n extends BaseLangChain<RunInput, RunOutput>\n implements ChainInputs\n{\n declare memory?: BaseMemory;\n\n get lc_namespace(): string[] {\n return [\"langchain\", \"chains\", this._chainType()];\n }\n\n constructor(\n fields?: BaseMemory | ChainInputs,\n /** @deprecated */\n verbose?: boolean,\n /** @deprecated */\n callbacks?: Callbacks\n ) {\n if (\n arguments.length === 1 &&\n typeof fields === \"object\" &&\n !(\"saveContext\" in fields)\n ) {\n // fields is not a BaseMemory\n const { memory, callbackManager, ...rest } = fields;\n super({ ...rest, callbacks: callbackManager ?? rest.callbacks });\n this.memory = memory;\n } else {\n // fields is a BaseMemory\n super({ verbose, callbacks });\n this.memory = fields as BaseMemory;\n }\n }\n\n /** @ignore */\n _selectMemoryInputs(values: ChainValues): ChainValues {\n const valuesForMemory = { ...values };\n if (\"signal\" in valuesForMemory) {\n delete valuesForMemory.signal;\n }\n if (\"timeout\" in valuesForMemory) {\n delete valuesForMemory.timeout;\n }\n return valuesForMemory;\n }\n\n /**\n * Invoke the chain with the provided input and returns the output.\n * @param input Input values for the chain run.\n * @param config Optional configuration for the Runnable.\n * @returns Promise that resolves with the output of the chain run.\n */\n async invoke(input: RunInput, options?: RunnableConfig): Promise<RunOutput> {\n const config = ensureConfig(options);\n const fullValues = await this._formatValues(input);\n const callbackManager_ = await CallbackManager.configure(\n config?.callbacks,\n this.callbacks,\n config?.tags,\n this.tags,\n config?.metadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const runManager = await callbackManager_?.handleChainStart(\n this.toJSON(),\n fullValues,\n undefined,\n undefined,\n undefined,\n undefined,\n config?.runName\n );\n let outputValues: RunOutput;\n try {\n if (fullValues.signal) {\n let listener: (() => void) | undefined;\n outputValues = (await Promise.race([\n this._call(fullValues as RunInput, runManager, config),\n new Promise<never>((_, reject) => {\n listener = () => {\n reject(new Error(\"AbortError\"));\n };\n fullValues.signal?.addEventListener(\"abort\", listener, {\n once: true,\n });\n }),\n ]).finally(() => {\n if (fullValues.signal && listener) {\n fullValues.signal.removeEventListener(\"abort\", listener);\n }\n })) as RunOutput;\n } else {\n outputValues = await this._call(\n fullValues as RunInput,\n runManager,\n config\n );\n }\n } catch (e) {\n await runManager?.handleChainError(e);\n throw e;\n }\n if (!(this.memory == null)) {\n await this.memory.saveContext(\n this._selectMemoryInputs(input),\n outputValues\n );\n }\n await runManager?.handleChainEnd(outputValues);\n // add the runManager's currentRunId to the outputValues\n Object.defineProperty(outputValues, RUN_KEY, {\n value: runManager ? { runId: runManager?.runId } : undefined,\n configurable: true,\n });\n return outputValues;\n }\n\n private _validateOutputs(outputs: Record<string, unknown>): void {\n const missingKeys = this.outputKeys.filter((k) => !(k in outputs));\n if (missingKeys.length) {\n throw new Error(\n `Missing output keys: ${missingKeys.join(\n \", \"\n )} from chain ${this._chainType()}`\n );\n }\n }\n\n async prepOutputs(\n inputs: Record<string, unknown>,\n outputs: Record<string, unknown>,\n returnOnlyOutputs = false\n ) {\n this._validateOutputs(outputs);\n if (this.memory) {\n await this.memory.saveContext(inputs, outputs);\n }\n if (returnOnlyOutputs) {\n return outputs;\n }\n return { ...inputs, ...outputs };\n }\n\n /**\n * Run the core logic of this chain and return the output\n */\n abstract _call(\n values: RunInput,\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<RunOutput>;\n\n /**\n * Return the string type key uniquely identifying this class of chain.\n */\n abstract _chainType(): string;\n\n /**\n * Return a json-like object representing this chain.\n */\n serialize(): SerializedBaseChain {\n throw new Error(\"Method not implemented.\");\n }\n\n abstract get inputKeys(): string[];\n\n abstract get outputKeys(): string[];\n\n /** @deprecated Use .invoke() instead. Will be removed in 0.2.0. */\n async run(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n input: any,\n config?: Callbacks | RunnableConfig\n ): Promise<string> {\n const inputKeys = this.inputKeys.filter(\n (k) => !this.memory?.memoryKeys.includes(k)\n );\n const isKeylessInput = inputKeys.length <= 1;\n if (!isKeylessInput) {\n throw new Error(\n `Chain ${this._chainType()} expects multiple inputs, cannot use 'run' `\n );\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const values = inputKeys.length ? { [inputKeys[0]]: input } : ({} as any);\n const returnValues = await this.call(values, config);\n const keys = Object.keys(returnValues);\n\n if (keys.length === 1) {\n return returnValues[keys[0]];\n }\n throw new Error(\n \"return values have multiple keys, `run` only supported when one key currently\"\n );\n }\n\n protected async _formatValues(\n values: ChainValues & { signal?: AbortSignal; timeout?: number }\n ) {\n const fullValues = { ...values } as typeof values;\n if (fullValues.timeout && !fullValues.signal) {\n fullValues.signal = AbortSignal.timeout(fullValues.timeout);\n delete fullValues.timeout;\n }\n if (!(this.memory == null)) {\n const newValues = await this.memory.loadMemoryVariables(\n this._selectMemoryInputs(values)\n );\n for (const [key, value] of Object.entries(newValues)) {\n fullValues[key] = value;\n }\n }\n return fullValues;\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.2.0.\n *\n * Run the core logic of this chain and add to output if desired.\n *\n * Wraps _call and handles memory.\n */\n async call(\n values: ChainValues & { signal?: AbortSignal; timeout?: number },\n config?: Callbacks | RunnableConfig,\n /** @deprecated */\n tags?: string[]\n ): Promise<RunOutput> {\n const parsedConfig = { tags, ...parseCallbackConfigArg(config) };\n return this.invoke(values as RunInput, parsedConfig);\n }\n\n /**\n * @deprecated Use .batch() instead. Will be removed in 0.2.0.\n *\n * Call the chain on all inputs in the list\n */\n async apply(\n inputs: RunInput[],\n config?: (Callbacks | RunnableConfig)[]\n ): Promise<RunOutput[]> {\n return Promise.all(\n inputs.map(async (i, idx) => this.call(i, config?.[idx]))\n );\n }\n\n /**\n * Load a chain from a json-like object describing it.\n */\n static async deserialize(\n data: SerializedBaseChain,\n values: LoadValues = {}\n ): Promise<BaseChain> {\n switch (data._type) {\n case \"llm_chain\": {\n const { LLMChain } = await import(\"./llm_chain.js\");\n return LLMChain.deserialize(data);\n }\n case \"sequential_chain\": {\n const { SequentialChain } = await import(\"./sequential_chain.js\");\n return SequentialChain.deserialize(data);\n }\n case \"simple_sequential_chain\": {\n const { SimpleSequentialChain } = await import(\"./sequential_chain.js\");\n return SimpleSequentialChain.deserialize(data);\n }\n case \"stuff_documents_chain\": {\n const { StuffDocumentsChain } = await import(\"./combine_docs_chain.js\");\n return StuffDocumentsChain.deserialize(data);\n }\n case \"map_reduce_documents_chain\": {\n const { MapReduceDocumentsChain } =\n await import(\"./combine_docs_chain.js\");\n return MapReduceDocumentsChain.deserialize(data);\n }\n case \"refine_documents_chain\": {\n const { RefineDocumentsChain } =\n await import(\"./combine_docs_chain.js\");\n return RefineDocumentsChain.deserialize(data);\n }\n case \"vector_db_qa\": {\n const { VectorDBQAChain } = await import(\"./vector_db_qa.js\");\n return VectorDBQAChain.deserialize(data, values);\n }\n case \"api_chain\": {\n const { APIChain } = await import(\"./api/api_chain.js\");\n return APIChain.deserialize(data);\n }\n default:\n throw new Error(\n `Invalid prompt type in config: ${\n (data as SerializedBaseChain)._type\n }`\n );\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base.cjs","names":["BaseLangChain","CallbackManager","RUN_KEY"],"sources":["../../src/chains/base.ts"],"sourcesContent":["import { BaseMemory } from \"@langchain/core/memory\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { RUN_KEY } from \"@langchain/core/outputs\";\nimport {\n CallbackManagerForChainRun,\n CallbackManager,\n Callbacks,\n parseCallbackConfigArg,\n} from \"@langchain/core/callbacks/manager\";\nimport { ensureConfig, type RunnableConfig } from \"@langchain/core/runnables\";\nimport {\n BaseLangChain,\n BaseLangChainParams,\n} from \"@langchain/core/language_models/base\";\nimport { SerializedBaseChain } from \"./serde.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\nexport interface ChainInputs extends BaseLangChainParams {\n memory?: BaseMemory;\n\n /**\n * @deprecated Use `callbacks` instead\n */\n callbackManager?: CallbackManager;\n}\n\n/**\n * Base interface that all chains must implement.\n */\nexport abstract class BaseChain<\n RunInput extends ChainValues = ChainValues,\n RunOutput extends ChainValues = ChainValues,\n>\n extends BaseLangChain<RunInput, RunOutput>\n implements ChainInputs\n{\n declare memory?: BaseMemory;\n\n get lc_namespace(): string[] {\n return [\"langchain\", \"chains\", this._chainType()];\n }\n\n constructor(\n fields?: BaseMemory | ChainInputs,\n /** @deprecated */\n verbose?: boolean,\n /** @deprecated */\n callbacks?: Callbacks\n ) {\n if (\n arguments.length === 1 &&\n typeof fields === \"object\" &&\n !(\"saveContext\" in fields)\n ) {\n // fields is not a BaseMemory\n const { memory, callbackManager, ...rest } = fields;\n super({ ...rest, callbacks: callbackManager ?? rest.callbacks });\n this.memory = memory;\n } else {\n // fields is a BaseMemory\n super({ verbose, callbacks });\n this.memory = fields as BaseMemory;\n }\n }\n\n /** @ignore */\n _selectMemoryInputs(values: ChainValues): ChainValues {\n const valuesForMemory = { ...values };\n if (\"signal\" in valuesForMemory) {\n delete valuesForMemory.signal;\n }\n if (\"timeout\" in valuesForMemory) {\n delete valuesForMemory.timeout;\n }\n return valuesForMemory;\n }\n\n /**\n * Invoke the chain with the provided input and returns the output.\n * @param input Input values for the chain run.\n * @param config Optional configuration for the Runnable.\n * @returns Promise that resolves with the output of the chain run.\n */\n async invoke(input: RunInput, options?: RunnableConfig): Promise<RunOutput> {\n const config = ensureConfig(options);\n const fullValues = await this._formatValues(input);\n const callbackManager_ = await CallbackManager.configure(\n config?.callbacks,\n this.callbacks,\n config?.tags,\n this.tags,\n config?.metadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const runManager = await callbackManager_?.handleChainStart(\n this.toJSON(),\n fullValues,\n undefined,\n undefined,\n undefined,\n undefined,\n config?.runName\n );\n let outputValues: RunOutput;\n try {\n if (fullValues.signal) {\n let listener: (() => void) | undefined;\n outputValues = (await Promise.race([\n this._call(fullValues as RunInput, runManager, config),\n new Promise<never>((_, reject) => {\n listener = () => {\n reject(new Error(\"AbortError\"));\n };\n fullValues.signal?.addEventListener(\"abort\", listener, {\n once: true,\n });\n }),\n ]).finally(() => {\n if (fullValues.signal && listener) {\n fullValues.signal.removeEventListener(\"abort\", listener);\n }\n })) as RunOutput;\n } else {\n outputValues = await this._call(\n fullValues as RunInput,\n runManager,\n config\n );\n }\n } catch (e) {\n await runManager?.handleChainError(e);\n throw e;\n }\n if (!(this.memory == null)) {\n await this.memory.saveContext(\n this._selectMemoryInputs(input),\n outputValues\n );\n }\n await runManager?.handleChainEnd(outputValues);\n // add the runManager's currentRunId to the outputValues\n Object.defineProperty(outputValues, RUN_KEY, {\n value: runManager ? { runId: runManager?.runId } : undefined,\n configurable: true,\n });\n return outputValues;\n }\n\n private _validateOutputs(outputs: Record<string, unknown>): void {\n const missingKeys = this.outputKeys.filter((k) => !(k in outputs));\n if (missingKeys.length) {\n throw new Error(\n `Missing output keys: ${missingKeys.join(\n \", \"\n )} from chain ${this._chainType()}`\n );\n }\n }\n\n async prepOutputs(\n inputs: Record<string, unknown>,\n outputs: Record<string, unknown>,\n returnOnlyOutputs = false\n ) {\n this._validateOutputs(outputs);\n if (this.memory) {\n await this.memory.saveContext(inputs, outputs);\n }\n if (returnOnlyOutputs) {\n return outputs;\n }\n return { ...inputs, ...outputs };\n }\n\n /**\n * Run the core logic of this chain and return the output\n */\n abstract _call(\n values: RunInput,\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<RunOutput>;\n\n /**\n * Return the string type key uniquely identifying this class of chain.\n */\n abstract _chainType(): string;\n\n /**\n * Return a json-like object representing this chain.\n */\n serialize(): SerializedBaseChain {\n throw new Error(\"Method not implemented.\");\n }\n\n abstract get inputKeys(): string[];\n\n abstract get outputKeys(): string[];\n\n /** @deprecated Use .invoke() instead. Will be removed in 0.2.0. */\n async run(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n input: any,\n config?: Callbacks | RunnableConfig\n ): Promise<string> {\n const inputKeys = this.inputKeys.filter(\n (k) => !this.memory?.memoryKeys.includes(k)\n );\n const isKeylessInput = inputKeys.length <= 1;\n if (!isKeylessInput) {\n throw new Error(\n `Chain ${this._chainType()} expects multiple inputs, cannot use 'run' `\n );\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const values = inputKeys.length ? { [inputKeys[0]]: input } : ({} as any);\n const returnValues = await this.call(values, config);\n const keys = Object.keys(returnValues);\n\n if (keys.length === 1) {\n return returnValues[keys[0]];\n }\n throw new Error(\n \"return values have multiple keys, `run` only supported when one key currently\"\n );\n }\n\n protected async _formatValues(\n values: ChainValues & { signal?: AbortSignal; timeout?: number }\n ) {\n const fullValues = { ...values } as typeof values;\n if (fullValues.timeout && !fullValues.signal) {\n fullValues.signal = AbortSignal.timeout(fullValues.timeout);\n delete fullValues.timeout;\n }\n if (!(this.memory == null)) {\n const newValues = await this.memory.loadMemoryVariables(\n this._selectMemoryInputs(values)\n );\n for (const [key, value] of Object.entries(newValues)) {\n fullValues[key] = value;\n }\n }\n return fullValues;\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.2.0.\n *\n * Run the core logic of this chain and add to output if desired.\n *\n * Wraps _call and handles memory.\n */\n async call(\n values: ChainValues & { signal?: AbortSignal; timeout?: number },\n config?: Callbacks | RunnableConfig,\n /** @deprecated */\n tags?: string[]\n ): Promise<RunOutput> {\n const parsedConfig = { tags, ...parseCallbackConfigArg(config) };\n return this.invoke(values as RunInput, parsedConfig);\n }\n\n /**\n * @deprecated Use .batch() instead. Will be removed in 0.2.0.\n *\n * Call the chain on all inputs in the list\n */\n async apply(\n inputs: RunInput[],\n config?: (Callbacks | RunnableConfig)[]\n ): Promise<RunOutput[]> {\n return Promise.all(\n inputs.map(async (i, idx) => this.call(i, config?.[idx]))\n );\n }\n\n /**\n * Load a chain from a json-like object describing it.\n */\n static async deserialize(\n data: SerializedBaseChain,\n values: LoadValues = {}\n ): Promise<BaseChain> {\n switch (data._type) {\n case \"llm_chain\": {\n const { LLMChain } = await import(\"./llm_chain.js\");\n return LLMChain.deserialize(data);\n }\n case \"sequential_chain\": {\n const { SequentialChain } = await import(\"./sequential_chain.js\");\n return SequentialChain.deserialize(data);\n }\n case \"simple_sequential_chain\": {\n const { SimpleSequentialChain } = await import(\"./sequential_chain.js\");\n return SimpleSequentialChain.deserialize(data);\n }\n case \"stuff_documents_chain\": {\n const { StuffDocumentsChain } = await import(\"./combine_docs_chain.js\");\n return StuffDocumentsChain.deserialize(data);\n }\n case \"map_reduce_documents_chain\": {\n const { MapReduceDocumentsChain } =\n await import(\"./combine_docs_chain.js\");\n return MapReduceDocumentsChain.deserialize(data);\n }\n case \"refine_documents_chain\": {\n const { RefineDocumentsChain } =\n await import(\"./combine_docs_chain.js\");\n return RefineDocumentsChain.deserialize(data);\n }\n case \"vector_db_qa\": {\n const { VectorDBQAChain } = await import(\"./vector_db_qa.js\");\n return VectorDBQAChain.deserialize(data, values);\n }\n case \"api_chain\": {\n const { APIChain } = await import(\"./api/api_chain.js\");\n return APIChain.deserialize(data);\n }\n default:\n throw new Error(\n `Invalid prompt type in config: ${\n (data as SerializedBaseChain)._type\n }`\n );\n }\n }\n}\n"],"mappings":"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"}
|
package/dist/chains/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","names":[],"sources":["../../src/chains/base.ts"],"sourcesContent":["import { BaseMemory } from \"@langchain/core/memory\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { RUN_KEY } from \"@langchain/core/outputs\";\nimport {\n CallbackManagerForChainRun,\n CallbackManager,\n Callbacks,\n parseCallbackConfigArg,\n} from \"@langchain/core/callbacks/manager\";\nimport { ensureConfig, type RunnableConfig } from \"@langchain/core/runnables\";\nimport {\n BaseLangChain,\n BaseLangChainParams,\n} from \"@langchain/core/language_models/base\";\nimport { SerializedBaseChain } from \"./serde.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\nexport interface ChainInputs extends BaseLangChainParams {\n memory?: BaseMemory;\n\n /**\n * @deprecated Use `callbacks` instead\n */\n callbackManager?: CallbackManager;\n}\n\n/**\n * Base interface that all chains must implement.\n */\nexport abstract class BaseChain<\n RunInput extends ChainValues = ChainValues,\n RunOutput extends ChainValues = ChainValues,\n>\n extends BaseLangChain<RunInput, RunOutput>\n implements ChainInputs\n{\n declare memory?: BaseMemory;\n\n get lc_namespace(): string[] {\n return [\"langchain\", \"chains\", this._chainType()];\n }\n\n constructor(\n fields?: BaseMemory | ChainInputs,\n /** @deprecated */\n verbose?: boolean,\n /** @deprecated */\n callbacks?: Callbacks\n ) {\n if (\n arguments.length === 1 &&\n typeof fields === \"object\" &&\n !(\"saveContext\" in fields)\n ) {\n // fields is not a BaseMemory\n const { memory, callbackManager, ...rest } = fields;\n super({ ...rest, callbacks: callbackManager ?? rest.callbacks });\n this.memory = memory;\n } else {\n // fields is a BaseMemory\n super({ verbose, callbacks });\n this.memory = fields as BaseMemory;\n }\n }\n\n /** @ignore */\n _selectMemoryInputs(values: ChainValues): ChainValues {\n const valuesForMemory = { ...values };\n if (\"signal\" in valuesForMemory) {\n delete valuesForMemory.signal;\n }\n if (\"timeout\" in valuesForMemory) {\n delete valuesForMemory.timeout;\n }\n return valuesForMemory;\n }\n\n /**\n * Invoke the chain with the provided input and returns the output.\n * @param input Input values for the chain run.\n * @param config Optional configuration for the Runnable.\n * @returns Promise that resolves with the output of the chain run.\n */\n async invoke(input: RunInput, options?: RunnableConfig): Promise<RunOutput> {\n const config = ensureConfig(options);\n const fullValues = await this._formatValues(input);\n const callbackManager_ = await CallbackManager.configure(\n config?.callbacks,\n this.callbacks,\n config?.tags,\n this.tags,\n config?.metadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const runManager = await callbackManager_?.handleChainStart(\n this.toJSON(),\n fullValues,\n undefined,\n undefined,\n undefined,\n undefined,\n config?.runName\n );\n let outputValues: RunOutput;\n try {\n if (fullValues.signal) {\n let listener: (() => void) | undefined;\n outputValues = (await Promise.race([\n this._call(fullValues as RunInput, runManager, config),\n new Promise<never>((_, reject) => {\n listener = () => {\n reject(new Error(\"AbortError\"));\n };\n fullValues.signal?.addEventListener(\"abort\", listener, {\n once: true,\n });\n }),\n ]).finally(() => {\n if (fullValues.signal && listener) {\n fullValues.signal.removeEventListener(\"abort\", listener);\n }\n })) as RunOutput;\n } else {\n outputValues = await this._call(\n fullValues as RunInput,\n runManager,\n config\n );\n }\n } catch (e) {\n await runManager?.handleChainError(e);\n throw e;\n }\n if (!(this.memory == null)) {\n await this.memory.saveContext(\n this._selectMemoryInputs(input),\n outputValues\n );\n }\n await runManager?.handleChainEnd(outputValues);\n // add the runManager's currentRunId to the outputValues\n Object.defineProperty(outputValues, RUN_KEY, {\n value: runManager ? { runId: runManager?.runId } : undefined,\n configurable: true,\n });\n return outputValues;\n }\n\n private _validateOutputs(outputs: Record<string, unknown>): void {\n const missingKeys = this.outputKeys.filter((k) => !(k in outputs));\n if (missingKeys.length) {\n throw new Error(\n `Missing output keys: ${missingKeys.join(\n \", \"\n )} from chain ${this._chainType()}`\n );\n }\n }\n\n async prepOutputs(\n inputs: Record<string, unknown>,\n outputs: Record<string, unknown>,\n returnOnlyOutputs = false\n ) {\n this._validateOutputs(outputs);\n if (this.memory) {\n await this.memory.saveContext(inputs, outputs);\n }\n if (returnOnlyOutputs) {\n return outputs;\n }\n return { ...inputs, ...outputs };\n }\n\n /**\n * Run the core logic of this chain and return the output\n */\n abstract _call(\n values: RunInput,\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<RunOutput>;\n\n /**\n * Return the string type key uniquely identifying this class of chain.\n */\n abstract _chainType(): string;\n\n /**\n * Return a json-like object representing this chain.\n */\n serialize(): SerializedBaseChain {\n throw new Error(\"Method not implemented.\");\n }\n\n abstract get inputKeys(): string[];\n\n abstract get outputKeys(): string[];\n\n /** @deprecated Use .invoke() instead. Will be removed in 0.2.0. */\n async run(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n input: any,\n config?: Callbacks | RunnableConfig\n ): Promise<string> {\n const inputKeys = this.inputKeys.filter(\n (k) => !this.memory?.memoryKeys.includes(k)\n );\n const isKeylessInput = inputKeys.length <= 1;\n if (!isKeylessInput) {\n throw new Error(\n `Chain ${this._chainType()} expects multiple inputs, cannot use 'run' `\n );\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const values = inputKeys.length ? { [inputKeys[0]]: input } : ({} as any);\n const returnValues = await this.call(values, config);\n const keys = Object.keys(returnValues);\n\n if (keys.length === 1) {\n return returnValues[keys[0]];\n }\n throw new Error(\n \"return values have multiple keys, `run` only supported when one key currently\"\n );\n }\n\n protected async _formatValues(\n values: ChainValues & { signal?: AbortSignal; timeout?: number }\n ) {\n const fullValues = { ...values } as typeof values;\n if (fullValues.timeout && !fullValues.signal) {\n fullValues.signal = AbortSignal.timeout(fullValues.timeout);\n delete fullValues.timeout;\n }\n if (!(this.memory == null)) {\n const newValues = await this.memory.loadMemoryVariables(\n this._selectMemoryInputs(values)\n );\n for (const [key, value] of Object.entries(newValues)) {\n fullValues[key] = value;\n }\n }\n return fullValues;\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.2.0.\n *\n * Run the core logic of this chain and add to output if desired.\n *\n * Wraps _call and handles memory.\n */\n async call(\n values: ChainValues & { signal?: AbortSignal; timeout?: number },\n config?: Callbacks | RunnableConfig,\n /** @deprecated */\n tags?: string[]\n ): Promise<RunOutput> {\n const parsedConfig = { tags, ...parseCallbackConfigArg(config) };\n return this.invoke(values as RunInput, parsedConfig);\n }\n\n /**\n * @deprecated Use .batch() instead. Will be removed in 0.2.0.\n *\n * Call the chain on all inputs in the list\n */\n async apply(\n inputs: RunInput[],\n config?: (Callbacks | RunnableConfig)[]\n ): Promise<RunOutput[]> {\n return Promise.all(\n inputs.map(async (i, idx) => this.call(i, config?.[idx]))\n );\n }\n\n /**\n * Load a chain from a json-like object describing it.\n */\n static async deserialize(\n data: SerializedBaseChain,\n values: LoadValues = {}\n ): Promise<BaseChain> {\n switch (data._type) {\n case \"llm_chain\": {\n const { LLMChain } = await import(\"./llm_chain.js\");\n return LLMChain.deserialize(data);\n }\n case \"sequential_chain\": {\n const { SequentialChain } = await import(\"./sequential_chain.js\");\n return SequentialChain.deserialize(data);\n }\n case \"simple_sequential_chain\": {\n const { SimpleSequentialChain } = await import(\"./sequential_chain.js\");\n return SimpleSequentialChain.deserialize(data);\n }\n case \"stuff_documents_chain\": {\n const { StuffDocumentsChain } = await import(\"./combine_docs_chain.js\");\n return StuffDocumentsChain.deserialize(data);\n }\n case \"map_reduce_documents_chain\": {\n const { MapReduceDocumentsChain } =\n await import(\"./combine_docs_chain.js\");\n return MapReduceDocumentsChain.deserialize(data);\n }\n case \"refine_documents_chain\": {\n const { RefineDocumentsChain } =\n await import(\"./combine_docs_chain.js\");\n return RefineDocumentsChain.deserialize(data);\n }\n case \"vector_db_qa\": {\n const { VectorDBQAChain } = await import(\"./vector_db_qa.js\");\n return VectorDBQAChain.deserialize(data, values);\n }\n case \"api_chain\": {\n const { APIChain } = await import(\"./api/api_chain.js\");\n return APIChain.deserialize(data);\n }\n default:\n throw new Error(\n `Invalid prompt type in config: ${\n (data as SerializedBaseChain)._type\n }`\n );\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base.js","names":[],"sources":["../../src/chains/base.ts"],"sourcesContent":["import { BaseMemory } from \"@langchain/core/memory\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { RUN_KEY } from \"@langchain/core/outputs\";\nimport {\n CallbackManagerForChainRun,\n CallbackManager,\n Callbacks,\n parseCallbackConfigArg,\n} from \"@langchain/core/callbacks/manager\";\nimport { ensureConfig, type RunnableConfig } from \"@langchain/core/runnables\";\nimport {\n BaseLangChain,\n BaseLangChainParams,\n} from \"@langchain/core/language_models/base\";\nimport { SerializedBaseChain } from \"./serde.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\nexport interface ChainInputs extends BaseLangChainParams {\n memory?: BaseMemory;\n\n /**\n * @deprecated Use `callbacks` instead\n */\n callbackManager?: CallbackManager;\n}\n\n/**\n * Base interface that all chains must implement.\n */\nexport abstract class BaseChain<\n RunInput extends ChainValues = ChainValues,\n RunOutput extends ChainValues = ChainValues,\n>\n extends BaseLangChain<RunInput, RunOutput>\n implements ChainInputs\n{\n declare memory?: BaseMemory;\n\n get lc_namespace(): string[] {\n return [\"langchain\", \"chains\", this._chainType()];\n }\n\n constructor(\n fields?: BaseMemory | ChainInputs,\n /** @deprecated */\n verbose?: boolean,\n /** @deprecated */\n callbacks?: Callbacks\n ) {\n if (\n arguments.length === 1 &&\n typeof fields === \"object\" &&\n !(\"saveContext\" in fields)\n ) {\n // fields is not a BaseMemory\n const { memory, callbackManager, ...rest } = fields;\n super({ ...rest, callbacks: callbackManager ?? rest.callbacks });\n this.memory = memory;\n } else {\n // fields is a BaseMemory\n super({ verbose, callbacks });\n this.memory = fields as BaseMemory;\n }\n }\n\n /** @ignore */\n _selectMemoryInputs(values: ChainValues): ChainValues {\n const valuesForMemory = { ...values };\n if (\"signal\" in valuesForMemory) {\n delete valuesForMemory.signal;\n }\n if (\"timeout\" in valuesForMemory) {\n delete valuesForMemory.timeout;\n }\n return valuesForMemory;\n }\n\n /**\n * Invoke the chain with the provided input and returns the output.\n * @param input Input values for the chain run.\n * @param config Optional configuration for the Runnable.\n * @returns Promise that resolves with the output of the chain run.\n */\n async invoke(input: RunInput, options?: RunnableConfig): Promise<RunOutput> {\n const config = ensureConfig(options);\n const fullValues = await this._formatValues(input);\n const callbackManager_ = await CallbackManager.configure(\n config?.callbacks,\n this.callbacks,\n config?.tags,\n this.tags,\n config?.metadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const runManager = await callbackManager_?.handleChainStart(\n this.toJSON(),\n fullValues,\n undefined,\n undefined,\n undefined,\n undefined,\n config?.runName\n );\n let outputValues: RunOutput;\n try {\n if (fullValues.signal) {\n let listener: (() => void) | undefined;\n outputValues = (await Promise.race([\n this._call(fullValues as RunInput, runManager, config),\n new Promise<never>((_, reject) => {\n listener = () => {\n reject(new Error(\"AbortError\"));\n };\n fullValues.signal?.addEventListener(\"abort\", listener, {\n once: true,\n });\n }),\n ]).finally(() => {\n if (fullValues.signal && listener) {\n fullValues.signal.removeEventListener(\"abort\", listener);\n }\n })) as RunOutput;\n } else {\n outputValues = await this._call(\n fullValues as RunInput,\n runManager,\n config\n );\n }\n } catch (e) {\n await runManager?.handleChainError(e);\n throw e;\n }\n if (!(this.memory == null)) {\n await this.memory.saveContext(\n this._selectMemoryInputs(input),\n outputValues\n );\n }\n await runManager?.handleChainEnd(outputValues);\n // add the runManager's currentRunId to the outputValues\n Object.defineProperty(outputValues, RUN_KEY, {\n value: runManager ? { runId: runManager?.runId } : undefined,\n configurable: true,\n });\n return outputValues;\n }\n\n private _validateOutputs(outputs: Record<string, unknown>): void {\n const missingKeys = this.outputKeys.filter((k) => !(k in outputs));\n if (missingKeys.length) {\n throw new Error(\n `Missing output keys: ${missingKeys.join(\n \", \"\n )} from chain ${this._chainType()}`\n );\n }\n }\n\n async prepOutputs(\n inputs: Record<string, unknown>,\n outputs: Record<string, unknown>,\n returnOnlyOutputs = false\n ) {\n this._validateOutputs(outputs);\n if (this.memory) {\n await this.memory.saveContext(inputs, outputs);\n }\n if (returnOnlyOutputs) {\n return outputs;\n }\n return { ...inputs, ...outputs };\n }\n\n /**\n * Run the core logic of this chain and return the output\n */\n abstract _call(\n values: RunInput,\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<RunOutput>;\n\n /**\n * Return the string type key uniquely identifying this class of chain.\n */\n abstract _chainType(): string;\n\n /**\n * Return a json-like object representing this chain.\n */\n serialize(): SerializedBaseChain {\n throw new Error(\"Method not implemented.\");\n }\n\n abstract get inputKeys(): string[];\n\n abstract get outputKeys(): string[];\n\n /** @deprecated Use .invoke() instead. Will be removed in 0.2.0. */\n async run(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n input: any,\n config?: Callbacks | RunnableConfig\n ): Promise<string> {\n const inputKeys = this.inputKeys.filter(\n (k) => !this.memory?.memoryKeys.includes(k)\n );\n const isKeylessInput = inputKeys.length <= 1;\n if (!isKeylessInput) {\n throw new Error(\n `Chain ${this._chainType()} expects multiple inputs, cannot use 'run' `\n );\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const values = inputKeys.length ? { [inputKeys[0]]: input } : ({} as any);\n const returnValues = await this.call(values, config);\n const keys = Object.keys(returnValues);\n\n if (keys.length === 1) {\n return returnValues[keys[0]];\n }\n throw new Error(\n \"return values have multiple keys, `run` only supported when one key currently\"\n );\n }\n\n protected async _formatValues(\n values: ChainValues & { signal?: AbortSignal; timeout?: number }\n ) {\n const fullValues = { ...values } as typeof values;\n if (fullValues.timeout && !fullValues.signal) {\n fullValues.signal = AbortSignal.timeout(fullValues.timeout);\n delete fullValues.timeout;\n }\n if (!(this.memory == null)) {\n const newValues = await this.memory.loadMemoryVariables(\n this._selectMemoryInputs(values)\n );\n for (const [key, value] of Object.entries(newValues)) {\n fullValues[key] = value;\n }\n }\n return fullValues;\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.2.0.\n *\n * Run the core logic of this chain and add to output if desired.\n *\n * Wraps _call and handles memory.\n */\n async call(\n values: ChainValues & { signal?: AbortSignal; timeout?: number },\n config?: Callbacks | RunnableConfig,\n /** @deprecated */\n tags?: string[]\n ): Promise<RunOutput> {\n const parsedConfig = { tags, ...parseCallbackConfigArg(config) };\n return this.invoke(values as RunInput, parsedConfig);\n }\n\n /**\n * @deprecated Use .batch() instead. Will be removed in 0.2.0.\n *\n * Call the chain on all inputs in the list\n */\n async apply(\n inputs: RunInput[],\n config?: (Callbacks | RunnableConfig)[]\n ): Promise<RunOutput[]> {\n return Promise.all(\n inputs.map(async (i, idx) => this.call(i, config?.[idx]))\n );\n }\n\n /**\n * Load a chain from a json-like object describing it.\n */\n static async deserialize(\n data: SerializedBaseChain,\n values: LoadValues = {}\n ): Promise<BaseChain> {\n switch (data._type) {\n case \"llm_chain\": {\n const { LLMChain } = await import(\"./llm_chain.js\");\n return LLMChain.deserialize(data);\n }\n case \"sequential_chain\": {\n const { SequentialChain } = await import(\"./sequential_chain.js\");\n return SequentialChain.deserialize(data);\n }\n case \"simple_sequential_chain\": {\n const { SimpleSequentialChain } = await import(\"./sequential_chain.js\");\n return SimpleSequentialChain.deserialize(data);\n }\n case \"stuff_documents_chain\": {\n const { StuffDocumentsChain } = await import(\"./combine_docs_chain.js\");\n return StuffDocumentsChain.deserialize(data);\n }\n case \"map_reduce_documents_chain\": {\n const { MapReduceDocumentsChain } =\n await import(\"./combine_docs_chain.js\");\n return MapReduceDocumentsChain.deserialize(data);\n }\n case \"refine_documents_chain\": {\n const { RefineDocumentsChain } =\n await import(\"./combine_docs_chain.js\");\n return RefineDocumentsChain.deserialize(data);\n }\n case \"vector_db_qa\": {\n const { VectorDBQAChain } = await import(\"./vector_db_qa.js\");\n return VectorDBQAChain.deserialize(data, values);\n }\n case \"api_chain\": {\n const { APIChain } = await import(\"./api/api_chain.js\");\n return APIChain.deserialize(data);\n }\n default:\n throw new Error(\n `Invalid prompt type in config: ${\n (data as SerializedBaseChain)._type\n }`\n );\n }\n }\n}\n"],"mappings":"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"}
|