langchain 1.0.0-alpha.4 → 1.0.0-alpha.6
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/dist/agents/ReactAgent.cjs +5 -5
- package/dist/agents/ReactAgent.cjs.map +1 -1
- package/dist/agents/ReactAgent.d.cts +1 -3
- package/dist/agents/ReactAgent.d.cts.map +1 -1
- package/dist/agents/ReactAgent.d.ts +1 -3
- package/dist/agents/ReactAgent.d.ts.map +1 -1
- package/dist/agents/ReactAgent.js +6 -6
- package/dist/agents/ReactAgent.js.map +1 -1
- package/dist/agents/RunnableCallable.cjs +5 -0
- package/dist/agents/RunnableCallable.cjs.map +1 -1
- package/dist/agents/RunnableCallable.d.cts +2 -0
- package/dist/agents/RunnableCallable.d.cts.map +1 -1
- package/dist/agents/RunnableCallable.d.ts +2 -0
- package/dist/agents/RunnableCallable.d.ts.map +1 -1
- package/dist/agents/RunnableCallable.js +5 -0
- package/dist/agents/RunnableCallable.js.map +1 -1
- package/dist/agents/annotation.cjs.map +1 -1
- package/dist/agents/annotation.d.cts +5 -7
- package/dist/agents/annotation.d.cts.map +1 -1
- package/dist/agents/annotation.d.ts +4 -6
- package/dist/agents/annotation.d.ts.map +1 -1
- package/dist/agents/annotation.js.map +1 -1
- package/dist/agents/createAgent.cjs +10 -0
- package/dist/agents/createAgent.cjs.map +1 -0
- package/dist/agents/createAgent.js +10 -0
- package/dist/agents/createAgent.js.map +1 -0
- package/dist/agents/index.cjs +23 -4
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +84 -21
- package/dist/agents/index.d.cts.map +1 -1
- package/dist/agents/index.d.ts +84 -21
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +23 -4
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/middlewareAgent/ReactAgent.cjs +255 -0
- package/dist/agents/middlewareAgent/ReactAgent.cjs.map +1 -0
- package/dist/agents/middlewareAgent/ReactAgent.d.cts +67 -0
- package/dist/agents/middlewareAgent/ReactAgent.d.cts.map +1 -0
- package/dist/agents/middlewareAgent/ReactAgent.d.ts +67 -0
- package/dist/agents/middlewareAgent/ReactAgent.d.ts.map +1 -0
- package/dist/agents/middlewareAgent/ReactAgent.js +254 -0
- package/dist/agents/middlewareAgent/ReactAgent.js.map +1 -0
- package/dist/agents/middlewareAgent/annotation.cjs +39 -0
- package/dist/agents/middlewareAgent/annotation.cjs.map +1 -0
- package/dist/agents/middlewareAgent/annotation.js +38 -0
- package/dist/agents/middlewareAgent/annotation.js.map +1 -0
- package/dist/agents/middlewareAgent/index.cjs +11 -0
- package/dist/agents/middlewareAgent/index.cjs.map +1 -0
- package/dist/agents/middlewareAgent/index.js +11 -0
- package/dist/agents/middlewareAgent/index.js.map +1 -0
- package/dist/agents/middlewareAgent/middleware/hitl.cjs +235 -0
- package/dist/agents/middlewareAgent/middleware/hitl.cjs.map +1 -0
- package/dist/agents/middlewareAgent/middleware/hitl.d.cts +199 -0
- package/dist/agents/middlewareAgent/middleware/hitl.d.cts.map +1 -0
- package/dist/agents/middlewareAgent/middleware/hitl.d.ts +199 -0
- package/dist/agents/middlewareAgent/middleware/hitl.d.ts.map +1 -0
- package/dist/agents/middlewareAgent/middleware/hitl.js +234 -0
- package/dist/agents/middlewareAgent/middleware/hitl.js.map +1 -0
- package/dist/agents/middlewareAgent/middleware/index.cjs +26 -0
- package/dist/agents/middlewareAgent/middleware/index.cjs.map +1 -0
- package/dist/agents/middlewareAgent/middleware/index.d.cts +4 -0
- package/dist/agents/middlewareAgent/middleware/index.d.ts +4 -0
- package/dist/agents/middlewareAgent/middleware/index.js +17 -0
- package/dist/agents/middlewareAgent/middleware/index.js.map +1 -0
- package/dist/agents/middlewareAgent/middleware/promptCaching.cjs +182 -0
- package/dist/agents/middlewareAgent/middleware/promptCaching.cjs.map +1 -0
- package/dist/agents/middlewareAgent/middleware/promptCaching.d.cts +152 -0
- package/dist/agents/middlewareAgent/middleware/promptCaching.d.cts.map +1 -0
- package/dist/agents/middlewareAgent/middleware/promptCaching.d.ts +152 -0
- package/dist/agents/middlewareAgent/middleware/promptCaching.d.ts.map +1 -0
- package/dist/agents/middlewareAgent/middleware/promptCaching.js +181 -0
- package/dist/agents/middlewareAgent/middleware/promptCaching.js.map +1 -0
- package/dist/agents/middlewareAgent/middleware/summarization.cjs +262 -0
- package/dist/agents/middlewareAgent/middleware/summarization.cjs.map +1 -0
- package/dist/agents/middlewareAgent/middleware/summarization.d.cts +89 -0
- package/dist/agents/middlewareAgent/middleware/summarization.d.cts.map +1 -0
- package/dist/agents/middlewareAgent/middleware/summarization.d.ts +89 -0
- package/dist/agents/middlewareAgent/middleware/summarization.d.ts.map +1 -0
- package/dist/agents/middlewareAgent/middleware/summarization.js +260 -0
- package/dist/agents/middlewareAgent/middleware/summarization.js.map +1 -0
- package/dist/agents/middlewareAgent/middleware.cjs +47 -0
- package/dist/agents/middlewareAgent/middleware.cjs.map +1 -0
- package/dist/agents/middlewareAgent/middleware.d.cts +46 -0
- package/dist/agents/middlewareAgent/middleware.d.cts.map +1 -0
- package/dist/agents/middlewareAgent/middleware.d.ts +46 -0
- package/dist/agents/middlewareAgent/middleware.d.ts.map +1 -0
- package/dist/agents/middlewareAgent/middleware.js +46 -0
- package/dist/agents/middlewareAgent/middleware.js.map +1 -0
- package/dist/agents/middlewareAgent/nodes/AfterModalNode.cjs +29 -0
- package/dist/agents/middlewareAgent/nodes/AfterModalNode.cjs.map +1 -0
- package/dist/agents/middlewareAgent/nodes/AfterModalNode.js +29 -0
- package/dist/agents/middlewareAgent/nodes/AfterModalNode.js.map +1 -0
- package/dist/agents/middlewareAgent/nodes/AgentNode.cjs +325 -0
- package/dist/agents/middlewareAgent/nodes/AgentNode.cjs.map +1 -0
- package/dist/agents/middlewareAgent/nodes/AgentNode.js +324 -0
- package/dist/agents/middlewareAgent/nodes/AgentNode.js.map +1 -0
- package/dist/agents/middlewareAgent/nodes/BeforeModalNode.cjs +27 -0
- package/dist/agents/middlewareAgent/nodes/BeforeModalNode.cjs.map +1 -0
- package/dist/agents/middlewareAgent/nodes/BeforeModalNode.js +27 -0
- package/dist/agents/middlewareAgent/nodes/BeforeModalNode.js.map +1 -0
- package/dist/agents/middlewareAgent/nodes/middleware.cjs +73 -0
- package/dist/agents/middlewareAgent/nodes/middleware.cjs.map +1 -0
- package/dist/agents/middlewareAgent/nodes/middleware.js +73 -0
- package/dist/agents/middlewareAgent/nodes/middleware.js.map +1 -0
- package/dist/agents/middlewareAgent/nodes/utils.cjs +74 -0
- package/dist/agents/middlewareAgent/nodes/utils.cjs.map +1 -0
- package/dist/agents/middlewareAgent/nodes/utils.js +70 -0
- package/dist/agents/middlewareAgent/nodes/utils.js.map +1 -0
- package/dist/agents/middlewareAgent/types.d.cts +380 -0
- package/dist/agents/middlewareAgent/types.d.cts.map +1 -0
- package/dist/agents/middlewareAgent/types.d.ts +380 -0
- package/dist/agents/middlewareAgent/types.d.ts.map +1 -0
- package/dist/agents/nodes/AgentNode.cjs +4 -4
- package/dist/agents/nodes/AgentNode.cjs.map +1 -1
- package/dist/agents/nodes/AgentNode.js +4 -4
- package/dist/agents/nodes/AgentNode.js.map +1 -1
- package/dist/agents/nodes/ToolNode.cjs +3 -3
- package/dist/agents/nodes/ToolNode.cjs.map +1 -1
- package/dist/agents/nodes/ToolNode.d.cts +4 -5
- package/dist/agents/nodes/ToolNode.d.cts.map +1 -1
- package/dist/agents/nodes/ToolNode.d.ts +1 -2
- package/dist/agents/nodes/ToolNode.d.ts.map +1 -1
- package/dist/agents/nodes/ToolNode.js +4 -4
- package/dist/agents/nodes/ToolNode.js.map +1 -1
- package/dist/agents/responses.cjs +1 -1
- package/dist/agents/responses.cjs.map +1 -1
- package/dist/agents/responses.d.cts.map +1 -1
- package/dist/agents/responses.d.ts.map +1 -1
- package/dist/agents/responses.js +1 -1
- package/dist/agents/responses.js.map +1 -1
- package/dist/agents/types.d.cts +5 -7
- package/dist/agents/types.d.cts.map +1 -1
- package/dist/agents/types.d.ts +1 -3
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/utils.cjs +6 -6
- package/dist/agents/utils.cjs.map +1 -1
- package/dist/agents/utils.js +7 -7
- package/dist/agents/utils.js.map +1 -1
- package/dist/agents/withAgentName.cjs.map +1 -1
- package/dist/agents/withAgentName.js.map +1 -1
- package/dist/chains/api/api_chain.d.cts +1 -1
- package/dist/chains/api/prompts.cjs.map +1 -1
- package/dist/chains/api/prompts.js.map +1 -1
- package/dist/chains/base.d.cts +1 -1
- package/dist/chains/combine_docs_chain.d.cts +1 -1
- package/dist/chains/combine_documents/stuff.d.cts +1 -1
- package/dist/chains/constitutional_ai/constitutional_chain.cjs.map +1 -1
- package/dist/chains/constitutional_ai/constitutional_chain.js.map +1 -1
- package/dist/chains/conversational_retrieval_chain.d.cts +1 -1
- package/dist/chains/graph_qa/cypher.d.cts +1 -1
- package/dist/chains/history_aware_retriever.d.cts +2 -2
- package/dist/chains/index.cjs +0 -3
- package/dist/chains/index.cjs.map +1 -1
- package/dist/chains/index.d.cts +1 -2
- package/dist/chains/index.d.ts +1 -2
- package/dist/chains/index.js +1 -3
- package/dist/chains/index.js.map +1 -1
- package/dist/chains/llm_chain.d.cts +3 -3
- package/dist/chains/openai_functions/base.d.cts +3 -3
- package/dist/chains/openai_functions/extraction.cjs.map +1 -1
- package/dist/chains/openai_functions/extraction.d.cts +1 -3
- package/dist/chains/openai_functions/extraction.d.cts.map +1 -1
- package/dist/chains/openai_functions/extraction.d.ts +1 -3
- package/dist/chains/openai_functions/extraction.d.ts.map +1 -1
- package/dist/chains/openai_functions/extraction.js.map +1 -1
- package/dist/chains/openai_functions/index.cjs +0 -5
- package/dist/chains/openai_functions/index.cjs.map +1 -1
- package/dist/chains/openai_functions/index.d.cts +1 -2
- package/dist/chains/openai_functions/index.d.ts +1 -2
- package/dist/chains/openai_functions/index.js +1 -4
- package/dist/chains/openai_functions/index.js.map +1 -1
- package/dist/chains/openai_functions/openapi.cjs +4 -4
- package/dist/chains/openai_functions/openapi.cjs.map +1 -1
- package/dist/chains/openai_functions/openapi.d.cts +2 -2
- package/dist/chains/openai_functions/openapi.js +4 -4
- package/dist/chains/openai_functions/openapi.js.map +1 -1
- package/dist/chains/openai_functions/tagging.cjs.map +1 -1
- package/dist/chains/openai_functions/tagging.d.cts +2 -4
- package/dist/chains/openai_functions/tagging.d.cts.map +1 -1
- package/dist/chains/openai_functions/tagging.d.ts +1 -3
- package/dist/chains/openai_functions/tagging.d.ts.map +1 -1
- package/dist/chains/openai_functions/tagging.js.map +1 -1
- package/dist/chains/query_constructor/index.cjs +4 -4
- package/dist/chains/query_constructor/index.cjs.map +1 -1
- package/dist/chains/query_constructor/index.d.cts +5 -3
- package/dist/chains/query_constructor/index.d.cts.map +1 -1
- package/dist/chains/query_constructor/index.d.ts +4 -2
- package/dist/chains/query_constructor/index.d.ts.map +1 -1
- package/dist/chains/query_constructor/index.js +1 -1
- package/dist/chains/query_constructor/index.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.d.cts +1 -1
- package/dist/chains/router/llm_router.d.cts +1 -1
- package/dist/chains/router/multi_prompt.cjs +4 -4
- package/dist/chains/router/multi_prompt.cjs.map +1 -1
- package/dist/chains/router/multi_prompt.js +1 -1
- package/dist/chains/router/multi_prompt.js.map +1 -1
- package/dist/chains/router/multi_retrieval_qa.cjs +4 -4
- package/dist/chains/router/multi_retrieval_qa.cjs.map +1 -1
- package/dist/chains/router/multi_retrieval_qa.js +1 -1
- package/dist/chains/router/multi_retrieval_qa.js.map +1 -1
- package/dist/chains/sql_db/sql_db_chain.d.cts +2 -2
- package/dist/chains/sql_db/sql_db_prompt.cjs.map +1 -1
- package/dist/chains/sql_db/sql_db_prompt.d.cts.map +1 -1
- package/dist/chains/sql_db/sql_db_prompt.d.ts.map +1 -1
- package/dist/chains/sql_db/sql_db_prompt.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 +8 -5
- package/dist/chat_models/universal.cjs.map +1 -1
- package/dist/chat_models/universal.d.cts +4 -4
- package/dist/chat_models/universal.d.cts.map +1 -1
- package/dist/chat_models/universal.d.ts +2 -2
- package/dist/chat_models/universal.d.ts.map +1 -1
- package/dist/chat_models/universal.js +8 -5
- package/dist/chat_models/universal.js.map +1 -1
- package/dist/document_loaders/fs/directory.cjs.map +1 -1
- package/dist/document_loaders/fs/directory.d.cts +0 -1
- package/dist/document_loaders/fs/directory.d.cts.map +1 -1
- package/dist/document_loaders/fs/directory.d.ts +0 -1
- package/dist/document_loaders/fs/directory.d.ts.map +1 -1
- package/dist/document_loaders/fs/directory.js.map +1 -1
- package/dist/document_loaders/fs/json.cjs +7 -1
- package/dist/document_loaders/fs/json.cjs.map +1 -1
- package/dist/document_loaders/fs/json.js +7 -1
- package/dist/document_loaders/fs/json.js.map +1 -1
- package/dist/embeddings/cache_backed.cjs +1 -1
- package/dist/embeddings/cache_backed.cjs.map +1 -1
- package/dist/embeddings/cache_backed.d.cts +1 -1
- package/dist/embeddings/cache_backed.d.ts +1 -1
- package/dist/embeddings/cache_backed.js +2 -2
- package/dist/embeddings/cache_backed.js.map +1 -1
- package/dist/evaluation/agents/trajectory.d.cts +3 -3
- package/dist/evaluation/agents/trajectory.d.cts.map +1 -1
- package/dist/evaluation/agents/trajectory.d.ts.map +1 -1
- package/dist/evaluation/comparison/pairwise.d.cts +1 -1
- package/dist/evaluation/comparison/pairwise.d.cts.map +1 -1
- package/dist/evaluation/criteria/criteria.d.cts +1 -1
- package/dist/evaluation/criteria/criteria.d.cts.map +1 -1
- package/dist/evaluation/criteria/criteria.d.ts.map +1 -1
- package/dist/evaluation/embedding_distance/base.cjs +2 -4
- package/dist/evaluation/embedding_distance/base.cjs.map +1 -1
- package/dist/evaluation/embedding_distance/base.js +2 -3
- package/dist/evaluation/embedding_distance/base.js.map +1 -1
- package/dist/evaluation/loader.cjs +7 -12
- package/dist/evaluation/loader.cjs.map +1 -1
- package/dist/evaluation/loader.d.cts +8 -2
- package/dist/evaluation/loader.d.cts.map +1 -1
- package/dist/evaluation/loader.d.ts +8 -2
- package/dist/evaluation/loader.d.ts.map +1 -1
- package/dist/evaluation/loader.js +7 -12
- package/dist/evaluation/loader.js.map +1 -1
- package/dist/evaluation/qa/eval_chain.d.cts +1 -1
- package/dist/hub/base.cjs.map +1 -1
- package/dist/hub/base.js.map +1 -1
- package/dist/index.cjs +3 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -4
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/langchain-core/dist/load/serializable.d.cts.map +1 -1
- package/dist/langchain-core/dist/messages/base.d.cts +24 -33
- package/dist/langchain-core/dist/messages/base.d.cts.map +1 -1
- package/dist/langchain-core/dist/messages/content/index.d.cts +1 -1
- package/dist/langchain-core/dist/messages/content/index.d.cts.map +1 -1
- package/dist/langchain-core/dist/messages/message.d.cts +598 -0
- package/dist/langchain-core/dist/messages/message.d.cts.map +1 -0
- package/dist/langchain-core/dist/messages/metadata.d.cts +97 -0
- package/dist/langchain-core/dist/messages/metadata.d.cts.map +1 -0
- package/dist/langchain-core/dist/messages/utils.d.cts +75 -0
- package/dist/langchain-core/dist/messages/utils.d.cts.map +1 -0
- package/dist/langchain-core/dist/prompt_values.d.cts.map +1 -1
- package/dist/libs/langchain-core/dist/load/serializable.d.ts.map +1 -1
- package/dist/libs/langchain-core/dist/messages/base.d.ts +24 -33
- package/dist/libs/langchain-core/dist/messages/base.d.ts.map +1 -1
- package/dist/libs/langchain-core/dist/messages/content/index.d.ts +1 -1
- package/dist/libs/langchain-core/dist/messages/content/index.d.ts.map +1 -1
- package/dist/libs/langchain-core/dist/messages/message.d.ts +598 -0
- package/dist/libs/langchain-core/dist/messages/message.d.ts.map +1 -0
- package/dist/libs/langchain-core/dist/messages/metadata.d.ts +97 -0
- package/dist/libs/langchain-core/dist/messages/metadata.d.ts.map +1 -0
- package/dist/libs/langchain-core/dist/messages/utils.d.ts +75 -0
- package/dist/libs/langchain-core/dist/messages/utils.d.ts.map +1 -0
- package/dist/libs/langchain-core/dist/prompt_values.d.ts.map +1 -1
- package/dist/libs/langchain-core/dist/utils/types/index.d.ts +2 -0
- package/dist/libs/langchain-core/dist/utils/types/index.d.ts.map +1 -1
- package/dist/libs/langchain-core/dist/utils/types/zod.d.ts +1 -0
- package/dist/load/import_map.cjs +2 -13
- package/dist/load/import_map.cjs.map +1 -1
- package/dist/load/import_map.js +2 -13
- package/dist/load/import_map.js.map +1 -1
- package/dist/memory/prompt.cjs.map +1 -1
- package/dist/memory/prompt.d.cts.map +1 -1
- package/dist/memory/prompt.d.ts.map +1 -1
- package/dist/memory/prompt.js.map +1 -1
- package/dist/memory/summary.d.cts +1 -1
- package/dist/output_parsers/combining.cjs +1 -1
- package/dist/output_parsers/combining.cjs.map +1 -1
- package/dist/output_parsers/combining.js +1 -1
- package/dist/output_parsers/combining.js.map +1 -1
- package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.cjs.map +1 -1
- package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.js.map +1 -1
- package/dist/output_parsers/expression_type_handlers/base.cjs +1 -1
- package/dist/output_parsers/expression_type_handlers/base.cjs.map +1 -1
- package/dist/output_parsers/expression_type_handlers/base.js +1 -1
- package/dist/output_parsers/expression_type_handlers/base.js.map +1 -1
- package/dist/output_parsers/fix.d.cts +1 -1
- package/dist/output_parsers/http_response.d.cts +1 -1
- package/dist/output_parsers/regex.cjs.map +1 -1
- package/dist/output_parsers/regex.js.map +1 -1
- package/dist/output_parsers/structured.cjs +4 -4
- package/dist/output_parsers/structured.cjs.map +1 -1
- package/dist/output_parsers/structured.d.cts +2 -2
- package/dist/output_parsers/structured.d.cts.map +1 -1
- package/dist/output_parsers/structured.d.ts +1 -1
- package/dist/output_parsers/structured.d.ts.map +1 -1
- package/dist/output_parsers/structured.js +2 -2
- package/dist/output_parsers/structured.js.map +1 -1
- package/dist/retrievers/ensemble.cjs.map +1 -1
- package/dist/retrievers/ensemble.js.map +1 -1
- package/dist/storage/file_system.cjs +1 -1
- package/dist/storage/file_system.cjs.map +1 -1
- package/dist/storage/file_system.js +1 -1
- package/dist/storage/file_system.js.map +1 -1
- package/dist/tools/fs.cjs +5 -5
- package/dist/tools/fs.cjs.map +1 -1
- package/dist/tools/fs.d.cts +1 -1
- package/dist/tools/fs.d.cts.map +1 -1
- package/dist/tools/fs.d.ts +1 -1
- package/dist/tools/fs.d.ts.map +1 -1
- package/dist/tools/fs.js +1 -1
- package/dist/tools/fs.js.map +1 -1
- package/dist/tools/json.d.cts +1 -1
- package/dist/tools/retriever.cjs +2 -2
- package/dist/tools/retriever.cjs.map +1 -1
- package/dist/tools/retriever.d.cts +2 -2
- package/dist/tools/retriever.d.cts.map +1 -1
- package/dist/tools/retriever.d.ts +1 -1
- package/dist/tools/retriever.d.ts.map +1 -1
- package/dist/tools/retriever.js +1 -1
- package/dist/tools/retriever.js.map +1 -1
- package/dist/tools/sql.cjs +1 -2
- package/dist/tools/sql.cjs.map +1 -1
- package/dist/tools/sql.d.cts +1 -1
- package/dist/tools/sql.d.cts.map +1 -1
- package/dist/tools/sql.d.ts +1 -1
- package/dist/tools/sql.d.ts.map +1 -1
- package/dist/tools/sql.js +1 -2
- package/dist/tools/sql.js.map +1 -1
- package/dist/tools/vectorstore.d.cts +1 -1
- package/dist/tools/webbrowser.d.cts +1 -1
- package/dist/types/expression-parser.d.cts +2 -0
- package/dist/types/expression-parser.d.cts.map +1 -1
- package/dist/types/expression-parser.d.ts +2 -0
- package/dist/types/expression-parser.d.ts.map +1 -1
- package/dist/util/hub.cjs +1 -1
- package/dist/util/hub.js +1 -1
- package/dist/util/openapi.cjs +1 -1
- package/dist/util/openapi.cjs.map +1 -1
- package/dist/util/openapi.js +1 -1
- package/dist/util/openapi.js.map +1 -1
- package/package.json +21 -16
- package/dist/chains/openai_functions/structured_output.cjs +0 -107
- package/dist/chains/openai_functions/structured_output.cjs.map +0 -1
- package/dist/chains/openai_functions/structured_output.d.cts +0 -38
- package/dist/chains/openai_functions/structured_output.d.cts.map +0 -1
- package/dist/chains/openai_functions/structured_output.d.ts +0 -38
- package/dist/chains/openai_functions/structured_output.d.ts.map +0 -1
- package/dist/chains/openai_functions/structured_output.js +0 -105
- package/dist/chains/openai_functions/structured_output.js.map +0 -1
- package/dist/chains/openai_moderation.cjs +0 -107
- package/dist/chains/openai_moderation.cjs.map +0 -1
- package/dist/chains/openai_moderation.d.cts +0 -74
- package/dist/chains/openai_moderation.d.cts.map +0 -1
- package/dist/chains/openai_moderation.d.ts +0 -74
- package/dist/chains/openai_moderation.d.ts.map +0 -1
- package/dist/chains/openai_moderation.js +0 -106
- package/dist/chains/openai_moderation.js.map +0 -1
|
@@ -23,9 +23,7 @@ declare function createExtractionChain(schema: FunctionParameters, llm: BaseChat
|
|
|
23
23
|
* @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.
|
|
24
24
|
* @returns A LLMChain instance configured to return data matching the schema.
|
|
25
25
|
*/
|
|
26
|
-
declare function createExtractionChainFromZod(
|
|
27
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
-
schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
|
|
26
|
+
declare function createExtractionChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
|
|
29
27
|
//#endregion
|
|
30
28
|
export { createExtractionChain, createExtractionChainFromZod };
|
|
31
29
|
//# sourceMappingURL=extraction.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extraction.d.cts","names":["BaseChatModel","BaseFunctionCallOptions","InteropZodObject","AIMessageChunk","FunctionParameters","LLMChain","createExtractionChain","createExtractionChainFromZod"],"sources":["../../../src/chains/openai_functions/extraction.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChainFromZod(
|
|
1
|
+
{"version":3,"file":"extraction.d.cts","names":["BaseChatModel","BaseFunctionCallOptions","InteropZodObject","AIMessageChunk","FunctionParameters","LLMChain","createExtractionChain","createExtractionChainFromZod"],"sources":["../../../src/chains/openai_functions/extraction.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n"],"mappings":";;;;;;;;;;;AAaA;;;;;AAAuJC,iBAA/HK,qBAAAA,CAA+HL,MAAAA,EAAjGG,kBAAiGH,EAAAA,GAAAA,EAAxED,aAAwEC,CAA1DA,uBAA0DA,CAAAA,CAAAA,EAA/BI,QAA+BJ,CAAAA,MAAAA,EAAdD,aAAcC,CAAAA,uBAAAA,EAAyBE,cAAzBF,CAAAA,CAAAA;;;;AAAvB;AAShI;;;;AAAoFD,iBAA5DO,4BAAAA,CAA4DP,MAAAA,EAAvBE,gBAAuBF,EAAAA,GAAAA,EAAAA,aAAAA,CAAcC,uBAAdD,CAAAA,CAAAA,EAAyCK,QAAzCL,CAAAA,MAAAA,EAA0DA,aAA1DA,CAAwEC,uBAAxED,EAAiGG,cAAjGH,CAAAA,CAAAA"}
|
|
@@ -23,9 +23,7 @@ declare function createExtractionChain(schema: FunctionParameters, llm: BaseChat
|
|
|
23
23
|
* @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.
|
|
24
24
|
* @returns A LLMChain instance configured to return data matching the schema.
|
|
25
25
|
*/
|
|
26
|
-
declare function createExtractionChainFromZod(
|
|
27
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
-
schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
|
|
26
|
+
declare function createExtractionChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
|
|
29
27
|
//#endregion
|
|
30
28
|
export { createExtractionChain, createExtractionChainFromZod };
|
|
31
29
|
//# sourceMappingURL=extraction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extraction.d.ts","names":["BaseChatModel","BaseFunctionCallOptions","InteropZodObject","AIMessageChunk","FunctionParameters","LLMChain","createExtractionChain","createExtractionChainFromZod"],"sources":["../../../src/chains/openai_functions/extraction.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChainFromZod(
|
|
1
|
+
{"version":3,"file":"extraction.d.ts","names":["BaseChatModel","BaseFunctionCallOptions","InteropZodObject","AIMessageChunk","FunctionParameters","LLMChain","createExtractionChain","createExtractionChainFromZod"],"sources":["../../../src/chains/openai_functions/extraction.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport declare function createExtractionChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n"],"mappings":";;;;;;;;;;;AAaA;;;;;AAAuJC,iBAA/HK,qBAAAA,CAA+HL,MAAAA,EAAjGG,kBAAiGH,EAAAA,GAAAA,EAAxED,aAAwEC,CAA1DA,uBAA0DA,CAAAA,CAAAA,EAA/BI,QAA+BJ,CAAAA,MAAAA,EAAdD,aAAcC,CAAAA,uBAAAA,EAAyBE,cAAzBF,CAAAA,CAAAA;;;;AAAvB;AAShI;;;;AAAoFD,iBAA5DO,4BAAAA,CAA4DP,MAAAA,EAAvBE,gBAAuBF,EAAAA,GAAAA,EAAAA,aAAAA,CAAcC,uBAAdD,CAAAA,CAAAA,EAAyCK,QAAzCL,CAAAA,MAAAA,EAA0DA,aAA1DA,CAAwEC,uBAAxED,EAAiGG,cAAjGH,CAAAA,CAAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extraction.js","names":["schema: FunctionParameters","llm: BaseChatModel<BaseFunctionCallOptions>","schema: InteropZodObject"],"sources":["../../../src/chains/openai_functions/extraction.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport {\n type JsonSchema7ObjectType,\n toJsonSchema,\n} from \"@langchain/core/utils/json_schema\";\nimport {\n FunctionParameters,\n JsonKeyOutputFunctionsParser,\n} from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n\n/**\n * Function that returns an array of extraction functions. These functions\n * are used to extract relevant information from a passage.\n * @param schema The schema of the function parameters.\n * @returns An array of extraction functions.\n */\nfunction getExtractionFunctions(schema: FunctionParameters) {\n return [\n {\n name: \"information_extraction\",\n description: \"Extracts the relevant information from the passage.\",\n parameters: {\n type: \"object\",\n properties: {\n info: {\n type: \"array\",\n items: {\n type: schema.type,\n properties: schema.properties,\n required: schema.required,\n },\n },\n },\n required: [\"info\"],\n },\n },\n ];\n}\n\nconst _EXTRACTION_TEMPLATE = `Extract and save the relevant entities mentioned in the following passage together with their properties.\n\nPassage:\n{input}\n`;\n\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport function createExtractionChain(\n schema: FunctionParameters,\n llm: BaseChatModel<BaseFunctionCallOptions>\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n const functions = getExtractionFunctions(schema);\n const prompt = PromptTemplate.fromTemplate(_EXTRACTION_TEMPLATE);\n const outputParser = new JsonKeyOutputFunctionsParser({ attrName: \"info\" });\n return new LLMChain({\n llm,\n prompt,\n llmKwargs: { functions },\n outputParser,\n tags: [\"openai_functions\", \"extraction\"],\n });\n}\n\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport function createExtractionChainFromZod(\n
|
|
1
|
+
{"version":3,"file":"extraction.js","names":["schema: FunctionParameters","llm: BaseChatModel<BaseFunctionCallOptions>","schema: InteropZodObject"],"sources":["../../../src/chains/openai_functions/extraction.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport type { AIMessageChunk } from \"@langchain/core/messages\";\nimport {\n type JsonSchema7ObjectType,\n toJsonSchema,\n} from \"@langchain/core/utils/json_schema\";\nimport {\n FunctionParameters,\n JsonKeyOutputFunctionsParser,\n} from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain } from \"../llm_chain.js\";\n\n/**\n * Function that returns an array of extraction functions. These functions\n * are used to extract relevant information from a passage.\n * @param schema The schema of the function parameters.\n * @returns An array of extraction functions.\n */\nfunction getExtractionFunctions(schema: FunctionParameters) {\n return [\n {\n name: \"information_extraction\",\n description: \"Extracts the relevant information from the passage.\",\n parameters: {\n type: \"object\",\n properties: {\n info: {\n type: \"array\",\n items: {\n type: schema.type,\n properties: schema.properties,\n required: schema.required,\n },\n },\n },\n required: [\"info\"],\n },\n },\n ];\n}\n\nconst _EXTRACTION_TEMPLATE = `Extract and save the relevant entities mentioned in the following passage together with their properties.\n\nPassage:\n{input}\n`;\n\n/**\n * Function that creates an extraction chain using the provided JSON schema.\n * It sets up the necessary components, such as the prompt, output parser, and tags.\n * @param schema JSON schema of the function parameters.\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport function createExtractionChain(\n schema: FunctionParameters,\n llm: BaseChatModel<BaseFunctionCallOptions>\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n const functions = getExtractionFunctions(schema);\n const prompt = PromptTemplate.fromTemplate(_EXTRACTION_TEMPLATE);\n const outputParser = new JsonKeyOutputFunctionsParser({ attrName: \"info\" });\n return new LLMChain({\n llm,\n prompt,\n llmKwargs: { functions },\n outputParser,\n tags: [\"openai_functions\", \"extraction\"],\n });\n}\n\n/**\n * Function that creates an extraction chain from a Zod schema. It\n * converts the Zod schema to a JSON schema using before creating\n * the extraction chain.\n * @param schema The Zod schema which extracted data should match\n * @param llm Must be a ChatOpenAI or AnthropicFunctions model that supports function calling.\n * @returns A LLMChain instance configured to return data matching the schema.\n */\nexport function createExtractionChainFromZod(\n schema: InteropZodObject,\n llm: BaseChatModel<BaseFunctionCallOptions>\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n return createExtractionChain(\n toJsonSchema(schema) as JsonSchema7ObjectType,\n llm\n );\n}\n"],"mappings":";;;;;;;;;;;;AAqBA,SAAS,uBAAuBA,QAA4B;AAC1D,QAAO,CACL;EACE,MAAM;EACN,aAAa;EACb,YAAY;GACV,MAAM;GACN,YAAY,EACV,MAAM;IACJ,MAAM;IACN,OAAO;KACL,MAAM,OAAO;KACb,YAAY,OAAO;KACnB,UAAU,OAAO;IAClB;GACF,EACF;GACD,UAAU,CAAC,MAAO;EACnB;CACF,CACF;AACF;AAED,MAAM,uBAAuB,CAAC;;;;AAI9B,CAAC;;;;;;;;AASD,SAAgB,sBACdA,QACAC,KAC0E;CAC1E,MAAM,YAAY,uBAAuB,OAAO;CAChD,MAAM,SAAS,eAAe,aAAa,qBAAqB;CAChE,MAAM,eAAe,IAAI,6BAA6B,EAAE,UAAU,OAAQ;AAC1E,QAAO,IAAI,SAAS;EAClB;EACA;EACA,WAAW,EAAE,UAAW;EACxB;EACA,MAAM,CAAC,oBAAoB,YAAa;CACzC;AACF;;;;;;;;;AAUD,SAAgB,6BACdC,QACAD,KAC0E;AAC1E,QAAO,sBACL,aAAa,OAAO,EACpB,IACD;AACF"}
|
|
@@ -2,7 +2,6 @@ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
|
2
2
|
const require_extraction = require('./extraction.cjs');
|
|
3
3
|
const require_tagging = require('./tagging.cjs');
|
|
4
4
|
const require_openapi = require('./openapi.cjs');
|
|
5
|
-
const require_structured_output = require('./structured_output.cjs');
|
|
6
5
|
const require_base = require('./base.cjs');
|
|
7
6
|
|
|
8
7
|
//#region src/chains/openai_functions/index.ts
|
|
@@ -12,8 +11,6 @@ require_rolldown_runtime.__export(openai_functions_exports, {
|
|
|
12
11
|
createExtractionChainFromZod: () => require_extraction.createExtractionChainFromZod,
|
|
13
12
|
createOpenAIFnRunnable: () => require_base.createOpenAIFnRunnable,
|
|
14
13
|
createOpenAPIChain: () => require_openapi.createOpenAPIChain,
|
|
15
|
-
createStructuredOutputChain: () => require_structured_output.createStructuredOutputChain,
|
|
16
|
-
createStructuredOutputChainFromZod: () => require_structured_output.createStructuredOutputChainFromZod,
|
|
17
14
|
createStructuredOutputRunnable: () => require_base.createStructuredOutputRunnable,
|
|
18
15
|
createTaggingChain: () => require_tagging.createTaggingChain,
|
|
19
16
|
createTaggingChainFromZod: () => require_tagging.createTaggingChainFromZod
|
|
@@ -24,8 +21,6 @@ exports.createExtractionChain = require_extraction.createExtractionChain;
|
|
|
24
21
|
exports.createExtractionChainFromZod = require_extraction.createExtractionChainFromZod;
|
|
25
22
|
exports.createOpenAIFnRunnable = require_base.createOpenAIFnRunnable;
|
|
26
23
|
exports.createOpenAPIChain = require_openapi.createOpenAPIChain;
|
|
27
|
-
exports.createStructuredOutputChain = require_structured_output.createStructuredOutputChain;
|
|
28
|
-
exports.createStructuredOutputChainFromZod = require_structured_output.createStructuredOutputChainFromZod;
|
|
29
24
|
exports.createStructuredOutputRunnable = require_base.createStructuredOutputRunnable;
|
|
30
25
|
exports.createTaggingChain = require_tagging.createTaggingChain;
|
|
31
26
|
exports.createTaggingChainFromZod = require_tagging.createTaggingChainFromZod;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/chains/openai_functions/index.ts"],"sourcesContent":["export {\n createExtractionChain,\n createExtractionChainFromZod,\n} from \"./extraction.js\";\nexport {\n type TaggingChainOptions,\n createTaggingChain,\n createTaggingChainFromZod,\n} from \"./tagging.js\";\nexport { type OpenAPIChainOptions, createOpenAPIChain } from \"./openapi.js\";\nexport {\n type
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/chains/openai_functions/index.ts"],"sourcesContent":["export {\n createExtractionChain,\n createExtractionChainFromZod,\n} from \"./extraction.js\";\nexport {\n type TaggingChainOptions,\n createTaggingChain,\n createTaggingChainFromZod,\n} from \"./tagging.js\";\nexport { type OpenAPIChainOptions, createOpenAPIChain } from \"./openapi.js\";\nexport {\n type CreateStructuredOutputRunnableConfig,\n createStructuredOutputRunnable,\n type CreateOpenAIFnRunnableConfig,\n createOpenAIFnRunnable,\n} from \"./base.js\";\n"],"mappings":""}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { createExtractionChain, createExtractionChainFromZod } from "./extraction.cjs";
|
|
2
2
|
import { TaggingChainOptions, createTaggingChain, createTaggingChainFromZod } from "./tagging.cjs";
|
|
3
3
|
import { OpenAPIChainOptions, createOpenAPIChain } from "./openapi.cjs";
|
|
4
|
-
import { StructuredOutputChainInput, createStructuredOutputChain, createStructuredOutputChainFromZod } from "./structured_output.cjs";
|
|
5
4
|
import { CreateOpenAIFnRunnableConfig, CreateStructuredOutputRunnableConfig, createOpenAIFnRunnable, createStructuredOutputRunnable } from "./base.cjs";
|
|
6
|
-
export { type CreateOpenAIFnRunnableConfig, type CreateStructuredOutputRunnableConfig, type OpenAPIChainOptions, type
|
|
5
|
+
export { type CreateOpenAIFnRunnableConfig, type CreateStructuredOutputRunnableConfig, type OpenAPIChainOptions, type TaggingChainOptions, createExtractionChain, createExtractionChainFromZod, createOpenAIFnRunnable, createOpenAPIChain, createStructuredOutputRunnable, createTaggingChain, createTaggingChainFromZod };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { createExtractionChain, createExtractionChainFromZod } from "./extraction.js";
|
|
2
2
|
import { TaggingChainOptions, createTaggingChain, createTaggingChainFromZod } from "./tagging.js";
|
|
3
3
|
import { OpenAPIChainOptions, createOpenAPIChain } from "./openapi.js";
|
|
4
|
-
import { StructuredOutputChainInput, createStructuredOutputChain, createStructuredOutputChainFromZod } from "./structured_output.js";
|
|
5
4
|
import { CreateOpenAIFnRunnableConfig, CreateStructuredOutputRunnableConfig, createOpenAIFnRunnable, createStructuredOutputRunnable } from "./base.js";
|
|
6
|
-
export { type CreateOpenAIFnRunnableConfig, type CreateStructuredOutputRunnableConfig, type OpenAPIChainOptions, type
|
|
5
|
+
export { type CreateOpenAIFnRunnableConfig, type CreateStructuredOutputRunnableConfig, type OpenAPIChainOptions, type TaggingChainOptions, createExtractionChain, createExtractionChainFromZod, createOpenAIFnRunnable, createOpenAPIChain, createStructuredOutputRunnable, createTaggingChain, createTaggingChainFromZod };
|
|
@@ -2,7 +2,6 @@ import { __export } from "../../_virtual/rolldown_runtime.js";
|
|
|
2
2
|
import { createExtractionChain, createExtractionChainFromZod } from "./extraction.js";
|
|
3
3
|
import { createTaggingChain, createTaggingChainFromZod } from "./tagging.js";
|
|
4
4
|
import { createOpenAPIChain } from "./openapi.js";
|
|
5
|
-
import { createStructuredOutputChain, createStructuredOutputChainFromZod } from "./structured_output.js";
|
|
6
5
|
import { createOpenAIFnRunnable, createStructuredOutputRunnable } from "./base.js";
|
|
7
6
|
|
|
8
7
|
//#region src/chains/openai_functions/index.ts
|
|
@@ -12,13 +11,11 @@ __export(openai_functions_exports, {
|
|
|
12
11
|
createExtractionChainFromZod: () => createExtractionChainFromZod,
|
|
13
12
|
createOpenAIFnRunnable: () => createOpenAIFnRunnable,
|
|
14
13
|
createOpenAPIChain: () => createOpenAPIChain,
|
|
15
|
-
createStructuredOutputChain: () => createStructuredOutputChain,
|
|
16
|
-
createStructuredOutputChainFromZod: () => createStructuredOutputChainFromZod,
|
|
17
14
|
createStructuredOutputRunnable: () => createStructuredOutputRunnable,
|
|
18
15
|
createTaggingChain: () => createTaggingChain,
|
|
19
16
|
createTaggingChainFromZod: () => createTaggingChainFromZod
|
|
20
17
|
});
|
|
21
18
|
|
|
22
19
|
//#endregion
|
|
23
|
-
export { createExtractionChain, createExtractionChainFromZod, createOpenAIFnRunnable, createOpenAPIChain,
|
|
20
|
+
export { createExtractionChain, createExtractionChainFromZod, createOpenAIFnRunnable, createOpenAPIChain, createStructuredOutputRunnable, createTaggingChain, createTaggingChainFromZod, openai_functions_exports };
|
|
24
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/chains/openai_functions/index.ts"],"sourcesContent":["export {\n createExtractionChain,\n createExtractionChainFromZod,\n} from \"./extraction.js\";\nexport {\n type TaggingChainOptions,\n createTaggingChain,\n createTaggingChainFromZod,\n} from \"./tagging.js\";\nexport { type OpenAPIChainOptions, createOpenAPIChain } from \"./openapi.js\";\nexport {\n type
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/chains/openai_functions/index.ts"],"sourcesContent":["export {\n createExtractionChain,\n createExtractionChainFromZod,\n} from \"./extraction.js\";\nexport {\n type TaggingChainOptions,\n createTaggingChain,\n createTaggingChainFromZod,\n} from \"./tagging.js\";\nexport { type OpenAPIChainOptions, createOpenAPIChain } from \"./openapi.js\";\nexport {\n type CreateStructuredOutputRunnableConfig,\n createStructuredOutputRunnable,\n type CreateOpenAIFnRunnableConfig,\n createOpenAIFnRunnable,\n} from \"./base.js\";\n"],"mappings":""}
|
|
@@ -5,7 +5,6 @@ const require_sequential_chain = require('../sequential_chain.cjs');
|
|
|
5
5
|
const require_openai_functions = require('../../output_parsers/openai_functions.cjs');
|
|
6
6
|
const require_openapi = require('../../util/openapi.cjs');
|
|
7
7
|
const __langchain_core_prompts = require_rolldown_runtime.__toESM(require("@langchain/core/prompts"));
|
|
8
|
-
const __langchain_openai = require_rolldown_runtime.__toESM(require("@langchain/openai"));
|
|
9
8
|
|
|
10
9
|
//#region src/chains/openai_functions/openapi.ts
|
|
11
10
|
/**
|
|
@@ -250,17 +249,18 @@ async function createOpenAPIChain(spec, options = {}) {
|
|
|
250
249
|
let convertedSpec;
|
|
251
250
|
if (typeof spec === "string") try {
|
|
252
251
|
convertedSpec = await require_openapi.OpenAPISpec.fromURL(spec);
|
|
253
|
-
} catch
|
|
252
|
+
} catch {
|
|
254
253
|
try {
|
|
255
254
|
convertedSpec = require_openapi.OpenAPISpec.fromString(spec);
|
|
256
|
-
} catch
|
|
255
|
+
} catch {
|
|
257
256
|
throw new Error(`Unable to parse spec from source ${spec}.`);
|
|
258
257
|
}
|
|
259
258
|
}
|
|
260
259
|
else convertedSpec = require_openapi.OpenAPISpec.fromObject(spec);
|
|
261
260
|
const { openAIFunctions, defaultExecutionMethod } = convertOpenAPISpecToOpenAIFunctions(convertedSpec);
|
|
262
261
|
if (defaultExecutionMethod === void 0) throw new Error(`Could not parse any valid operations from the provided spec.`);
|
|
263
|
-
|
|
262
|
+
if (!options.llm) throw new Error("`llm` option is required");
|
|
263
|
+
const { llm = options.llm, prompt = __langchain_core_prompts.ChatPromptTemplate.fromMessages([__langchain_core_prompts.HumanMessagePromptTemplate.fromTemplate("Use the provided API's to respond to this user query:\n\n{query}")]), requestChain = new SimpleRequestChain({ requestMethod: async (name, args) => defaultExecutionMethod(name, args, {
|
|
264
264
|
headers: options.headers,
|
|
265
265
|
params: options.params
|
|
266
266
|
}) }), llmChainInputs = {}, verbose,...rest } = options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.cjs","names":["url: string","pathParams: Record<string, string>","newParams: Record<string, string>","params: OpenAPIV3_1.ParameterObject[]","spec: OpenAPISpec","jsonSchema: JsonSchema7ObjectType","schema: OpenAPIV3_1.SchemaObject","nameToCallMap: Record<string, { method: string; url: string }>","operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>","paramLocationToRequestArgNameMap: Record<string, string>","requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n }","requestBodySchemas: Record<string, JsonSchema7ObjectType>","openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function","OpenAPISpec","name: string","requestArgs: Record<string, any>","options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }","filteredArgs: Record<string, any>","headers: Record<string, string>","BaseChain","config: { requestMethod: SimpleRequestChainExecutionMethod }","values: ChainValues","_runManager?: CallbackManagerForChainRun","spec: OpenAPIV3_1.Document | string","options: OpenAPIChainOptions","e","ChatOpenAI","ChatPromptTemplate","HumanMessagePromptTemplate","LLMChain","JsonOutputFunctionsParser","SequentialChain"],"sources":["../../../src/chains/openai_functions/openapi.ts"],"sourcesContent":["import type { OpenAIClient } from \"@langchain/openai\";\nimport {\n type JsonSchema7ObjectType,\n type JsonSchema7ArrayType,\n type JsonSchema7Type,\n} from \"@langchain/core/utils/json_schema\";\nimport type { OpenAPIV3_1 } from \"openapi-types\";\n\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { ChatOpenAI } from \"@langchain/openai\";\nimport { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport {\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n BasePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { OpenAPISpec } from \"../../util/openapi.js\";\nimport { BaseChain } from \"../base.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\nimport { SequentialChain } from \"../sequential_chain.js\";\nimport { JsonOutputFunctionsParser } from \"../../output_parsers/openai_functions.js\";\n\n/**\n * Type representing a function for executing OpenAPI requests.\n */\ntype OpenAPIExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n) => Promise<string>;\n\n/**\n * Formats a URL by replacing path parameters with their corresponding\n * values.\n * @param url The URL to format.\n * @param pathParams The path parameters to replace in the URL.\n * @returns The formatted URL.\n */\nfunction formatURL(url: string, pathParams: Record<string, string>): string {\n const expectedPathParamNames = [...url.matchAll(/{(.*?)}/g)].map(\n (match) => match[1]\n );\n const newParams: Record<string, string> = {};\n for (const paramName of expectedPathParamNames) {\n const cleanParamName = paramName.replace(/^\\.;/, \"\").replace(/\\*$/, \"\");\n const value = pathParams[cleanParamName];\n let formattedValue;\n if (Array.isArray(value)) {\n if (paramName.startsWith(\".\")) {\n const separator = paramName.endsWith(\"*\") ? \".\" : \",\";\n formattedValue = `.${value.join(separator)}`;\n } else if (paramName.startsWith(\",\")) {\n const separator = paramName.endsWith(\"*\") ? `${cleanParamName}=` : \",\";\n formattedValue = `${cleanParamName}=${value.join(separator)}`;\n } else {\n formattedValue = value.join(\",\");\n }\n } else if (typeof value === \"object\") {\n const kvSeparator = paramName.endsWith(\"*\") ? \"=\" : \",\";\n const kvStrings = Object.entries(value).map(\n ([k, v]) => k + kvSeparator + v\n );\n let entrySeparator;\n if (paramName.startsWith(\".\")) {\n entrySeparator = \".\";\n formattedValue = \".\";\n } else if (paramName.startsWith(\";\")) {\n entrySeparator = \";\";\n formattedValue = \";\";\n } else {\n entrySeparator = \",\";\n formattedValue = \"\";\n }\n formattedValue += kvStrings.join(entrySeparator);\n } else {\n if (paramName.startsWith(\".\")) {\n formattedValue = `.${value}`;\n } else if (paramName.startsWith(\";\")) {\n formattedValue = `;${cleanParamName}=${value}`;\n } else {\n formattedValue = value;\n }\n }\n newParams[paramName] = formattedValue;\n }\n let formattedUrl = url;\n for (const [key, newValue] of Object.entries(newParams)) {\n formattedUrl = formattedUrl.replace(`{${key}}`, newValue);\n }\n return formattedUrl;\n}\n\n/**\n * Converts OpenAPI parameters to JSON schema format.\n * @param params The OpenAPI parameters to convert.\n * @param spec The OpenAPI specification that contains the parameters.\n * @returns The JSON schema representation of the OpenAPI parameters.\n */\nfunction convertOpenAPIParamsToJSONSchema(\n params: OpenAPIV3_1.ParameterObject[],\n spec: OpenAPISpec\n) {\n return params.reduce(\n (jsonSchema: JsonSchema7ObjectType, param) => {\n let schema;\n if (param.schema) {\n schema = spec.getSchema(param.schema);\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else if (param.content) {\n const mediaTypeSchema = Object.values(param.content)[0].schema;\n if (mediaTypeSchema) {\n schema = spec.getSchema(mediaTypeSchema);\n }\n if (!schema) {\n return jsonSchema;\n }\n if (schema.description === undefined) {\n schema.description = param.description ?? \"\";\n }\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else {\n return jsonSchema;\n }\n if (param.required && Array.isArray(jsonSchema.required)) {\n jsonSchema.required.push(param.name);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n}\n\n// OpenAI throws errors on extraneous schema properties, e.g. if \"required\" is set on individual ones\n/**\n * Converts OpenAPI schemas to JSON schema format.\n * @param schema The OpenAPI schema to convert.\n * @param spec The OpenAPI specification that contains the schema.\n * @returns The JSON schema representation of the OpenAPI schema.\n */\nexport function convertOpenAPISchemaToJSONSchema(\n schema: OpenAPIV3_1.SchemaObject,\n spec: OpenAPISpec\n): JsonSchema7Type {\n if (schema.type === \"object\") {\n return Object.keys(schema.properties ?? {}).reduce(\n (jsonSchema: JsonSchema7ObjectType, propertyName) => {\n if (!schema.properties) {\n return jsonSchema;\n }\n const openAPIProperty = spec.getSchema(schema.properties[propertyName]);\n if (openAPIProperty.type === undefined) {\n return jsonSchema;\n }\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[propertyName] = convertOpenAPISchemaToJSONSchema(\n openAPIProperty,\n spec\n );\n if (\n (openAPIProperty.required ||\n schema.required?.includes(propertyName)) &&\n jsonSchema.required !== undefined\n ) {\n jsonSchema.required.push(propertyName);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n }\n if (schema.type === \"array\") {\n return {\n type: \"array\",\n items: convertOpenAPISchemaToJSONSchema(schema.items ?? {}, spec),\n minItems: schema.minItems,\n maxItems: schema.maxItems,\n } as JsonSchema7ArrayType;\n }\n return {\n type: schema.type ?? \"string\",\n } as JsonSchema7Type;\n}\n\n/**\n * Converts an OpenAPI specification to OpenAI functions.\n * @param spec The OpenAPI specification to convert.\n * @returns An object containing the OpenAI functions derived from the OpenAPI specification and a default execution method.\n */\nexport function convertOpenAPISpecToOpenAIFunctions(spec: OpenAPISpec): {\n openAIFunctions: OpenAIClient.Chat.ChatCompletionCreateParams.Function[];\n defaultExecutionMethod?: OpenAPIExecutionMethod;\n} {\n if (!spec.document.paths) {\n return { openAIFunctions: [] };\n }\n const openAIFunctions = [];\n const nameToCallMap: Record<string, { method: string; url: string }> = {};\n for (const path of Object.keys(spec.document.paths)) {\n const pathParameters = spec.getParametersForPath(path);\n for (const method of spec.getMethodsForPath(path)) {\n const operation = spec.getOperation(path, method);\n if (!operation) {\n return { openAIFunctions: [] };\n }\n const operationParametersByLocation = pathParameters\n .concat(spec.getParametersForOperation(operation))\n .reduce(\n (\n operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>,\n param\n ) => {\n if (!operationParams[param.in]) {\n // eslint-disable-next-line no-param-reassign\n operationParams[param.in] = [];\n }\n operationParams[param.in].push(param);\n return operationParams;\n },\n {}\n );\n const paramLocationToRequestArgNameMap: Record<string, string> = {\n query: \"params\",\n header: \"headers\",\n cookie: \"cookies\",\n path: \"path_params\",\n };\n const requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n } = {};\n for (const paramLocation of Object.keys(\n paramLocationToRequestArgNameMap\n )) {\n if (operationParametersByLocation[paramLocation]) {\n requestArgsSchema[paramLocationToRequestArgNameMap[paramLocation]] =\n convertOpenAPIParamsToJSONSchema(\n operationParametersByLocation[paramLocation],\n spec\n );\n }\n }\n const requestBody = spec.getRequestBodyForOperation(operation);\n if (requestBody?.content !== undefined) {\n const requestBodySchemas: Record<string, JsonSchema7ObjectType> = {};\n for (const [mediaType, mediaTypeObject] of Object.entries(\n requestBody.content\n )) {\n if (mediaTypeObject.schema !== undefined) {\n const schema = spec.getSchema(mediaTypeObject.schema);\n requestBodySchemas[mediaType] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n ) as JsonSchema7ObjectType;\n }\n }\n const mediaTypes = Object.keys(requestBodySchemas);\n if (mediaTypes.length === 1) {\n requestArgsSchema.data = requestBodySchemas[mediaTypes[0]];\n } else if (mediaTypes.length > 1) {\n requestArgsSchema.data = {\n anyOf: Object.values(requestBodySchemas),\n };\n }\n }\n const openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function =\n {\n name: OpenAPISpec.getCleanedOperationId(operation, path, method),\n description: operation.description ?? operation.summary ?? \"\",\n parameters: {\n type: \"object\",\n properties: requestArgsSchema,\n // All remaining top-level parameters are required\n required: Object.keys(requestArgsSchema),\n },\n };\n\n openAIFunctions.push(openAIFunction);\n const baseUrl = (spec.baseUrl ?? \"\").endsWith(\"/\")\n ? (spec.baseUrl ?? \"\").slice(0, -1)\n : spec.baseUrl ?? \"\";\n nameToCallMap[openAIFunction.name] = {\n method,\n url: baseUrl + path,\n };\n }\n }\n return {\n openAIFunctions,\n defaultExecutionMethod: async (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n ) => {\n const {\n headers: customHeaders,\n params: customParams,\n ...rest\n } = options ?? {};\n const { method, url } = nameToCallMap[name];\n const requestParams = requestArgs.params ?? {};\n const nonEmptyParams = Object.keys(requestParams).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (filteredArgs: Record<string, any>, argName) => {\n if (\n requestParams[argName] !== \"\" &&\n requestParams[argName] !== null &&\n requestParams[argName] !== undefined\n ) {\n // eslint-disable-next-line no-param-reassign\n filteredArgs[argName] = requestParams[argName];\n }\n return filteredArgs;\n },\n {}\n );\n const queryString = new URLSearchParams({\n ...nonEmptyParams,\n ...customParams,\n }).toString();\n const pathParams = requestArgs.path_params;\n const formattedUrl =\n formatURL(url, pathParams) +\n (queryString.length ? `?${queryString}` : \"\");\n const headers: Record<string, string> = {};\n let body;\n if (requestArgs.data !== undefined) {\n let contentType = \"text/plain\";\n if (typeof requestArgs.data !== \"string\") {\n if (typeof requestArgs.data === \"object\") {\n contentType = \"application/json\";\n }\n body = JSON.stringify(requestArgs.data);\n } else {\n body = requestArgs.data;\n }\n headers[\"content-type\"] = contentType;\n }\n const response = await fetch(formattedUrl, {\n ...requestArgs,\n method,\n headers: {\n ...headers,\n ...requestArgs.headers,\n ...customHeaders,\n },\n body,\n ...rest,\n });\n let output;\n if (response.status < 200 || response.status > 299) {\n output = `${response.status}: ${\n response.statusText\n } for ${name} called with ${JSON.stringify(queryString)}`;\n } else {\n output = await response.text();\n }\n return output;\n },\n };\n}\n\n/**\n * Type representing a function for executing simple requests.\n */\ntype SimpleRequestChainExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>\n) => Promise<string>;\n\n/**\n * A chain for making simple API requests.\n */\nclass SimpleRequestChain extends BaseChain {\n static lc_name() {\n return \"SimpleRequestChain\";\n }\n\n private requestMethod: SimpleRequestChainExecutionMethod;\n\n inputKey = \"function\";\n\n outputKey = \"response\";\n\n constructor(config: { requestMethod: SimpleRequestChainExecutionMethod }) {\n super();\n this.requestMethod = config.requestMethod;\n }\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n _chainType() {\n return \"simple_request_chain\" as const;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n _runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const inputKeyValue = values[this.inputKey];\n const methodName = inputKeyValue.name;\n const args = inputKeyValue.arguments;\n const response = await this.requestMethod(methodName, args);\n return { [this.outputKey]: response };\n }\n}\n\n/**\n * Type representing the options for creating an OpenAPI chain.\n */\nexport type OpenAPIChainOptions = {\n llm?: BaseChatModel<BaseFunctionCallOptions>;\n prompt?: BasePromptTemplate;\n requestChain?: BaseChain;\n llmChainInputs?: LLMChainInput;\n headers?: Record<string, string>;\n params?: Record<string, string>;\n verbose?: boolean;\n};\n\n/**\n * Create a chain for querying an API from a OpenAPI spec.\n * @param spec OpenAPISpec or url/file/text string corresponding to one.\n * @param options Custom options passed into the chain\n * @returns OpenAPIChain\n */\nexport async function createOpenAPIChain(\n spec: OpenAPIV3_1.Document | string,\n options: OpenAPIChainOptions = {}\n) {\n let convertedSpec;\n if (typeof spec === \"string\") {\n try {\n convertedSpec = await OpenAPISpec.fromURL(spec);\n } catch (e) {\n try {\n convertedSpec = OpenAPISpec.fromString(spec);\n } catch (e) {\n throw new Error(`Unable to parse spec from source ${spec}.`);\n }\n }\n } else {\n convertedSpec = OpenAPISpec.fromObject(spec);\n }\n const { openAIFunctions, defaultExecutionMethod } =\n convertOpenAPISpecToOpenAIFunctions(convertedSpec);\n if (defaultExecutionMethod === undefined) {\n throw new Error(\n `Could not parse any valid operations from the provided spec.`\n );\n }\n const {\n llm = new ChatOpenAI({ model: \"gpt-3.5-turbo-0613\" }),\n prompt = ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(\n \"Use the provided API's to respond to this user query:\\n\\n{query}\"\n ),\n ]),\n requestChain = new SimpleRequestChain({\n requestMethod: async (name, args) =>\n defaultExecutionMethod(name, args, {\n headers: options.headers,\n params: options.params,\n }),\n }),\n llmChainInputs = {},\n verbose,\n ...rest\n } = options;\n const formatChain = new LLMChain({\n llm,\n prompt,\n outputParser: new JsonOutputFunctionsParser({ argsOnly: false }),\n outputKey: \"function\",\n llmKwargs: { functions: openAIFunctions },\n ...llmChainInputs,\n });\n return new SequentialChain({\n chains: [formatChain, requestChain],\n outputVariables: [\"response\"],\n inputVariables: formatChain.inputKeys,\n verbose,\n ...rest,\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openapi.cjs","names":["url: string","pathParams: Record<string, string>","newParams: Record<string, string>","params: OpenAPIV3_1.ParameterObject[]","spec: OpenAPISpec","jsonSchema: JsonSchema7ObjectType","schema: OpenAPIV3_1.SchemaObject","nameToCallMap: Record<string, { method: string; url: string }>","operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>","paramLocationToRequestArgNameMap: Record<string, string>","requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n }","requestBodySchemas: Record<string, JsonSchema7ObjectType>","openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function","OpenAPISpec","name: string","requestArgs: Record<string, any>","options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }","filteredArgs: Record<string, any>","headers: Record<string, string>","BaseChain","config: { requestMethod: SimpleRequestChainExecutionMethod }","values: ChainValues","_runManager?: CallbackManagerForChainRun","spec: OpenAPIV3_1.Document | string","options: OpenAPIChainOptions","ChatPromptTemplate","HumanMessagePromptTemplate","LLMChain","JsonOutputFunctionsParser","SequentialChain"],"sources":["../../../src/chains/openai_functions/openapi.ts"],"sourcesContent":["import type { OpenAIClient } from \"@langchain/openai\";\nimport {\n type JsonSchema7ObjectType,\n type JsonSchema7ArrayType,\n type JsonSchema7Type,\n} from \"@langchain/core/utils/json_schema\";\nimport type { OpenAPIV3_1 } from \"openapi-types\";\n\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport {\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n BasePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { OpenAPISpec } from \"../../util/openapi.js\";\nimport { BaseChain } from \"../base.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\nimport { SequentialChain } from \"../sequential_chain.js\";\nimport { JsonOutputFunctionsParser } from \"../../output_parsers/openai_functions.js\";\n\n/**\n * Type representing a function for executing OpenAPI requests.\n */\ntype OpenAPIExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n) => Promise<string>;\n\n/**\n * Formats a URL by replacing path parameters with their corresponding\n * values.\n * @param url The URL to format.\n * @param pathParams The path parameters to replace in the URL.\n * @returns The formatted URL.\n */\nfunction formatURL(url: string, pathParams: Record<string, string>): string {\n const expectedPathParamNames = [...url.matchAll(/{(.*?)}/g)].map(\n (match) => match[1]\n );\n const newParams: Record<string, string> = {};\n for (const paramName of expectedPathParamNames) {\n const cleanParamName = paramName.replace(/^\\.;/, \"\").replace(/\\*$/, \"\");\n const value = pathParams[cleanParamName];\n let formattedValue;\n if (Array.isArray(value)) {\n if (paramName.startsWith(\".\")) {\n const separator = paramName.endsWith(\"*\") ? \".\" : \",\";\n formattedValue = `.${value.join(separator)}`;\n } else if (paramName.startsWith(\",\")) {\n const separator = paramName.endsWith(\"*\") ? `${cleanParamName}=` : \",\";\n formattedValue = `${cleanParamName}=${value.join(separator)}`;\n } else {\n formattedValue = value.join(\",\");\n }\n } else if (typeof value === \"object\") {\n const kvSeparator = paramName.endsWith(\"*\") ? \"=\" : \",\";\n const kvStrings = Object.entries(value).map(\n ([k, v]) => k + kvSeparator + v\n );\n let entrySeparator;\n if (paramName.startsWith(\".\")) {\n entrySeparator = \".\";\n formattedValue = \".\";\n } else if (paramName.startsWith(\";\")) {\n entrySeparator = \";\";\n formattedValue = \";\";\n } else {\n entrySeparator = \",\";\n formattedValue = \"\";\n }\n formattedValue += kvStrings.join(entrySeparator);\n } else {\n if (paramName.startsWith(\".\")) {\n formattedValue = `.${value}`;\n } else if (paramName.startsWith(\";\")) {\n formattedValue = `;${cleanParamName}=${value}`;\n } else {\n formattedValue = value;\n }\n }\n newParams[paramName] = formattedValue;\n }\n let formattedUrl = url;\n for (const [key, newValue] of Object.entries(newParams)) {\n formattedUrl = formattedUrl.replace(`{${key}}`, newValue);\n }\n return formattedUrl;\n}\n\n/**\n * Converts OpenAPI parameters to JSON schema format.\n * @param params The OpenAPI parameters to convert.\n * @param spec The OpenAPI specification that contains the parameters.\n * @returns The JSON schema representation of the OpenAPI parameters.\n */\nfunction convertOpenAPIParamsToJSONSchema(\n params: OpenAPIV3_1.ParameterObject[],\n spec: OpenAPISpec\n) {\n return params.reduce(\n (jsonSchema: JsonSchema7ObjectType, param) => {\n let schema;\n if (param.schema) {\n schema = spec.getSchema(param.schema);\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else if (param.content) {\n const mediaTypeSchema = Object.values(param.content)[0].schema;\n if (mediaTypeSchema) {\n schema = spec.getSchema(mediaTypeSchema);\n }\n if (!schema) {\n return jsonSchema;\n }\n if (schema.description === undefined) {\n schema.description = param.description ?? \"\";\n }\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else {\n return jsonSchema;\n }\n if (param.required && Array.isArray(jsonSchema.required)) {\n jsonSchema.required.push(param.name);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n}\n\n// OpenAI throws errors on extraneous schema properties, e.g. if \"required\" is set on individual ones\n/**\n * Converts OpenAPI schemas to JSON schema format.\n * @param schema The OpenAPI schema to convert.\n * @param spec The OpenAPI specification that contains the schema.\n * @returns The JSON schema representation of the OpenAPI schema.\n */\nexport function convertOpenAPISchemaToJSONSchema(\n schema: OpenAPIV3_1.SchemaObject,\n spec: OpenAPISpec\n): JsonSchema7Type {\n if (schema.type === \"object\") {\n return Object.keys(schema.properties ?? {}).reduce(\n (jsonSchema: JsonSchema7ObjectType, propertyName) => {\n if (!schema.properties) {\n return jsonSchema;\n }\n const openAPIProperty = spec.getSchema(schema.properties[propertyName]);\n if (openAPIProperty.type === undefined) {\n return jsonSchema;\n }\n jsonSchema.properties[propertyName] = convertOpenAPISchemaToJSONSchema(\n openAPIProperty,\n spec\n );\n if (\n (openAPIProperty.required ||\n schema.required?.includes(propertyName)) &&\n jsonSchema.required !== undefined\n ) {\n jsonSchema.required.push(propertyName);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n }\n if (schema.type === \"array\") {\n return {\n type: \"array\",\n items: convertOpenAPISchemaToJSONSchema(schema.items ?? {}, spec),\n minItems: schema.minItems,\n maxItems: schema.maxItems,\n } as JsonSchema7ArrayType;\n }\n return {\n type: schema.type ?? \"string\",\n } as JsonSchema7Type;\n}\n\n/**\n * Converts an OpenAPI specification to OpenAI functions.\n * @param spec The OpenAPI specification to convert.\n * @returns An object containing the OpenAI functions derived from the OpenAPI specification and a default execution method.\n */\nexport function convertOpenAPISpecToOpenAIFunctions(spec: OpenAPISpec): {\n openAIFunctions: OpenAIClient.Chat.ChatCompletionCreateParams.Function[];\n defaultExecutionMethod?: OpenAPIExecutionMethod;\n} {\n if (!spec.document.paths) {\n return { openAIFunctions: [] };\n }\n const openAIFunctions = [];\n const nameToCallMap: Record<string, { method: string; url: string }> = {};\n for (const path of Object.keys(spec.document.paths)) {\n const pathParameters = spec.getParametersForPath(path);\n for (const method of spec.getMethodsForPath(path)) {\n const operation = spec.getOperation(path, method);\n if (!operation) {\n return { openAIFunctions: [] };\n }\n const operationParametersByLocation = pathParameters\n .concat(spec.getParametersForOperation(operation))\n .reduce(\n (\n operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>,\n param\n ) => {\n if (!operationParams[param.in]) {\n operationParams[param.in] = [];\n }\n operationParams[param.in].push(param);\n return operationParams;\n },\n {}\n );\n const paramLocationToRequestArgNameMap: Record<string, string> = {\n query: \"params\",\n header: \"headers\",\n cookie: \"cookies\",\n path: \"path_params\",\n };\n const requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n } = {};\n for (const paramLocation of Object.keys(\n paramLocationToRequestArgNameMap\n )) {\n if (operationParametersByLocation[paramLocation]) {\n requestArgsSchema[paramLocationToRequestArgNameMap[paramLocation]] =\n convertOpenAPIParamsToJSONSchema(\n operationParametersByLocation[paramLocation],\n spec\n );\n }\n }\n const requestBody = spec.getRequestBodyForOperation(operation);\n if (requestBody?.content !== undefined) {\n const requestBodySchemas: Record<string, JsonSchema7ObjectType> = {};\n for (const [mediaType, mediaTypeObject] of Object.entries(\n requestBody.content\n )) {\n if (mediaTypeObject.schema !== undefined) {\n const schema = spec.getSchema(mediaTypeObject.schema);\n requestBodySchemas[mediaType] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n ) as JsonSchema7ObjectType;\n }\n }\n const mediaTypes = Object.keys(requestBodySchemas);\n if (mediaTypes.length === 1) {\n requestArgsSchema.data = requestBodySchemas[mediaTypes[0]];\n } else if (mediaTypes.length > 1) {\n requestArgsSchema.data = {\n anyOf: Object.values(requestBodySchemas),\n };\n }\n }\n const openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function =\n {\n name: OpenAPISpec.getCleanedOperationId(operation, path, method),\n description: operation.description ?? operation.summary ?? \"\",\n parameters: {\n type: \"object\",\n properties: requestArgsSchema,\n // All remaining top-level parameters are required\n required: Object.keys(requestArgsSchema),\n },\n };\n\n openAIFunctions.push(openAIFunction);\n const baseUrl = (spec.baseUrl ?? \"\").endsWith(\"/\")\n ? (spec.baseUrl ?? \"\").slice(0, -1)\n : spec.baseUrl ?? \"\";\n nameToCallMap[openAIFunction.name] = {\n method,\n url: baseUrl + path,\n };\n }\n }\n return {\n openAIFunctions,\n defaultExecutionMethod: async (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n ) => {\n const {\n headers: customHeaders,\n params: customParams,\n ...rest\n } = options ?? {};\n const { method, url } = nameToCallMap[name];\n const requestParams = requestArgs.params ?? {};\n const nonEmptyParams = Object.keys(requestParams).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (filteredArgs: Record<string, any>, argName) => {\n if (\n requestParams[argName] !== \"\" &&\n requestParams[argName] !== null &&\n requestParams[argName] !== undefined\n ) {\n filteredArgs[argName] = requestParams[argName];\n }\n return filteredArgs;\n },\n {}\n );\n const queryString = new URLSearchParams({\n ...nonEmptyParams,\n ...customParams,\n }).toString();\n const pathParams = requestArgs.path_params;\n const formattedUrl =\n formatURL(url, pathParams) +\n (queryString.length ? `?${queryString}` : \"\");\n const headers: Record<string, string> = {};\n let body;\n if (requestArgs.data !== undefined) {\n let contentType = \"text/plain\";\n if (typeof requestArgs.data !== \"string\") {\n if (typeof requestArgs.data === \"object\") {\n contentType = \"application/json\";\n }\n body = JSON.stringify(requestArgs.data);\n } else {\n body = requestArgs.data;\n }\n headers[\"content-type\"] = contentType;\n }\n const response = await fetch(formattedUrl, {\n ...requestArgs,\n method,\n headers: {\n ...headers,\n ...requestArgs.headers,\n ...customHeaders,\n },\n body,\n ...rest,\n });\n let output;\n if (response.status < 200 || response.status > 299) {\n output = `${response.status}: ${\n response.statusText\n } for ${name} called with ${JSON.stringify(queryString)}`;\n } else {\n output = await response.text();\n }\n return output;\n },\n };\n}\n\n/**\n * Type representing a function for executing simple requests.\n */\ntype SimpleRequestChainExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>\n) => Promise<string>;\n\n/**\n * A chain for making simple API requests.\n */\nclass SimpleRequestChain extends BaseChain {\n static lc_name() {\n return \"SimpleRequestChain\";\n }\n\n private requestMethod: SimpleRequestChainExecutionMethod;\n\n inputKey = \"function\";\n\n outputKey = \"response\";\n\n constructor(config: { requestMethod: SimpleRequestChainExecutionMethod }) {\n super();\n this.requestMethod = config.requestMethod;\n }\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n _chainType() {\n return \"simple_request_chain\" as const;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n _runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const inputKeyValue = values[this.inputKey];\n const methodName = inputKeyValue.name;\n const args = inputKeyValue.arguments;\n const response = await this.requestMethod(methodName, args);\n return { [this.outputKey]: response };\n }\n}\n\n/**\n * Type representing the options for creating an OpenAPI chain.\n */\nexport type OpenAPIChainOptions = {\n llm?: BaseChatModel<BaseFunctionCallOptions>;\n prompt?: BasePromptTemplate;\n requestChain?: BaseChain;\n llmChainInputs?: LLMChainInput;\n headers?: Record<string, string>;\n params?: Record<string, string>;\n verbose?: boolean;\n};\n\n/**\n * Create a chain for querying an API from a OpenAPI spec.\n * @param spec OpenAPISpec or url/file/text string corresponding to one.\n * @param options Custom options passed into the chain\n * @returns OpenAPIChain\n */\nexport async function createOpenAPIChain(\n spec: OpenAPIV3_1.Document | string,\n options: OpenAPIChainOptions = {}\n) {\n let convertedSpec;\n if (typeof spec === \"string\") {\n try {\n convertedSpec = await OpenAPISpec.fromURL(spec);\n } catch {\n try {\n convertedSpec = OpenAPISpec.fromString(spec);\n } catch {\n throw new Error(`Unable to parse spec from source ${spec}.`);\n }\n }\n } else {\n convertedSpec = OpenAPISpec.fromObject(spec);\n }\n const { openAIFunctions, defaultExecutionMethod } =\n convertOpenAPISpecToOpenAIFunctions(convertedSpec);\n if (defaultExecutionMethod === undefined) {\n throw new Error(\n `Could not parse any valid operations from the provided spec.`\n );\n }\n\n if (!options.llm) {\n throw new Error(\"`llm` option is required\");\n }\n\n const {\n llm = options.llm,\n prompt = ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(\n \"Use the provided API's to respond to this user query:\\n\\n{query}\"\n ),\n ]),\n requestChain = new SimpleRequestChain({\n requestMethod: async (name, args) =>\n defaultExecutionMethod(name, args, {\n headers: options.headers,\n params: options.params,\n }),\n }),\n llmChainInputs = {},\n verbose,\n ...rest\n } = options;\n const formatChain = new LLMChain({\n llm,\n prompt,\n outputParser: new JsonOutputFunctionsParser({ argsOnly: false }),\n outputKey: \"function\",\n llmKwargs: { functions: openAIFunctions },\n ...llmChainInputs,\n });\n return new SequentialChain({\n chains: [formatChain, requestChain],\n outputVariables: [\"response\"],\n inputVariables: formatChain.inputKeys,\n verbose,\n ...rest,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA2CA,SAAS,UAAUA,KAAaC,YAA4C;CAC1E,MAAM,yBAAyB,CAAC,GAAG,IAAI,SAAS,WAAW,AAAC,EAAC,IAC3D,CAAC,UAAU,MAAM,GAClB;CACD,MAAMC,YAAoC,CAAE;AAC5C,MAAK,MAAM,aAAa,wBAAwB;EAC9C,MAAM,iBAAiB,UAAU,QAAQ,QAAQ,GAAG,CAAC,QAAQ,OAAO,GAAG;EACvE,MAAM,QAAQ,WAAW;EACzB,IAAI;AACJ,MAAI,MAAM,QAAQ,MAAM,CACtB,KAAI,UAAU,WAAW,IAAI,EAAE;GAC7B,MAAM,YAAY,UAAU,SAAS,IAAI,GAAG,MAAM;GAClD,iBAAiB,CAAC,CAAC,EAAE,MAAM,KAAK,UAAU,EAAE;EAC7C,WAAU,UAAU,WAAW,IAAI,EAAE;GACpC,MAAM,YAAY,UAAU,SAAS,IAAI,GAAG,GAAG,eAAe,CAAC,CAAC,GAAG;GACnE,iBAAiB,GAAG,eAAe,CAAC,EAAE,MAAM,KAAK,UAAU,EAAE;EAC9D,OACC,iBAAiB,MAAM,KAAK,IAAI;WAEzB,OAAO,UAAU,UAAU;GACpC,MAAM,cAAc,UAAU,SAAS,IAAI,GAAG,MAAM;GACpD,MAAM,YAAY,OAAO,QAAQ,MAAM,CAAC,IACtC,CAAC,CAAC,GAAG,EAAE,KAAK,IAAI,cAAc,EAC/B;GACD,IAAI;AACJ,OAAI,UAAU,WAAW,IAAI,EAAE;IAC7B,iBAAiB;IACjB,iBAAiB;GAClB,WAAU,UAAU,WAAW,IAAI,EAAE;IACpC,iBAAiB;IACjB,iBAAiB;GAClB,OAAM;IACL,iBAAiB;IACjB,iBAAiB;GAClB;GACD,kBAAkB,UAAU,KAAK,eAAe;EACjD,WACK,UAAU,WAAW,IAAI,EAC3B,iBAAiB,CAAC,CAAC,EAAE,OAAO;WACnB,UAAU,WAAW,IAAI,EAClC,iBAAiB,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,OAAO;OAE9C,iBAAiB;EAGrB,UAAU,aAAa;CACxB;CACD,IAAI,eAAe;AACnB,MAAK,MAAM,CAAC,KAAK,SAAS,IAAI,OAAO,QAAQ,UAAU,EACrD,eAAe,aAAa,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAE3D,QAAO;AACR;;;;;;;AAQD,SAAS,iCACPC,QACAC,MACA;AACA,QAAO,OAAO,OACZ,CAACC,YAAmC,UAAU;EAC5C,IAAI;AACJ,MAAI,MAAM,QAAQ;GAChB,SAAS,KAAK,UAAU,MAAM,OAAO;GACrC,WAAW,WAAW,MAAM,QAAQ,iCAClC,QACA,KACD;EACF,WAAU,MAAM,SAAS;GACxB,MAAM,kBAAkB,OAAO,OAAO,MAAM,QAAQ,CAAC,GAAG;AACxD,OAAI,iBACF,SAAS,KAAK,UAAU,gBAAgB;AAE1C,OAAI,CAAC,OACH,QAAO;AAET,OAAI,OAAO,gBAAgB,QACzB,OAAO,cAAc,MAAM,eAAe;GAE5C,WAAW,WAAW,MAAM,QAAQ,iCAClC,QACA,KACD;EACF,MACC,QAAO;AAET,MAAI,MAAM,YAAY,MAAM,QAAQ,WAAW,SAAS,EACtD,WAAW,SAAS,KAAK,MAAM,KAAK;AAEtC,SAAO;CACR,GACD;EACE,MAAM;EACN,YAAY,CAAE;EACd,UAAU,CAAE;EACZ,sBAAsB,CAAE;CACzB,EACF;AACF;;;;;;;AASD,SAAgB,iCACdC,QACAF,MACiB;AACjB,KAAI,OAAO,SAAS,SAClB,QAAO,OAAO,KAAK,OAAO,cAAc,CAAE,EAAC,CAAC,OAC1C,CAACC,YAAmC,iBAAiB;AACnD,MAAI,CAAC,OAAO,WACV,QAAO;EAET,MAAM,kBAAkB,KAAK,UAAU,OAAO,WAAW,cAAc;AACvE,MAAI,gBAAgB,SAAS,OAC3B,QAAO;EAET,WAAW,WAAW,gBAAgB,iCACpC,iBACA,KACD;AACD,OACG,gBAAgB,YACf,OAAO,UAAU,SAAS,aAAa,KACzC,WAAW,aAAa,QAExB,WAAW,SAAS,KAAK,aAAa;AAExC,SAAO;CACR,GACD;EACE,MAAM;EACN,YAAY,CAAE;EACd,UAAU,CAAE;EACZ,sBAAsB,CAAE;CACzB,EACF;AAEH,KAAI,OAAO,SAAS,QAClB,QAAO;EACL,MAAM;EACN,OAAO,iCAAiC,OAAO,SAAS,CAAE,GAAE,KAAK;EACjE,UAAU,OAAO;EACjB,UAAU,OAAO;CAClB;AAEH,QAAO,EACL,MAAM,OAAO,QAAQ,SACtB;AACF;;;;;;AAOD,SAAgB,oCAAoCD,MAGlD;AACA,KAAI,CAAC,KAAK,SAAS,MACjB,QAAO,EAAE,iBAAiB,CAAE,EAAE;CAEhC,MAAM,kBAAkB,CAAE;CAC1B,MAAMG,gBAAiE,CAAE;AACzE,MAAK,MAAM,QAAQ,OAAO,KAAK,KAAK,SAAS,MAAM,EAAE;EACnD,MAAM,iBAAiB,KAAK,qBAAqB,KAAK;AACtD,OAAK,MAAM,UAAU,KAAK,kBAAkB,KAAK,EAAE;GACjD,MAAM,YAAY,KAAK,aAAa,MAAM,OAAO;AACjD,OAAI,CAAC,UACH,QAAO,EAAE,iBAAiB,CAAE,EAAE;GAEhC,MAAM,gCAAgC,eACnC,OAAO,KAAK,0BAA0B,UAAU,CAAC,CACjD,OACC,CACEC,iBACA,UACG;AACH,QAAI,CAAC,gBAAgB,MAAM,KACzB,gBAAgB,MAAM,MAAM,CAAE;IAEhC,gBAAgB,MAAM,IAAI,KAAK,MAAM;AACrC,WAAO;GACR,GACD,CAAE,EACH;GACH,MAAMC,mCAA2D;IAC/D,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;GACP;GACD,MAAMC,oBAMF,CAAE;AACN,QAAK,MAAM,iBAAiB,OAAO,KACjC,iCACD,CACC,KAAI,8BAA8B,gBAChC,kBAAkB,iCAAiC,kBACjD,iCACE,8BAA8B,gBAC9B,KACD;GAGP,MAAM,cAAc,KAAK,2BAA2B,UAAU;AAC9D,OAAI,aAAa,YAAY,QAAW;IACtC,MAAMC,qBAA4D,CAAE;AACpE,SAAK,MAAM,CAAC,WAAW,gBAAgB,IAAI,OAAO,QAChD,YAAY,QACb,CACC,KAAI,gBAAgB,WAAW,QAAW;KACxC,MAAM,SAAS,KAAK,UAAU,gBAAgB,OAAO;KACrD,mBAAmB,aAAa,iCAC9B,QACA,KACD;IACF;IAEH,MAAM,aAAa,OAAO,KAAK,mBAAmB;AAClD,QAAI,WAAW,WAAW,GACxB,kBAAkB,OAAO,mBAAmB,WAAW;aAC9C,WAAW,SAAS,GAC7B,kBAAkB,OAAO,EACvB,OAAO,OAAO,OAAO,mBAAmB,CACzC;GAEJ;GACD,MAAMC,iBACJ;IACE,MAAMC,4BAAY,sBAAsB,WAAW,MAAM,OAAO;IAChE,aAAa,UAAU,eAAe,UAAU,WAAW;IAC3D,YAAY;KACV,MAAM;KACN,YAAY;KAEZ,UAAU,OAAO,KAAK,kBAAkB;IACzC;GACF;GAEH,gBAAgB,KAAK,eAAe;GACpC,MAAM,WAAW,KAAK,WAAW,IAAI,SAAS,IAAI,IAC7C,KAAK,WAAW,IAAI,MAAM,GAAG,GAAG,GACjC,KAAK,WAAW;GACpB,cAAc,eAAe,QAAQ;IACnC;IACA,KAAK,UAAU;GAChB;EACF;CACF;AACD,QAAO;EACL;EACA,wBAAwB,OACtBC,MAEAC,aACAC,YAIG;GACH,MAAM,EACJ,SAAS,eACT,QAAQ,aACR,GAAG,MACJ,GAAG,WAAW,CAAE;GACjB,MAAM,EAAE,QAAQ,KAAK,GAAG,cAAc;GACtC,MAAM,gBAAgB,YAAY,UAAU,CAAE;GAC9C,MAAM,iBAAiB,OAAO,KAAK,cAAc,CAAC,OAEhD,CAACC,cAAmC,YAAY;AAC9C,QACE,cAAc,aAAa,MAC3B,cAAc,aAAa,QAC3B,cAAc,aAAa,QAE3B,aAAa,WAAW,cAAc;AAExC,WAAO;GACR,GACD,CAAE,EACH;GACD,MAAM,cAAc,IAAI,gBAAgB;IACtC,GAAG;IACH,GAAG;GACJ,GAAE,UAAU;GACb,MAAM,aAAa,YAAY;GAC/B,MAAM,eACJ,UAAU,KAAK,WAAW,IACzB,YAAY,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG;GAC5C,MAAMC,UAAkC,CAAE;GAC1C,IAAI;AACJ,OAAI,YAAY,SAAS,QAAW;IAClC,IAAI,cAAc;AAClB,QAAI,OAAO,YAAY,SAAS,UAAU;AACxC,SAAI,OAAO,YAAY,SAAS,UAC9B,cAAc;KAEhB,OAAO,KAAK,UAAU,YAAY,KAAK;IACxC,OACC,OAAO,YAAY;IAErB,QAAQ,kBAAkB;GAC3B;GACD,MAAM,WAAW,MAAM,MAAM,cAAc;IACzC,GAAG;IACH;IACA,SAAS;KACP,GAAG;KACH,GAAG,YAAY;KACf,GAAG;IACJ;IACD;IACA,GAAG;GACJ,EAAC;GACF,IAAI;AACJ,OAAI,SAAS,SAAS,OAAO,SAAS,SAAS,KAC7C,SAAS,GAAG,SAAS,OAAO,EAAE,EAC5B,SAAS,WACV,KAAK,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,YAAY,EAAE;QAEzD,SAAS,MAAM,SAAS,MAAM;AAEhC,UAAO;EACR;CACF;AACF;;;;AAcD,IAAM,qBAAN,cAAiCC,uBAAU;CACzC,OAAO,UAAU;AACf,SAAO;CACR;CAED,AAAQ;CAER,WAAW;CAEX,YAAY;CAEZ,YAAYC,QAA8D;EACxE,OAAO;EACP,KAAK,gBAAgB,OAAO;CAC7B;CAED,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,QAAS;CACvB;CAED,IAAI,aAAa;AACf,SAAO,CAAC,KAAK,SAAU;CACxB;CAED,aAAa;AACX,SAAO;CACR;;CAGD,MAAM,MACJC,QACAC,aACsB;EACtB,MAAM,gBAAgB,OAAO,KAAK;EAClC,MAAM,aAAa,cAAc;EACjC,MAAM,OAAO,cAAc;EAC3B,MAAM,WAAW,MAAM,KAAK,cAAc,YAAY,KAAK;AAC3D,SAAO,GAAG,KAAK,YAAY,SAAU;CACtC;AACF;;;;;;;AAqBD,eAAsB,mBACpBC,MACAC,UAA+B,CAAE,GACjC;CACA,IAAI;AACJ,KAAI,OAAO,SAAS,SAClB,KAAI;EACF,gBAAgB,MAAMX,4BAAY,QAAQ,KAAK;CAChD,QAAO;AACN,MAAI;GACF,gBAAgBA,4BAAY,WAAW,KAAK;EAC7C,QAAO;AACN,SAAM,IAAI,MAAM,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;EAC5D;CACF;MAED,gBAAgBA,4BAAY,WAAW,KAAK;CAE9C,MAAM,EAAE,iBAAiB,wBAAwB,GAC/C,oCAAoC,cAAc;AACpD,KAAI,2BAA2B,OAC7B,OAAM,IAAI,MACR,CAAC,4DAA4D,CAAC;AAIlE,KAAI,CAAC,QAAQ,IACX,OAAM,IAAI,MAAM;CAGlB,MAAM,EACJ,MAAM,QAAQ,KACd,SAASY,4CAAmB,aAAa,CACvCC,oDAA2B,aACzB,mEACD,AACF,EAAC,EACF,eAAe,IAAI,mBAAmB,EACpC,eAAe,OAAO,MAAM,SAC1B,uBAAuB,MAAM,MAAM;EACjC,SAAS,QAAQ;EACjB,QAAQ,QAAQ;CACjB,EAAC,CACL,IACD,iBAAiB,CAAE,GACnB,QACA,GAAG,MACJ,GAAG;CACJ,MAAM,cAAc,IAAIC,2BAAS;EAC/B;EACA;EACA,cAAc,IAAIC,mDAA0B,EAAE,UAAU,MAAO;EAC/D,WAAW;EACX,WAAW,EAAE,WAAW,gBAAiB;EACzC,GAAG;CACJ;AACD,QAAO,IAAIC,yCAAgB;EACzB,QAAQ,CAAC,aAAa,YAAa;EACnC,iBAAiB,CAAC,UAAW;EAC7B,gBAAgB,YAAY;EAC5B;EACA,GAAG;CACJ;AACF"}
|
|
@@ -3,10 +3,10 @@ import { LLMChainInput } from "../llm_chain.cjs";
|
|
|
3
3
|
import { SequentialChain } from "../sequential_chain.cjs";
|
|
4
4
|
import { OpenAPISpec } from "../../util/openapi.cjs";
|
|
5
5
|
import { BaseFunctionCallOptions } from "@langchain/core/language_models/base";
|
|
6
|
-
import { BasePromptTemplate } from "@langchain/core/prompts";
|
|
7
|
-
import { OpenAIClient } from "@langchain/openai";
|
|
8
6
|
import { BaseChatModel } from "@langchain/core/language_models/chat_models";
|
|
7
|
+
import { BasePromptTemplate } from "@langchain/core/prompts";
|
|
9
8
|
import { JsonSchema7Type } from "@langchain/core/utils/json_schema";
|
|
9
|
+
import { OpenAIClient } from "@langchain/openai";
|
|
10
10
|
import { OpenAPIV3_1 } from "openapi-types";
|
|
11
11
|
|
|
12
12
|
//#region src/chains/openai_functions/openapi.d.ts
|
|
@@ -4,7 +4,6 @@ import { SequentialChain } from "../sequential_chain.js";
|
|
|
4
4
|
import { JsonOutputFunctionsParser } from "../../output_parsers/openai_functions.js";
|
|
5
5
|
import { OpenAPISpec } from "../../util/openapi.js";
|
|
6
6
|
import { ChatPromptTemplate, HumanMessagePromptTemplate } from "@langchain/core/prompts";
|
|
7
|
-
import { ChatOpenAI } from "@langchain/openai";
|
|
8
7
|
|
|
9
8
|
//#region src/chains/openai_functions/openapi.ts
|
|
10
9
|
/**
|
|
@@ -249,17 +248,18 @@ async function createOpenAPIChain(spec, options = {}) {
|
|
|
249
248
|
let convertedSpec;
|
|
250
249
|
if (typeof spec === "string") try {
|
|
251
250
|
convertedSpec = await OpenAPISpec.fromURL(spec);
|
|
252
|
-
} catch
|
|
251
|
+
} catch {
|
|
253
252
|
try {
|
|
254
253
|
convertedSpec = OpenAPISpec.fromString(spec);
|
|
255
|
-
} catch
|
|
254
|
+
} catch {
|
|
256
255
|
throw new Error(`Unable to parse spec from source ${spec}.`);
|
|
257
256
|
}
|
|
258
257
|
}
|
|
259
258
|
else convertedSpec = OpenAPISpec.fromObject(spec);
|
|
260
259
|
const { openAIFunctions, defaultExecutionMethod } = convertOpenAPISpecToOpenAIFunctions(convertedSpec);
|
|
261
260
|
if (defaultExecutionMethod === void 0) throw new Error(`Could not parse any valid operations from the provided spec.`);
|
|
262
|
-
|
|
261
|
+
if (!options.llm) throw new Error("`llm` option is required");
|
|
262
|
+
const { llm = options.llm, prompt = ChatPromptTemplate.fromMessages([HumanMessagePromptTemplate.fromTemplate("Use the provided API's to respond to this user query:\n\n{query}")]), requestChain = new SimpleRequestChain({ requestMethod: async (name, args) => defaultExecutionMethod(name, args, {
|
|
263
263
|
headers: options.headers,
|
|
264
264
|
params: options.params
|
|
265
265
|
}) }), llmChainInputs = {}, verbose,...rest } = options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","names":["url: string","pathParams: Record<string, string>","newParams: Record<string, string>","params: OpenAPIV3_1.ParameterObject[]","spec: OpenAPISpec","jsonSchema: JsonSchema7ObjectType","schema: OpenAPIV3_1.SchemaObject","nameToCallMap: Record<string, { method: string; url: string }>","operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>","paramLocationToRequestArgNameMap: Record<string, string>","requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n }","requestBodySchemas: Record<string, JsonSchema7ObjectType>","openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function","name: string","requestArgs: Record<string, any>","options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }","filteredArgs: Record<string, any>","headers: Record<string, string>","config: { requestMethod: SimpleRequestChainExecutionMethod }","values: ChainValues","_runManager?: CallbackManagerForChainRun","spec: OpenAPIV3_1.Document | string","options: OpenAPIChainOptions","e"],"sources":["../../../src/chains/openai_functions/openapi.ts"],"sourcesContent":["import type { OpenAIClient } from \"@langchain/openai\";\nimport {\n type JsonSchema7ObjectType,\n type JsonSchema7ArrayType,\n type JsonSchema7Type,\n} from \"@langchain/core/utils/json_schema\";\nimport type { OpenAPIV3_1 } from \"openapi-types\";\n\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { ChatOpenAI } from \"@langchain/openai\";\nimport { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport {\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n BasePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { OpenAPISpec } from \"../../util/openapi.js\";\nimport { BaseChain } from \"../base.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\nimport { SequentialChain } from \"../sequential_chain.js\";\nimport { JsonOutputFunctionsParser } from \"../../output_parsers/openai_functions.js\";\n\n/**\n * Type representing a function for executing OpenAPI requests.\n */\ntype OpenAPIExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n) => Promise<string>;\n\n/**\n * Formats a URL by replacing path parameters with their corresponding\n * values.\n * @param url The URL to format.\n * @param pathParams The path parameters to replace in the URL.\n * @returns The formatted URL.\n */\nfunction formatURL(url: string, pathParams: Record<string, string>): string {\n const expectedPathParamNames = [...url.matchAll(/{(.*?)}/g)].map(\n (match) => match[1]\n );\n const newParams: Record<string, string> = {};\n for (const paramName of expectedPathParamNames) {\n const cleanParamName = paramName.replace(/^\\.;/, \"\").replace(/\\*$/, \"\");\n const value = pathParams[cleanParamName];\n let formattedValue;\n if (Array.isArray(value)) {\n if (paramName.startsWith(\".\")) {\n const separator = paramName.endsWith(\"*\") ? \".\" : \",\";\n formattedValue = `.${value.join(separator)}`;\n } else if (paramName.startsWith(\",\")) {\n const separator = paramName.endsWith(\"*\") ? `${cleanParamName}=` : \",\";\n formattedValue = `${cleanParamName}=${value.join(separator)}`;\n } else {\n formattedValue = value.join(\",\");\n }\n } else if (typeof value === \"object\") {\n const kvSeparator = paramName.endsWith(\"*\") ? \"=\" : \",\";\n const kvStrings = Object.entries(value).map(\n ([k, v]) => k + kvSeparator + v\n );\n let entrySeparator;\n if (paramName.startsWith(\".\")) {\n entrySeparator = \".\";\n formattedValue = \".\";\n } else if (paramName.startsWith(\";\")) {\n entrySeparator = \";\";\n formattedValue = \";\";\n } else {\n entrySeparator = \",\";\n formattedValue = \"\";\n }\n formattedValue += kvStrings.join(entrySeparator);\n } else {\n if (paramName.startsWith(\".\")) {\n formattedValue = `.${value}`;\n } else if (paramName.startsWith(\";\")) {\n formattedValue = `;${cleanParamName}=${value}`;\n } else {\n formattedValue = value;\n }\n }\n newParams[paramName] = formattedValue;\n }\n let formattedUrl = url;\n for (const [key, newValue] of Object.entries(newParams)) {\n formattedUrl = formattedUrl.replace(`{${key}}`, newValue);\n }\n return formattedUrl;\n}\n\n/**\n * Converts OpenAPI parameters to JSON schema format.\n * @param params The OpenAPI parameters to convert.\n * @param spec The OpenAPI specification that contains the parameters.\n * @returns The JSON schema representation of the OpenAPI parameters.\n */\nfunction convertOpenAPIParamsToJSONSchema(\n params: OpenAPIV3_1.ParameterObject[],\n spec: OpenAPISpec\n) {\n return params.reduce(\n (jsonSchema: JsonSchema7ObjectType, param) => {\n let schema;\n if (param.schema) {\n schema = spec.getSchema(param.schema);\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else if (param.content) {\n const mediaTypeSchema = Object.values(param.content)[0].schema;\n if (mediaTypeSchema) {\n schema = spec.getSchema(mediaTypeSchema);\n }\n if (!schema) {\n return jsonSchema;\n }\n if (schema.description === undefined) {\n schema.description = param.description ?? \"\";\n }\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else {\n return jsonSchema;\n }\n if (param.required && Array.isArray(jsonSchema.required)) {\n jsonSchema.required.push(param.name);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n}\n\n// OpenAI throws errors on extraneous schema properties, e.g. if \"required\" is set on individual ones\n/**\n * Converts OpenAPI schemas to JSON schema format.\n * @param schema The OpenAPI schema to convert.\n * @param spec The OpenAPI specification that contains the schema.\n * @returns The JSON schema representation of the OpenAPI schema.\n */\nexport function convertOpenAPISchemaToJSONSchema(\n schema: OpenAPIV3_1.SchemaObject,\n spec: OpenAPISpec\n): JsonSchema7Type {\n if (schema.type === \"object\") {\n return Object.keys(schema.properties ?? {}).reduce(\n (jsonSchema: JsonSchema7ObjectType, propertyName) => {\n if (!schema.properties) {\n return jsonSchema;\n }\n const openAPIProperty = spec.getSchema(schema.properties[propertyName]);\n if (openAPIProperty.type === undefined) {\n return jsonSchema;\n }\n // eslint-disable-next-line no-param-reassign\n jsonSchema.properties[propertyName] = convertOpenAPISchemaToJSONSchema(\n openAPIProperty,\n spec\n );\n if (\n (openAPIProperty.required ||\n schema.required?.includes(propertyName)) &&\n jsonSchema.required !== undefined\n ) {\n jsonSchema.required.push(propertyName);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n }\n if (schema.type === \"array\") {\n return {\n type: \"array\",\n items: convertOpenAPISchemaToJSONSchema(schema.items ?? {}, spec),\n minItems: schema.minItems,\n maxItems: schema.maxItems,\n } as JsonSchema7ArrayType;\n }\n return {\n type: schema.type ?? \"string\",\n } as JsonSchema7Type;\n}\n\n/**\n * Converts an OpenAPI specification to OpenAI functions.\n * @param spec The OpenAPI specification to convert.\n * @returns An object containing the OpenAI functions derived from the OpenAPI specification and a default execution method.\n */\nexport function convertOpenAPISpecToOpenAIFunctions(spec: OpenAPISpec): {\n openAIFunctions: OpenAIClient.Chat.ChatCompletionCreateParams.Function[];\n defaultExecutionMethod?: OpenAPIExecutionMethod;\n} {\n if (!spec.document.paths) {\n return { openAIFunctions: [] };\n }\n const openAIFunctions = [];\n const nameToCallMap: Record<string, { method: string; url: string }> = {};\n for (const path of Object.keys(spec.document.paths)) {\n const pathParameters = spec.getParametersForPath(path);\n for (const method of spec.getMethodsForPath(path)) {\n const operation = spec.getOperation(path, method);\n if (!operation) {\n return { openAIFunctions: [] };\n }\n const operationParametersByLocation = pathParameters\n .concat(spec.getParametersForOperation(operation))\n .reduce(\n (\n operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>,\n param\n ) => {\n if (!operationParams[param.in]) {\n // eslint-disable-next-line no-param-reassign\n operationParams[param.in] = [];\n }\n operationParams[param.in].push(param);\n return operationParams;\n },\n {}\n );\n const paramLocationToRequestArgNameMap: Record<string, string> = {\n query: \"params\",\n header: \"headers\",\n cookie: \"cookies\",\n path: \"path_params\",\n };\n const requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n } = {};\n for (const paramLocation of Object.keys(\n paramLocationToRequestArgNameMap\n )) {\n if (operationParametersByLocation[paramLocation]) {\n requestArgsSchema[paramLocationToRequestArgNameMap[paramLocation]] =\n convertOpenAPIParamsToJSONSchema(\n operationParametersByLocation[paramLocation],\n spec\n );\n }\n }\n const requestBody = spec.getRequestBodyForOperation(operation);\n if (requestBody?.content !== undefined) {\n const requestBodySchemas: Record<string, JsonSchema7ObjectType> = {};\n for (const [mediaType, mediaTypeObject] of Object.entries(\n requestBody.content\n )) {\n if (mediaTypeObject.schema !== undefined) {\n const schema = spec.getSchema(mediaTypeObject.schema);\n requestBodySchemas[mediaType] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n ) as JsonSchema7ObjectType;\n }\n }\n const mediaTypes = Object.keys(requestBodySchemas);\n if (mediaTypes.length === 1) {\n requestArgsSchema.data = requestBodySchemas[mediaTypes[0]];\n } else if (mediaTypes.length > 1) {\n requestArgsSchema.data = {\n anyOf: Object.values(requestBodySchemas),\n };\n }\n }\n const openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function =\n {\n name: OpenAPISpec.getCleanedOperationId(operation, path, method),\n description: operation.description ?? operation.summary ?? \"\",\n parameters: {\n type: \"object\",\n properties: requestArgsSchema,\n // All remaining top-level parameters are required\n required: Object.keys(requestArgsSchema),\n },\n };\n\n openAIFunctions.push(openAIFunction);\n const baseUrl = (spec.baseUrl ?? \"\").endsWith(\"/\")\n ? (spec.baseUrl ?? \"\").slice(0, -1)\n : spec.baseUrl ?? \"\";\n nameToCallMap[openAIFunction.name] = {\n method,\n url: baseUrl + path,\n };\n }\n }\n return {\n openAIFunctions,\n defaultExecutionMethod: async (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n ) => {\n const {\n headers: customHeaders,\n params: customParams,\n ...rest\n } = options ?? {};\n const { method, url } = nameToCallMap[name];\n const requestParams = requestArgs.params ?? {};\n const nonEmptyParams = Object.keys(requestParams).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (filteredArgs: Record<string, any>, argName) => {\n if (\n requestParams[argName] !== \"\" &&\n requestParams[argName] !== null &&\n requestParams[argName] !== undefined\n ) {\n // eslint-disable-next-line no-param-reassign\n filteredArgs[argName] = requestParams[argName];\n }\n return filteredArgs;\n },\n {}\n );\n const queryString = new URLSearchParams({\n ...nonEmptyParams,\n ...customParams,\n }).toString();\n const pathParams = requestArgs.path_params;\n const formattedUrl =\n formatURL(url, pathParams) +\n (queryString.length ? `?${queryString}` : \"\");\n const headers: Record<string, string> = {};\n let body;\n if (requestArgs.data !== undefined) {\n let contentType = \"text/plain\";\n if (typeof requestArgs.data !== \"string\") {\n if (typeof requestArgs.data === \"object\") {\n contentType = \"application/json\";\n }\n body = JSON.stringify(requestArgs.data);\n } else {\n body = requestArgs.data;\n }\n headers[\"content-type\"] = contentType;\n }\n const response = await fetch(formattedUrl, {\n ...requestArgs,\n method,\n headers: {\n ...headers,\n ...requestArgs.headers,\n ...customHeaders,\n },\n body,\n ...rest,\n });\n let output;\n if (response.status < 200 || response.status > 299) {\n output = `${response.status}: ${\n response.statusText\n } for ${name} called with ${JSON.stringify(queryString)}`;\n } else {\n output = await response.text();\n }\n return output;\n },\n };\n}\n\n/**\n * Type representing a function for executing simple requests.\n */\ntype SimpleRequestChainExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>\n) => Promise<string>;\n\n/**\n * A chain for making simple API requests.\n */\nclass SimpleRequestChain extends BaseChain {\n static lc_name() {\n return \"SimpleRequestChain\";\n }\n\n private requestMethod: SimpleRequestChainExecutionMethod;\n\n inputKey = \"function\";\n\n outputKey = \"response\";\n\n constructor(config: { requestMethod: SimpleRequestChainExecutionMethod }) {\n super();\n this.requestMethod = config.requestMethod;\n }\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n _chainType() {\n return \"simple_request_chain\" as const;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n _runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const inputKeyValue = values[this.inputKey];\n const methodName = inputKeyValue.name;\n const args = inputKeyValue.arguments;\n const response = await this.requestMethod(methodName, args);\n return { [this.outputKey]: response };\n }\n}\n\n/**\n * Type representing the options for creating an OpenAPI chain.\n */\nexport type OpenAPIChainOptions = {\n llm?: BaseChatModel<BaseFunctionCallOptions>;\n prompt?: BasePromptTemplate;\n requestChain?: BaseChain;\n llmChainInputs?: LLMChainInput;\n headers?: Record<string, string>;\n params?: Record<string, string>;\n verbose?: boolean;\n};\n\n/**\n * Create a chain for querying an API from a OpenAPI spec.\n * @param spec OpenAPISpec or url/file/text string corresponding to one.\n * @param options Custom options passed into the chain\n * @returns OpenAPIChain\n */\nexport async function createOpenAPIChain(\n spec: OpenAPIV3_1.Document | string,\n options: OpenAPIChainOptions = {}\n) {\n let convertedSpec;\n if (typeof spec === \"string\") {\n try {\n convertedSpec = await OpenAPISpec.fromURL(spec);\n } catch (e) {\n try {\n convertedSpec = OpenAPISpec.fromString(spec);\n } catch (e) {\n throw new Error(`Unable to parse spec from source ${spec}.`);\n }\n }\n } else {\n convertedSpec = OpenAPISpec.fromObject(spec);\n }\n const { openAIFunctions, defaultExecutionMethod } =\n convertOpenAPISpecToOpenAIFunctions(convertedSpec);\n if (defaultExecutionMethod === undefined) {\n throw new Error(\n `Could not parse any valid operations from the provided spec.`\n );\n }\n const {\n llm = new ChatOpenAI({ model: \"gpt-3.5-turbo-0613\" }),\n prompt = ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(\n \"Use the provided API's to respond to this user query:\\n\\n{query}\"\n ),\n ]),\n requestChain = new SimpleRequestChain({\n requestMethod: async (name, args) =>\n defaultExecutionMethod(name, args, {\n headers: options.headers,\n params: options.params,\n }),\n }),\n llmChainInputs = {},\n verbose,\n ...rest\n } = options;\n const formatChain = new LLMChain({\n llm,\n prompt,\n outputParser: new JsonOutputFunctionsParser({ argsOnly: false }),\n outputKey: \"function\",\n llmKwargs: { functions: openAIFunctions },\n ...llmChainInputs,\n });\n return new SequentialChain({\n chains: [formatChain, requestChain],\n outputVariables: [\"response\"],\n inputVariables: formatChain.inputKeys,\n verbose,\n ...rest,\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openapi.js","names":["url: string","pathParams: Record<string, string>","newParams: Record<string, string>","params: OpenAPIV3_1.ParameterObject[]","spec: OpenAPISpec","jsonSchema: JsonSchema7ObjectType","schema: OpenAPIV3_1.SchemaObject","nameToCallMap: Record<string, { method: string; url: string }>","operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>","paramLocationToRequestArgNameMap: Record<string, string>","requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n }","requestBodySchemas: Record<string, JsonSchema7ObjectType>","openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function","name: string","requestArgs: Record<string, any>","options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }","filteredArgs: Record<string, any>","headers: Record<string, string>","config: { requestMethod: SimpleRequestChainExecutionMethod }","values: ChainValues","_runManager?: CallbackManagerForChainRun","spec: OpenAPIV3_1.Document | string","options: OpenAPIChainOptions"],"sources":["../../../src/chains/openai_functions/openapi.ts"],"sourcesContent":["import type { OpenAIClient } from \"@langchain/openai\";\nimport {\n type JsonSchema7ObjectType,\n type JsonSchema7ArrayType,\n type JsonSchema7Type,\n} from \"@langchain/core/utils/json_schema\";\nimport type { OpenAPIV3_1 } from \"openapi-types\";\n\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport {\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n BasePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { OpenAPISpec } from \"../../util/openapi.js\";\nimport { BaseChain } from \"../base.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\nimport { SequentialChain } from \"../sequential_chain.js\";\nimport { JsonOutputFunctionsParser } from \"../../output_parsers/openai_functions.js\";\n\n/**\n * Type representing a function for executing OpenAPI requests.\n */\ntype OpenAPIExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n) => Promise<string>;\n\n/**\n * Formats a URL by replacing path parameters with their corresponding\n * values.\n * @param url The URL to format.\n * @param pathParams The path parameters to replace in the URL.\n * @returns The formatted URL.\n */\nfunction formatURL(url: string, pathParams: Record<string, string>): string {\n const expectedPathParamNames = [...url.matchAll(/{(.*?)}/g)].map(\n (match) => match[1]\n );\n const newParams: Record<string, string> = {};\n for (const paramName of expectedPathParamNames) {\n const cleanParamName = paramName.replace(/^\\.;/, \"\").replace(/\\*$/, \"\");\n const value = pathParams[cleanParamName];\n let formattedValue;\n if (Array.isArray(value)) {\n if (paramName.startsWith(\".\")) {\n const separator = paramName.endsWith(\"*\") ? \".\" : \",\";\n formattedValue = `.${value.join(separator)}`;\n } else if (paramName.startsWith(\",\")) {\n const separator = paramName.endsWith(\"*\") ? `${cleanParamName}=` : \",\";\n formattedValue = `${cleanParamName}=${value.join(separator)}`;\n } else {\n formattedValue = value.join(\",\");\n }\n } else if (typeof value === \"object\") {\n const kvSeparator = paramName.endsWith(\"*\") ? \"=\" : \",\";\n const kvStrings = Object.entries(value).map(\n ([k, v]) => k + kvSeparator + v\n );\n let entrySeparator;\n if (paramName.startsWith(\".\")) {\n entrySeparator = \".\";\n formattedValue = \".\";\n } else if (paramName.startsWith(\";\")) {\n entrySeparator = \";\";\n formattedValue = \";\";\n } else {\n entrySeparator = \",\";\n formattedValue = \"\";\n }\n formattedValue += kvStrings.join(entrySeparator);\n } else {\n if (paramName.startsWith(\".\")) {\n formattedValue = `.${value}`;\n } else if (paramName.startsWith(\";\")) {\n formattedValue = `;${cleanParamName}=${value}`;\n } else {\n formattedValue = value;\n }\n }\n newParams[paramName] = formattedValue;\n }\n let formattedUrl = url;\n for (const [key, newValue] of Object.entries(newParams)) {\n formattedUrl = formattedUrl.replace(`{${key}}`, newValue);\n }\n return formattedUrl;\n}\n\n/**\n * Converts OpenAPI parameters to JSON schema format.\n * @param params The OpenAPI parameters to convert.\n * @param spec The OpenAPI specification that contains the parameters.\n * @returns The JSON schema representation of the OpenAPI parameters.\n */\nfunction convertOpenAPIParamsToJSONSchema(\n params: OpenAPIV3_1.ParameterObject[],\n spec: OpenAPISpec\n) {\n return params.reduce(\n (jsonSchema: JsonSchema7ObjectType, param) => {\n let schema;\n if (param.schema) {\n schema = spec.getSchema(param.schema);\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else if (param.content) {\n const mediaTypeSchema = Object.values(param.content)[0].schema;\n if (mediaTypeSchema) {\n schema = spec.getSchema(mediaTypeSchema);\n }\n if (!schema) {\n return jsonSchema;\n }\n if (schema.description === undefined) {\n schema.description = param.description ?? \"\";\n }\n jsonSchema.properties[param.name] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n );\n } else {\n return jsonSchema;\n }\n if (param.required && Array.isArray(jsonSchema.required)) {\n jsonSchema.required.push(param.name);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n}\n\n// OpenAI throws errors on extraneous schema properties, e.g. if \"required\" is set on individual ones\n/**\n * Converts OpenAPI schemas to JSON schema format.\n * @param schema The OpenAPI schema to convert.\n * @param spec The OpenAPI specification that contains the schema.\n * @returns The JSON schema representation of the OpenAPI schema.\n */\nexport function convertOpenAPISchemaToJSONSchema(\n schema: OpenAPIV3_1.SchemaObject,\n spec: OpenAPISpec\n): JsonSchema7Type {\n if (schema.type === \"object\") {\n return Object.keys(schema.properties ?? {}).reduce(\n (jsonSchema: JsonSchema7ObjectType, propertyName) => {\n if (!schema.properties) {\n return jsonSchema;\n }\n const openAPIProperty = spec.getSchema(schema.properties[propertyName]);\n if (openAPIProperty.type === undefined) {\n return jsonSchema;\n }\n jsonSchema.properties[propertyName] = convertOpenAPISchemaToJSONSchema(\n openAPIProperty,\n spec\n );\n if (\n (openAPIProperty.required ||\n schema.required?.includes(propertyName)) &&\n jsonSchema.required !== undefined\n ) {\n jsonSchema.required.push(propertyName);\n }\n return jsonSchema;\n },\n {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: {},\n }\n );\n }\n if (schema.type === \"array\") {\n return {\n type: \"array\",\n items: convertOpenAPISchemaToJSONSchema(schema.items ?? {}, spec),\n minItems: schema.minItems,\n maxItems: schema.maxItems,\n } as JsonSchema7ArrayType;\n }\n return {\n type: schema.type ?? \"string\",\n } as JsonSchema7Type;\n}\n\n/**\n * Converts an OpenAPI specification to OpenAI functions.\n * @param spec The OpenAPI specification to convert.\n * @returns An object containing the OpenAI functions derived from the OpenAPI specification and a default execution method.\n */\nexport function convertOpenAPISpecToOpenAIFunctions(spec: OpenAPISpec): {\n openAIFunctions: OpenAIClient.Chat.ChatCompletionCreateParams.Function[];\n defaultExecutionMethod?: OpenAPIExecutionMethod;\n} {\n if (!spec.document.paths) {\n return { openAIFunctions: [] };\n }\n const openAIFunctions = [];\n const nameToCallMap: Record<string, { method: string; url: string }> = {};\n for (const path of Object.keys(spec.document.paths)) {\n const pathParameters = spec.getParametersForPath(path);\n for (const method of spec.getMethodsForPath(path)) {\n const operation = spec.getOperation(path, method);\n if (!operation) {\n return { openAIFunctions: [] };\n }\n const operationParametersByLocation = pathParameters\n .concat(spec.getParametersForOperation(operation))\n .reduce(\n (\n operationParams: Record<string, OpenAPIV3_1.ParameterObject[]>,\n param\n ) => {\n if (!operationParams[param.in]) {\n operationParams[param.in] = [];\n }\n operationParams[param.in].push(param);\n return operationParams;\n },\n {}\n );\n const paramLocationToRequestArgNameMap: Record<string, string> = {\n query: \"params\",\n header: \"headers\",\n cookie: \"cookies\",\n path: \"path_params\",\n };\n const requestArgsSchema: Record<string, JsonSchema7ObjectType> & {\n data?:\n | JsonSchema7ObjectType\n | {\n anyOf?: JsonSchema7ObjectType[];\n };\n } = {};\n for (const paramLocation of Object.keys(\n paramLocationToRequestArgNameMap\n )) {\n if (operationParametersByLocation[paramLocation]) {\n requestArgsSchema[paramLocationToRequestArgNameMap[paramLocation]] =\n convertOpenAPIParamsToJSONSchema(\n operationParametersByLocation[paramLocation],\n spec\n );\n }\n }\n const requestBody = spec.getRequestBodyForOperation(operation);\n if (requestBody?.content !== undefined) {\n const requestBodySchemas: Record<string, JsonSchema7ObjectType> = {};\n for (const [mediaType, mediaTypeObject] of Object.entries(\n requestBody.content\n )) {\n if (mediaTypeObject.schema !== undefined) {\n const schema = spec.getSchema(mediaTypeObject.schema);\n requestBodySchemas[mediaType] = convertOpenAPISchemaToJSONSchema(\n schema,\n spec\n ) as JsonSchema7ObjectType;\n }\n }\n const mediaTypes = Object.keys(requestBodySchemas);\n if (mediaTypes.length === 1) {\n requestArgsSchema.data = requestBodySchemas[mediaTypes[0]];\n } else if (mediaTypes.length > 1) {\n requestArgsSchema.data = {\n anyOf: Object.values(requestBodySchemas),\n };\n }\n }\n const openAIFunction: OpenAIClient.Chat.ChatCompletionCreateParams.Function =\n {\n name: OpenAPISpec.getCleanedOperationId(operation, path, method),\n description: operation.description ?? operation.summary ?? \"\",\n parameters: {\n type: \"object\",\n properties: requestArgsSchema,\n // All remaining top-level parameters are required\n required: Object.keys(requestArgsSchema),\n },\n };\n\n openAIFunctions.push(openAIFunction);\n const baseUrl = (spec.baseUrl ?? \"\").endsWith(\"/\")\n ? (spec.baseUrl ?? \"\").slice(0, -1)\n : spec.baseUrl ?? \"\";\n nameToCallMap[openAIFunction.name] = {\n method,\n url: baseUrl + path,\n };\n }\n }\n return {\n openAIFunctions,\n defaultExecutionMethod: async (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>,\n options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }\n ) => {\n const {\n headers: customHeaders,\n params: customParams,\n ...rest\n } = options ?? {};\n const { method, url } = nameToCallMap[name];\n const requestParams = requestArgs.params ?? {};\n const nonEmptyParams = Object.keys(requestParams).reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (filteredArgs: Record<string, any>, argName) => {\n if (\n requestParams[argName] !== \"\" &&\n requestParams[argName] !== null &&\n requestParams[argName] !== undefined\n ) {\n filteredArgs[argName] = requestParams[argName];\n }\n return filteredArgs;\n },\n {}\n );\n const queryString = new URLSearchParams({\n ...nonEmptyParams,\n ...customParams,\n }).toString();\n const pathParams = requestArgs.path_params;\n const formattedUrl =\n formatURL(url, pathParams) +\n (queryString.length ? `?${queryString}` : \"\");\n const headers: Record<string, string> = {};\n let body;\n if (requestArgs.data !== undefined) {\n let contentType = \"text/plain\";\n if (typeof requestArgs.data !== \"string\") {\n if (typeof requestArgs.data === \"object\") {\n contentType = \"application/json\";\n }\n body = JSON.stringify(requestArgs.data);\n } else {\n body = requestArgs.data;\n }\n headers[\"content-type\"] = contentType;\n }\n const response = await fetch(formattedUrl, {\n ...requestArgs,\n method,\n headers: {\n ...headers,\n ...requestArgs.headers,\n ...customHeaders,\n },\n body,\n ...rest,\n });\n let output;\n if (response.status < 200 || response.status > 299) {\n output = `${response.status}: ${\n response.statusText\n } for ${name} called with ${JSON.stringify(queryString)}`;\n } else {\n output = await response.text();\n }\n return output;\n },\n };\n}\n\n/**\n * Type representing a function for executing simple requests.\n */\ntype SimpleRequestChainExecutionMethod = (\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestArgs: Record<string, any>\n) => Promise<string>;\n\n/**\n * A chain for making simple API requests.\n */\nclass SimpleRequestChain extends BaseChain {\n static lc_name() {\n return \"SimpleRequestChain\";\n }\n\n private requestMethod: SimpleRequestChainExecutionMethod;\n\n inputKey = \"function\";\n\n outputKey = \"response\";\n\n constructor(config: { requestMethod: SimpleRequestChainExecutionMethod }) {\n super();\n this.requestMethod = config.requestMethod;\n }\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return [this.outputKey];\n }\n\n _chainType() {\n return \"simple_request_chain\" as const;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n _runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n const inputKeyValue = values[this.inputKey];\n const methodName = inputKeyValue.name;\n const args = inputKeyValue.arguments;\n const response = await this.requestMethod(methodName, args);\n return { [this.outputKey]: response };\n }\n}\n\n/**\n * Type representing the options for creating an OpenAPI chain.\n */\nexport type OpenAPIChainOptions = {\n llm?: BaseChatModel<BaseFunctionCallOptions>;\n prompt?: BasePromptTemplate;\n requestChain?: BaseChain;\n llmChainInputs?: LLMChainInput;\n headers?: Record<string, string>;\n params?: Record<string, string>;\n verbose?: boolean;\n};\n\n/**\n * Create a chain for querying an API from a OpenAPI spec.\n * @param spec OpenAPISpec or url/file/text string corresponding to one.\n * @param options Custom options passed into the chain\n * @returns OpenAPIChain\n */\nexport async function createOpenAPIChain(\n spec: OpenAPIV3_1.Document | string,\n options: OpenAPIChainOptions = {}\n) {\n let convertedSpec;\n if (typeof spec === \"string\") {\n try {\n convertedSpec = await OpenAPISpec.fromURL(spec);\n } catch {\n try {\n convertedSpec = OpenAPISpec.fromString(spec);\n } catch {\n throw new Error(`Unable to parse spec from source ${spec}.`);\n }\n }\n } else {\n convertedSpec = OpenAPISpec.fromObject(spec);\n }\n const { openAIFunctions, defaultExecutionMethod } =\n convertOpenAPISpecToOpenAIFunctions(convertedSpec);\n if (defaultExecutionMethod === undefined) {\n throw new Error(\n `Could not parse any valid operations from the provided spec.`\n );\n }\n\n if (!options.llm) {\n throw new Error(\"`llm` option is required\");\n }\n\n const {\n llm = options.llm,\n prompt = ChatPromptTemplate.fromMessages([\n HumanMessagePromptTemplate.fromTemplate(\n \"Use the provided API's to respond to this user query:\\n\\n{query}\"\n ),\n ]),\n requestChain = new SimpleRequestChain({\n requestMethod: async (name, args) =>\n defaultExecutionMethod(name, args, {\n headers: options.headers,\n params: options.params,\n }),\n }),\n llmChainInputs = {},\n verbose,\n ...rest\n } = options;\n const formatChain = new LLMChain({\n llm,\n prompt,\n outputParser: new JsonOutputFunctionsParser({ argsOnly: false }),\n outputKey: \"function\",\n llmKwargs: { functions: openAIFunctions },\n ...llmChainInputs,\n });\n return new SequentialChain({\n chains: [formatChain, requestChain],\n outputVariables: [\"response\"],\n inputVariables: formatChain.inputKeys,\n verbose,\n ...rest,\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tagging.cjs","names":["schema: FunctionParameters","llm: BaseChatModel<BaseFunctionCallOptions>","options: TaggingChainOptions","PromptTemplate","JsonOutputFunctionsParser","LLMChain","schema: InteropZodObject","options?: TaggingChainOptions"],"sources":["../../../src/chains/openai_functions/tagging.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { AIMessageChunk } from \"@langchain/core/messages\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport {\n type JsonSchema7ObjectType,\n toJsonSchema,\n} from \"@langchain/core/utils/json_schema\";\nimport {\n FunctionParameters,\n JsonOutputFunctionsParser,\n} from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\n\n/**\n * Type representing the options for creating a tagging chain.\n */\nexport type TaggingChainOptions = {\n prompt?: PromptTemplate;\n} & Omit<LLMChainInput<object>, \"prompt\" | \"llm\">;\n\n/**\n * Function that returns an array of tagging functions. These functions\n * are used to extract relevant information from a passage.\n * @param schema The schema defining the structure of function parameters.\n * @returns An array of tagging functions.\n */\nfunction getTaggingFunctions(schema: FunctionParameters) {\n return [\n {\n name: \"information_extraction\",\n description: \"Extracts the relevant information from the passage.\",\n parameters: schema,\n },\n ];\n}\n\nconst TAGGING_TEMPLATE = `Extract the desired information from the following passage.\n\nPassage:\n{input}\n`;\n\n/**\n * Function that creates a tagging chain using the provided schema,\n * LLM, and options. It constructs the LLM with the necessary\n * functions, prompt, output parser, and tags.\n * @param schema The schema defining the structure of function parameters.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport function createTaggingChain(\n schema: FunctionParameters,\n llm: BaseChatModel<BaseFunctionCallOptions>,\n options: TaggingChainOptions = {}\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n const { prompt = PromptTemplate.fromTemplate(TAGGING_TEMPLATE), ...rest } =\n options;\n const functions = getTaggingFunctions(schema);\n const outputParser = new JsonOutputFunctionsParser();\n return new LLMChain({\n llm,\n prompt,\n llmKwargs: { functions },\n outputParser,\n tags: [\"openai_functions\", \"tagging\"],\n ...rest,\n });\n}\n\n/**\n * Function that creates a tagging chain from a Zod schema. It converts\n * the Zod schema to a JSON schema using the zodToJsonSchema function and\n * then calls createTaggingChain with the converted schema.\n * @param schema The Zod schema which extracted data should match.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport function createTaggingChainFromZod(\n
|
|
1
|
+
{"version":3,"file":"tagging.cjs","names":["schema: FunctionParameters","llm: BaseChatModel<BaseFunctionCallOptions>","options: TaggingChainOptions","PromptTemplate","JsonOutputFunctionsParser","LLMChain","schema: InteropZodObject","options?: TaggingChainOptions"],"sources":["../../../src/chains/openai_functions/tagging.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { AIMessageChunk } from \"@langchain/core/messages\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport {\n type JsonSchema7ObjectType,\n toJsonSchema,\n} from \"@langchain/core/utils/json_schema\";\nimport {\n FunctionParameters,\n JsonOutputFunctionsParser,\n} from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\n\n/**\n * Type representing the options for creating a tagging chain.\n */\nexport type TaggingChainOptions = {\n prompt?: PromptTemplate;\n} & Omit<LLMChainInput<object>, \"prompt\" | \"llm\">;\n\n/**\n * Function that returns an array of tagging functions. These functions\n * are used to extract relevant information from a passage.\n * @param schema The schema defining the structure of function parameters.\n * @returns An array of tagging functions.\n */\nfunction getTaggingFunctions(schema: FunctionParameters) {\n return [\n {\n name: \"information_extraction\",\n description: \"Extracts the relevant information from the passage.\",\n parameters: schema,\n },\n ];\n}\n\nconst TAGGING_TEMPLATE = `Extract the desired information from the following passage.\n\nPassage:\n{input}\n`;\n\n/**\n * Function that creates a tagging chain using the provided schema,\n * LLM, and options. It constructs the LLM with the necessary\n * functions, prompt, output parser, and tags.\n * @param schema The schema defining the structure of function parameters.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport function createTaggingChain(\n schema: FunctionParameters,\n llm: BaseChatModel<BaseFunctionCallOptions>,\n options: TaggingChainOptions = {}\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n const { prompt = PromptTemplate.fromTemplate(TAGGING_TEMPLATE), ...rest } =\n options;\n const functions = getTaggingFunctions(schema);\n const outputParser = new JsonOutputFunctionsParser();\n return new LLMChain({\n llm,\n prompt,\n llmKwargs: { functions },\n outputParser,\n tags: [\"openai_functions\", \"tagging\"],\n ...rest,\n });\n}\n\n/**\n * Function that creates a tagging chain from a Zod schema. It converts\n * the Zod schema to a JSON schema using the zodToJsonSchema function and\n * then calls createTaggingChain with the converted schema.\n * @param schema The Zod schema which extracted data should match.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport function createTaggingChainFromZod(\n schema: InteropZodObject,\n llm: BaseChatModel<BaseFunctionCallOptions>,\n options?: TaggingChainOptions\n): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>> {\n return createTaggingChain(\n toJsonSchema(schema) as JsonSchema7ObjectType,\n llm,\n options\n );\n}\n"],"mappings":";;;;;;;;;;;;;AA4BA,SAAS,oBAAoBA,QAA4B;AACvD,QAAO,CACL;EACE,MAAM;EACN,aAAa;EACb,YAAY;CACb,CACF;AACF;AAED,MAAM,mBAAmB,CAAC;;;;AAI1B,CAAC;;;;;;;;;;;;;;AAeD,SAAgB,mBACdA,QACAC,KACAC,UAA+B,CAAE,GACyC;CAC1E,MAAM,EAAE,SAASC,wCAAe,aAAa,iBAAiB,CAAE,GAAG,MAAM,GACvE;CACF,MAAM,YAAY,oBAAoB,OAAO;CAC7C,MAAM,eAAe,IAAIC;AACzB,QAAO,IAAIC,2BAAS;EAClB;EACA;EACA,WAAW,EAAE,UAAW;EACxB;EACA,MAAM,CAAC,oBAAoB,SAAU;EACrC,GAAG;CACJ;AACF;;;;;;;;;;;;;;AAeD,SAAgB,0BACdC,QACAL,KACAM,SAC0E;AAC1E,QAAO,wEACQ,OAAO,EACpB,KACA,QACD;AACF"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { LLMChain, LLMChainInput } from "../llm_chain.cjs";
|
|
2
2
|
import { FunctionParameters } from "../../output_parsers/openai_functions.cjs";
|
|
3
3
|
import { BaseFunctionCallOptions } from "@langchain/core/language_models/base";
|
|
4
|
-
import { PromptTemplate } from "@langchain/core/prompts";
|
|
5
4
|
import { InteropZodObject } from "@langchain/core/utils/types";
|
|
6
5
|
import { AIMessageChunk } from "@langchain/core/messages";
|
|
7
6
|
import { BaseChatModel } from "@langchain/core/language_models/chat_models";
|
|
7
|
+
import { PromptTemplate } from "@langchain/core/prompts";
|
|
8
8
|
|
|
9
9
|
//#region src/chains/openai_functions/tagging.d.ts
|
|
10
10
|
|
|
@@ -41,9 +41,7 @@ declare function createTaggingChain(schema: FunctionParameters, llm: BaseChatMod
|
|
|
41
41
|
* Switch to expression language: https://js.langchain.com/docs/expression_language/
|
|
42
42
|
* Will be removed in 0.2.0
|
|
43
43
|
*/
|
|
44
|
-
declare function createTaggingChainFromZod(
|
|
45
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
46
|
-
schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
|
|
44
|
+
declare function createTaggingChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
|
|
47
45
|
//#endregion
|
|
48
46
|
export { TaggingChainOptions, createTaggingChain, createTaggingChainFromZod };
|
|
49
47
|
//# sourceMappingURL=tagging.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tagging.d.cts","names":["BaseChatModel","BaseFunctionCallOptions","AIMessageChunk","PromptTemplate","InteropZodObject","FunctionParameters","LLMChain","LLMChainInput","TaggingChainOptions","Omit","createTaggingChain","createTaggingChainFromZod"],"sources":["../../../src/chains/openai_functions/tagging.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { AIMessageChunk } from \"@langchain/core/messages\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\n/**\n * Type representing the options for creating a tagging chain.\n */\nexport type TaggingChainOptions = {\n prompt?: PromptTemplate;\n} & Omit<LLMChainInput<object>, \"prompt\" | \"llm\">;\n/**\n * Function that creates a tagging chain using the provided schema,\n * LLM, and options. It constructs the LLM with the necessary\n * functions, prompt, output parser, and tags.\n * @param schema The schema defining the structure of function parameters.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport declare function createTaggingChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates a tagging chain from a Zod schema. It converts\n * the Zod schema to a JSON schema using the zodToJsonSchema function and\n * then calls createTaggingChain with the converted schema.\n * @param schema The Zod schema which extracted data should match.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport declare function createTaggingChainFromZod(
|
|
1
|
+
{"version":3,"file":"tagging.d.cts","names":["BaseChatModel","BaseFunctionCallOptions","AIMessageChunk","PromptTemplate","InteropZodObject","FunctionParameters","LLMChain","LLMChainInput","TaggingChainOptions","Omit","createTaggingChain","createTaggingChainFromZod"],"sources":["../../../src/chains/openai_functions/tagging.d.ts"],"sourcesContent":["import { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { BaseFunctionCallOptions } from \"@langchain/core/language_models/base\";\nimport { AIMessageChunk } from \"@langchain/core/messages\";\nimport { PromptTemplate } from \"@langchain/core/prompts\";\nimport { InteropZodObject } from \"@langchain/core/utils/types\";\nimport { FunctionParameters } from \"../../output_parsers/openai_functions.js\";\nimport { LLMChain, LLMChainInput } from \"../llm_chain.js\";\n/**\n * Type representing the options for creating a tagging chain.\n */\nexport type TaggingChainOptions = {\n prompt?: PromptTemplate;\n} & Omit<LLMChainInput<object>, \"prompt\" | \"llm\">;\n/**\n * Function that creates a tagging chain using the provided schema,\n * LLM, and options. It constructs the LLM with the necessary\n * functions, prompt, output parser, and tags.\n * @param schema The schema defining the structure of function parameters.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport declare function createTaggingChain(schema: FunctionParameters, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n/**\n * Function that creates a tagging chain from a Zod schema. It converts\n * the Zod schema to a JSON schema using the zodToJsonSchema function and\n * then calls createTaggingChain with the converted schema.\n * @param schema The Zod schema which extracted data should match.\n * @param llm LLM to use in the chain. Must support function calling.\n * @param options Options for creating the tagging chain.\n * @returns A new instance of LLMChain configured for tagging.\n *\n * @deprecated\n * Switch to expression language: https://js.langchain.com/docs/expression_language/\n * Will be removed in 0.2.0\n */\nexport declare function createTaggingChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;\n"],"mappings":";;;;;;;;;;;;AAUA;AAA+B,KAAnBQ,mBAAAA,GAAmB;EAAA,MAClBL,CAAAA,EAAAA,cAAAA;CAAc,GACvBM,IAAKF,CAAAA,aAAAA,CAAAA,MAAAA,CAAAA,EAAAA,QAAAA,GAAAA,KAAAA,CAAAA;;AAAD;AAcR;;;;;;;;;;AAA4J;AAcpII,iBAdAD,kBAAAA,CAcyB,MAAA,EAdEL,kBAcF,EAAA,GAAA,EAd2BL,aAc3B,CAdyCC,uBAczC,CAAA,EAAA,OAAA,CAAA,EAd6EO,mBAc7E,CAAA,EAdmGF,QAcnG,CAAA,MAAA,EAdoHN,aAcpH,CAdkIC,uBAclI,EAd2JC,cAc3J,CAAA,CAAA;;;;;;;;;;AAAgH;;;;iBAAzIS,yBAAAA,SAAkCP,uBAAuBJ,cAAcC,oCAAoCO,sBAAsBF,iBAAiBN,cAAcC,yBAAyBC"}
|
|
@@ -41,9 +41,7 @@ declare function createTaggingChain(schema: FunctionParameters, llm: BaseChatMod
|
|
|
41
41
|
* Switch to expression language: https://js.langchain.com/docs/expression_language/
|
|
42
42
|
* Will be removed in 0.2.0
|
|
43
43
|
*/
|
|
44
|
-
declare function createTaggingChainFromZod(
|
|
45
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
46
|
-
schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
|
|
44
|
+
declare function createTaggingChainFromZod(schema: InteropZodObject, llm: BaseChatModel<BaseFunctionCallOptions>, options?: TaggingChainOptions): LLMChain<object, BaseChatModel<BaseFunctionCallOptions, AIMessageChunk>>;
|
|
47
45
|
//#endregion
|
|
48
46
|
export { TaggingChainOptions, createTaggingChain, createTaggingChainFromZod };
|
|
49
47
|
//# sourceMappingURL=tagging.d.ts.map
|