@langchain/classic 1.0.27 → 1.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/agents/agent.cjs.map +1 -1
- package/dist/agents/agent.js.map +1 -1
- package/dist/agents/executor.cjs.map +1 -1
- package/dist/agents/executor.js.map +1 -1
- package/dist/agents/openai_functions/index.cjs.map +1 -1
- package/dist/agents/openai_functions/index.d.cts.map +1 -1
- package/dist/agents/openai_functions/index.d.ts.map +1 -1
- package/dist/agents/openai_functions/index.js.map +1 -1
- package/dist/agents/openai_tools/index.cjs.map +1 -1
- package/dist/agents/openai_tools/index.d.cts +2 -2
- package/dist/agents/openai_tools/index.d.cts.map +1 -1
- package/dist/agents/openai_tools/index.d.ts +2 -2
- package/dist/agents/openai_tools/index.d.ts.map +1 -1
- package/dist/agents/openai_tools/index.js.map +1 -1
- package/dist/agents/react/index.d.cts +2 -2
- package/dist/agents/react/index.d.cts.map +1 -1
- package/dist/agents/react/index.d.ts +2 -2
- package/dist/agents/react/index.d.ts.map +1 -1
- package/dist/agents/structured_chat/index.d.cts +2 -2
- package/dist/agents/structured_chat/index.d.cts.map +1 -1
- package/dist/agents/structured_chat/index.d.ts +2 -2
- package/dist/agents/structured_chat/index.d.ts.map +1 -1
- package/dist/agents/tool_calling/index.d.cts +2 -2
- package/dist/agents/tool_calling/index.d.cts.map +1 -1
- package/dist/agents/tool_calling/index.d.ts +2 -2
- package/dist/agents/tool_calling/index.d.ts.map +1 -1
- package/dist/agents/tool_calling/output_parser.cjs.map +1 -1
- package/dist/agents/tool_calling/output_parser.d.cts.map +1 -1
- package/dist/agents/tool_calling/output_parser.js.map +1 -1
- package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.cts +2 -2
- package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.cts.map +1 -1
- package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.ts +2 -2
- package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.ts.map +1 -1
- package/dist/agents/xml/index.d.cts.map +1 -1
- package/dist/agents/xml/index.d.ts.map +1 -1
- package/dist/cache/file_system.cjs.map +1 -1
- package/dist/cache/file_system.js.map +1 -1
- package/dist/chains/analyze_documents_chain.cjs.map +1 -1
- package/dist/chains/analyze_documents_chain.js.map +1 -1
- package/dist/chains/base.cjs.map +1 -1
- package/dist/chains/base.d.cts +2 -2
- package/dist/chains/base.d.cts.map +1 -1
- package/dist/chains/base.d.ts +2 -2
- package/dist/chains/base.d.ts.map +1 -1
- package/dist/chains/base.js.map +1 -1
- package/dist/chains/chat_vector_db_chain.cjs.map +1 -1
- package/dist/chains/chat_vector_db_chain.js.map +1 -1
- package/dist/chains/combine_docs_chain.d.cts +2 -2
- package/dist/chains/combine_docs_chain.d.cts.map +1 -1
- package/dist/chains/combine_docs_chain.d.ts +2 -2
- package/dist/chains/combine_docs_chain.d.ts.map +1 -1
- package/dist/chains/combine_documents/reduce.cjs.map +1 -1
- package/dist/chains/combine_documents/reduce.js.map +1 -1
- package/dist/chains/conversational_retrieval_chain.cjs.map +1 -1
- package/dist/chains/conversational_retrieval_chain.js.map +1 -1
- package/dist/chains/graph_qa/cypher.cjs.map +1 -1
- package/dist/chains/graph_qa/cypher.js.map +1 -1
- package/dist/chains/llm_chain.cjs.map +1 -1
- package/dist/chains/llm_chain.js.map +1 -1
- package/dist/chains/load.d.cts +1 -2
- package/dist/chains/load.d.cts.map +1 -1
- package/dist/chains/load.d.ts +1 -2
- package/dist/chains/load.d.ts.map +1 -1
- package/dist/chains/openai_functions/base.cjs.map +1 -1
- package/dist/chains/openai_functions/base.js.map +1 -1
- package/dist/chains/openai_functions/openapi.cjs.map +1 -1
- package/dist/chains/openai_functions/openapi.js.map +1 -1
- package/dist/chains/openai_moderation.cjs.map +1 -1
- package/dist/chains/openai_moderation.js.map +1 -1
- package/dist/chains/query_constructor/index.cjs.map +1 -1
- package/dist/chains/query_constructor/index.js.map +1 -1
- package/dist/chains/question_answering/load.d.cts +1 -2
- package/dist/chains/question_answering/load.d.cts.map +1 -1
- package/dist/chains/question_answering/load.d.ts +1 -2
- package/dist/chains/question_answering/load.d.ts.map +1 -1
- package/dist/chains/retrieval.cjs.map +1 -1
- package/dist/chains/retrieval.js.map +1 -1
- package/dist/chains/retrieval_qa.cjs.map +1 -1
- package/dist/chains/retrieval_qa.js.map +1 -1
- package/dist/chains/router/utils.cjs.map +1 -1
- package/dist/chains/router/utils.js.map +1 -1
- package/dist/chains/summarization/load.d.cts +1 -2
- package/dist/chains/summarization/load.d.cts.map +1 -1
- package/dist/chains/summarization/load.d.ts +1 -2
- package/dist/chains/summarization/load.d.ts.map +1 -1
- package/dist/chains/vector_db_qa.cjs.map +1 -1
- package/dist/chains/vector_db_qa.js.map +1 -1
- package/dist/chat_models/universal.cjs +8 -10
- package/dist/chat_models/universal.cjs.map +1 -1
- package/dist/chat_models/universal.d.cts +3 -5
- package/dist/chat_models/universal.d.cts.map +1 -1
- package/dist/chat_models/universal.d.ts +3 -5
- package/dist/chat_models/universal.d.ts.map +1 -1
- package/dist/chat_models/universal.js +8 -10
- package/dist/chat_models/universal.js.map +1 -1
- package/dist/document_loaders/fs/directory.d.cts.map +1 -1
- package/dist/document_loaders/fs/directory.d.ts.map +1 -1
- package/dist/document_loaders/fs/json.cjs.map +1 -1
- package/dist/document_loaders/fs/json.js.map +1 -1
- package/dist/document_transformers/openai_functions.d.cts.map +1 -1
- package/dist/evaluation/agents/index.d.cts +1 -0
- package/dist/evaluation/agents/trajectory.d.cts +2 -2
- package/dist/evaluation/agents/trajectory.d.cts.map +1 -1
- package/dist/evaluation/agents/trajectory.d.ts +2 -2
- package/dist/evaluation/agents/trajectory.d.ts.map +1 -1
- package/dist/evaluation/base.cjs.map +1 -1
- package/dist/evaluation/base.d.cts.map +1 -1
- package/dist/evaluation/base.js.map +1 -1
- package/dist/evaluation/comparison/index.d.cts +1 -0
- package/dist/evaluation/comparison/pairwise.cjs.map +1 -1
- package/dist/evaluation/comparison/pairwise.d.cts +3 -3
- package/dist/evaluation/comparison/pairwise.d.cts.map +1 -1
- package/dist/evaluation/comparison/pairwise.d.ts +3 -3
- package/dist/evaluation/comparison/pairwise.d.ts.map +1 -1
- package/dist/evaluation/comparison/pairwise.js.map +1 -1
- package/dist/evaluation/criteria/criteria.cjs.map +1 -1
- package/dist/evaluation/criteria/criteria.d.cts +3 -3
- package/dist/evaluation/criteria/criteria.d.cts.map +1 -1
- package/dist/evaluation/criteria/criteria.d.ts +3 -3
- package/dist/evaluation/criteria/criteria.d.ts.map +1 -1
- package/dist/evaluation/criteria/criteria.js.map +1 -1
- package/dist/evaluation/criteria/index.d.cts +1 -0
- package/dist/evaluation/embedding_distance/index.d.cts +1 -0
- package/dist/evaluation/loader.cjs.map +1 -1
- package/dist/evaluation/loader.d.cts.map +1 -1
- package/dist/evaluation/loader.js.map +1 -1
- package/dist/evaluation/qa/index.d.cts +1 -0
- package/dist/experimental/autogpt/prompt.d.cts +2 -2
- package/dist/experimental/autogpt/prompt.d.cts.map +1 -1
- package/dist/experimental/autogpt/prompt.d.ts +2 -2
- package/dist/experimental/autogpt/prompt.d.ts.map +1 -1
- package/dist/experimental/autogpt/prompt_generator.cjs.map +1 -1
- package/dist/experimental/autogpt/prompt_generator.js.map +1 -1
- package/dist/experimental/autogpt/schema.cjs.map +1 -1
- package/dist/experimental/autogpt/schema.js.map +1 -1
- package/dist/experimental/generative_agents/generative_agent_memory.cjs.map +1 -1
- package/dist/experimental/generative_agents/generative_agent_memory.js.map +1 -1
- package/dist/experimental/masking/parser.cjs.map +1 -1
- package/dist/experimental/masking/parser.js.map +1 -1
- package/dist/experimental/masking/regex_masking_transformer.cjs.map +1 -1
- package/dist/experimental/masking/regex_masking_transformer.js.map +1 -1
- package/dist/experimental/openai_assistant/index.cjs.map +1 -1
- package/dist/experimental/openai_assistant/index.d.cts +3 -3
- package/dist/experimental/openai_assistant/index.d.ts +3 -3
- package/dist/experimental/openai_assistant/index.js.map +1 -1
- package/dist/experimental/openai_files/index.d.cts +4 -4
- package/dist/experimental/openai_files/index.d.ts +4 -4
- package/dist/experimental/plan_and_execute/agent_executor.cjs.map +1 -1
- package/dist/experimental/plan_and_execute/agent_executor.js.map +1 -1
- package/dist/experimental/prompts/custom_format.cjs.map +1 -1
- package/dist/experimental/prompts/custom_format.js.map +1 -1
- package/dist/experimental/prompts/handlebars.cjs.map +1 -1
- package/dist/experimental/prompts/handlebars.d.cts +2 -2
- package/dist/experimental/prompts/handlebars.d.cts.map +1 -1
- package/dist/experimental/prompts/handlebars.d.ts +2 -2
- package/dist/experimental/prompts/handlebars.d.ts.map +1 -1
- package/dist/experimental/prompts/handlebars.js.map +1 -1
- package/dist/hub/base.cjs.map +1 -1
- package/dist/hub/base.d.cts +0 -1
- package/dist/hub/base.d.cts.map +1 -1
- package/dist/hub/base.d.ts +0 -1
- package/dist/hub/base.d.ts.map +1 -1
- package/dist/hub/base.js.map +1 -1
- package/dist/hub/index.cjs.map +1 -1
- package/dist/hub/index.js.map +1 -1
- package/dist/load/index.cjs.map +1 -1
- package/dist/load/index.js.map +1 -1
- package/dist/output_parsers/combining.cjs.map +1 -1
- package/dist/output_parsers/combining.js.map +1 -1
- package/dist/output_parsers/expression_type_handlers/base.cjs.map +1 -1
- package/dist/output_parsers/expression_type_handlers/base.d.cts.map +1 -1
- package/dist/output_parsers/expression_type_handlers/base.d.ts.map +1 -1
- package/dist/output_parsers/expression_type_handlers/base.js.map +1 -1
- package/dist/output_parsers/fix.cjs.map +1 -1
- package/dist/output_parsers/fix.js.map +1 -1
- package/dist/output_parsers/openai_functions.d.cts.map +1 -1
- package/dist/output_parsers/openai_functions.d.ts.map +1 -1
- package/dist/output_parsers/openai_tools.cjs.map +1 -1
- package/dist/output_parsers/openai_tools.js.map +1 -1
- package/dist/output_parsers/regex.cjs.map +1 -1
- package/dist/output_parsers/regex.js.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 +2 -2
- package/dist/output_parsers/structured.d.ts.map +1 -1
- package/dist/retrievers/document_compressors/index.cjs.map +1 -1
- package/dist/retrievers/document_compressors/index.js.map +1 -1
- package/dist/retrievers/matryoshka_retriever.cjs.map +1 -1
- package/dist/retrievers/matryoshka_retriever.d.cts +1 -1
- package/dist/retrievers/matryoshka_retriever.d.cts.map +1 -1
- package/dist/retrievers/matryoshka_retriever.d.ts +1 -1
- package/dist/retrievers/matryoshka_retriever.d.ts.map +1 -1
- package/dist/retrievers/matryoshka_retriever.js.map +1 -1
- package/dist/retrievers/multi_query.cjs.map +1 -1
- package/dist/retrievers/multi_query.js.map +1 -1
- package/dist/retrievers/parent_document.cjs.map +1 -1
- package/dist/retrievers/parent_document.js.map +1 -1
- package/dist/schema/prompt_template.d.cts +1 -2
- package/dist/schema/prompt_template.d.cts.map +1 -1
- package/dist/schema/prompt_template.d.ts +1 -2
- package/dist/schema/prompt_template.d.ts.map +1 -1
- package/dist/smith/config.cjs.map +1 -1
- package/dist/smith/config.d.cts +1 -1
- package/dist/smith/config.d.ts +1 -1
- package/dist/smith/config.d.ts.map +1 -1
- package/dist/smith/config.js.map +1 -1
- package/dist/smith/runner_utils.cjs.map +1 -1
- package/dist/smith/runner_utils.d.cts +1 -1
- package/dist/smith/runner_utils.d.cts.map +1 -1
- package/dist/smith/runner_utils.d.ts +1 -1
- package/dist/smith/runner_utils.d.ts.map +1 -1
- package/dist/smith/runner_utils.js.map +1 -1
- package/dist/sql_db.d.cts +2 -2
- package/dist/sql_db.d.cts.map +1 -1
- package/dist/sql_db.d.ts +2 -2
- package/dist/sql_db.d.ts.map +1 -1
- package/dist/storage/encoder_backed.cjs.map +1 -1
- package/dist/storage/encoder_backed.js.map +1 -1
- package/dist/storage/file_system.cjs.map +1 -1
- package/dist/storage/file_system.js.map +1 -1
- package/dist/stores/doc/in_memory.cjs.map +1 -1
- package/dist/stores/doc/in_memory.js.map +1 -1
- package/dist/tools/json.cjs.map +1 -1
- package/dist/tools/json.js.map +1 -1
- package/dist/tools/webbrowser.cjs.map +1 -1
- package/dist/tools/webbrowser.d.cts.map +1 -1
- package/dist/tools/webbrowser.d.ts.map +1 -1
- package/dist/tools/webbrowser.js.map +1 -1
- package/dist/util/document.d.cts +1 -1
- package/dist/util/document.d.cts.map +1 -1
- package/dist/util/document.d.ts +1 -1
- package/dist/util/document.d.ts.map +1 -1
- package/dist/util/is-network-error/index.cjs.map +1 -1
- package/dist/util/is-network-error/index.js.map +1 -1
- package/dist/util/load.cjs.map +1 -1
- package/dist/util/load.js.map +1 -1
- package/dist/util/openapi.cjs.map +1 -1
- package/dist/util/openapi.d.cts +32 -32
- package/dist/util/openapi.d.cts.map +1 -1
- package/dist/util/openapi.d.ts +32 -32
- package/dist/util/openapi.d.ts.map +1 -1
- package/dist/util/openapi.js.map +1 -1
- package/dist/util/p-retry/index.cjs.map +1 -1
- package/dist/util/p-retry/index.js.map +1 -1
- package/dist/vectorstores/memory.cjs.map +1 -1
- package/dist/vectorstores/memory.js.map +1 -1
- package/package.json +25 -48
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/client.d.cts +0 -1494
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/client.d.cts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/client.d.ts +0 -1494
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/client.d.ts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/_runner.d.cts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/_runner.d.ts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluate_comparative.d.cts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluate_comparative.d.ts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluator.d.cts +0 -66
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluator.d.cts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluator.d.ts +0 -66
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluator.d.ts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/index.d.cts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/index.d.ts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/string_evaluator.d.cts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/string_evaluator.d.ts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/index.d.cts +0 -4
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/index.d.ts +0 -4
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/run_trees.d.cts +0 -145
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/run_trees.d.cts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/run_trees.d.ts +0 -145
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/run_trees.d.ts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/schemas.d.cts +0 -437
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/schemas.d.cts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/schemas.d.ts +0 -437
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/schemas.d.ts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.cts +0 -7
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.cts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.ts +0 -7
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.ts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/types.d.cts +0 -38
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/types.d.cts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/types.d.ts +0 -38
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/types.d.ts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.cts +0 -25
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.cts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.ts +0 -25
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.ts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/p-queue.d.cts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/p-queue.d.ts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/prompt_cache/index.d.cts +0 -129
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/prompt_cache/index.d.cts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/prompt_cache/index.d.ts +0 -129
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/prompt_cache/index.d.ts.map +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/evaluation.d.cts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/evaluation.d.ts +0 -1
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/singletons/traceable.d.cts +0 -2
- package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/singletons/traceable.d.ts +0 -2
- package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.d.cts +0 -1
- package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.d.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","names":[],"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 * Type representing the composition types of a schema.\n */\ntype CompositionType = \"anyOf\" | \"allOf\" | \"oneOf\";\n\n/**\n * Gets the composition type of a schema if it exists.\n * @param schema\n * @returns The composition type of the schema if it exists.\n */\nfunction getCompositionType(\n schema: OpenAPIV3_1.SchemaObject\n): CompositionType | undefined {\n if (schema.anyOf !== undefined) {\n return \"anyOf\";\n }\n if (schema.allOf !== undefined) {\n return \"allOf\";\n }\n if (schema.oneOf !== undefined) {\n return \"oneOf\";\n }\n return undefined;\n}\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 const compositionType = getCompositionType(schema);\n if (compositionType !== undefined && schema[compositionType] !== undefined) {\n return {\n [compositionType]: schema[compositionType].map((s) =>\n convertOpenAPISchemaToJSONSchema(spec.getSchema(s), spec)\n ),\n } as JsonSchema7Type;\n }\n\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 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\n if (schema.type === \"array\") {\n const openAPIItems = spec.getSchema(schema.items ?? {});\n return {\n type: \"array\",\n items: convertOpenAPISchemaToJSONSchema(openAPIItems, 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":";;;;;;;;;;;;AA8CA,SAAS,mBACP,QAC6B;AAC7B,KAAI,OAAO,UAAU,KAAA,EACnB,QAAO;AAET,KAAI,OAAO,UAAU,KAAA,EACnB,QAAO;AAET,KAAI,OAAO,UAAU,KAAA,EACnB,QAAO;;;;;;;;;AAYX,SAAS,UAAU,KAAa,YAA4C;CAC1E,MAAM,yBAAyB,CAAC,GAAG,IAAI,SAAS,WAAW,CAAC,CAAC,KAC1D,UAAU,MAAM,GAClB;CACD,MAAM,YAAoC,EAAE;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;AAClD,oBAAiB,IAAI,MAAM,KAAK,UAAU;aACjC,UAAU,WAAW,IAAI,EAAE;GACpC,MAAM,YAAY,UAAU,SAAS,IAAI,GAAG,GAAG,eAAe,KAAK;AACnE,oBAAiB,GAAG,eAAe,GAAG,MAAM,KAAK,UAAU;QAE3D,kBAAiB,MAAM,KAAK,IAAI;WAEzB,OAAO,UAAU,UAAU;GACpC,MAAM,cAAc,UAAU,SAAS,IAAI,GAAG,MAAM;GACpD,MAAM,YAAY,OAAO,QAAQ,MAAM,CAAC,KACrC,CAAC,GAAG,OAAO,IAAI,cAAc,EAC/B;GACD,IAAI;AACJ,OAAI,UAAU,WAAW,IAAI,EAAE;AAC7B,qBAAiB;AACjB,qBAAiB;cACR,UAAU,WAAW,IAAI,EAAE;AACpC,qBAAiB;AACjB,qBAAiB;UACZ;AACL,qBAAiB;AACjB,qBAAiB;;AAEnB,qBAAkB,UAAU,KAAK,eAAe;aAE5C,UAAU,WAAW,IAAI,CAC3B,kBAAiB,IAAI;WACZ,UAAU,WAAW,IAAI,CAClC,kBAAiB,IAAI,eAAe,GAAG;MAEvC,kBAAiB;AAGrB,YAAU,aAAa;;CAEzB,IAAI,eAAe;AACnB,MAAK,MAAM,CAAC,KAAK,aAAa,OAAO,QAAQ,UAAU,CACrD,gBAAe,aAAa,QAAQ,IAAI,IAAI,IAAI,SAAS;AAE3D,QAAO;;;;;;;;AAST,SAAS,iCACP,QACA,MACA;AACA,QAAO,OAAO,QACX,YAAmC,UAAU;EAC5C,IAAI;AACJ,MAAI,MAAM,QAAQ;AAChB,YAAS,KAAK,UAAU,MAAM,OAAO;AACrC,cAAW,WAAW,MAAM,QAAQ,iCAClC,QACA,KACD;aACQ,MAAM,SAAS;GACxB,MAAM,kBAAkB,OAAO,OAAO,MAAM,QAAQ,CAAC,GAAG;AACxD,OAAI,gBACF,UAAS,KAAK,UAAU,gBAAgB;AAE1C,OAAI,CAAC,OACH,QAAO;AAET,OAAI,OAAO,gBAAgB,KAAA,EACzB,QAAO,cAAc,MAAM,eAAe;AAE5C,cAAW,WAAW,MAAM,QAAQ,iCAClC,QACA,KACD;QAED,QAAO;AAET,MAAI,MAAM,YAAY,MAAM,QAAQ,WAAW,SAAS,CACtD,YAAW,SAAS,KAAK,MAAM,KAAK;AAEtC,SAAO;IAET;EACE,MAAM;EACN,YAAY,EAAE;EACd,UAAU,EAAE;EACZ,sBAAsB,EAAE;EACzB,CACF;;;;;;;;AAUH,SAAgB,iCACd,QACA,MACiB;CACjB,MAAM,kBAAkB,mBAAmB,OAAO;AAClD,KAAI,oBAAoB,KAAA,KAAa,OAAO,qBAAqB,KAAA,EAC/D,QAAO,GACJ,kBAAkB,OAAO,iBAAiB,KAAK,MAC9C,iCAAiC,KAAK,UAAU,EAAE,EAAE,KAAK,CAC1D,EACF;AAGH,KAAI,OAAO,SAAS,SAClB,QAAO,OAAO,KAAK,OAAO,cAAc,EAAE,CAAC,CAAC,QACzC,YAAmC,iBAAiB;AACnD,MAAI,CAAC,OAAO,WACV,QAAO;EAET,MAAM,kBAAkB,KAAK,UAAU,OAAO,WAAW,cAAc;AACvE,MAAI,gBAAgB,SAAS,KAAA,EAC3B,QAAO;AAET,aAAW,WAAW,gBAAgB,iCACpC,iBACA,KACD;AACD,MACE,OAAO,UAAU,SAAS,aAAa,IACvC,WAAW,aAAa,KAAA,EAExB,YAAW,SAAS,KAAK,aAAa;AAExC,SAAO;IAET;EACE,MAAM;EACN,YAAY,EAAE;EACd,UAAU,EAAE;EACZ,sBAAsB,EAAE;EACzB,CACF;AAGH,KAAI,OAAO,SAAS,QAElB,QAAO;EACL,MAAM;EACN,OAAO,iCAHY,KAAK,UAAU,OAAO,SAAS,EAAE,CAAC,EAGC,KAAK;EAC3D,UAAU,OAAO;EACjB,UAAU,OAAO;EAClB;AAEH,QAAO,EACL,MAAM,OAAO,QAAQ,UACtB;;;;;;;AAQH,SAAgB,oCAAoC,MAGlD;AACA,KAAI,CAAC,KAAK,SAAS,MACjB,QAAO,EAAE,iBAAiB,EAAE,EAAE;CAEhC,MAAM,kBAAkB,EAAE;CAC1B,MAAM,gBAAiE,EAAE;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,EAAE,EAAE;GAEhC,MAAM,gCAAgC,eACnC,OAAO,KAAK,0BAA0B,UAAU,CAAC,CACjD,QAEG,iBACA,UACG;AACH,QAAI,CAAC,gBAAgB,MAAM,IACzB,iBAAgB,MAAM,MAAM,EAAE;AAEhC,oBAAgB,MAAM,IAAI,KAAK,MAAM;AACrC,WAAO;MAET,EAAE,CACH;GACH,MAAM,mCAA2D;IAC/D,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACP;GACD,MAAM,oBAMF,EAAE;AACN,QAAK,MAAM,iBAAiB,OAAO,KACjC,iCACD,CACC,KAAI,8BAA8B,eAChC,mBAAkB,iCAAiC,kBACjD,iCACE,8BAA8B,gBAC9B,KACD;GAGP,MAAM,cAAc,KAAK,2BAA2B,UAAU;AAC9D,OAAI,aAAa,YAAY,KAAA,GAAW;IACtC,MAAM,qBAA4D,EAAE;AACpE,SAAK,MAAM,CAAC,WAAW,oBAAoB,OAAO,QAChD,YAAY,QACb,CACC,KAAI,gBAAgB,WAAW,KAAA,EAE7B,oBAAmB,aAAa,iCADjB,KAAK,UAAU,gBAAgB,OAAO,EAGnD,KACD;IAGL,MAAM,aAAa,OAAO,KAAK,mBAAmB;AAClD,QAAI,WAAW,WAAW,EACxB,mBAAkB,OAAO,mBAAmB,WAAW;aAC9C,WAAW,SAAS,EAC7B,mBAAkB,OAAO,EACvB,OAAO,OAAO,OAAO,mBAAmB,EACzC;;GAGL,MAAM,iBACJ;IACE,MAAM,YAAY,sBAAsB,WAAW,MAAM,OAAO;IAChE,aAAa,UAAU,eAAe,UAAU,WAAW;IAC3D,YAAY;KACV,MAAM;KACN,YAAY;KAEZ,UAAU,OAAO,KAAK,kBAAkB;KACzC;IACF;AAEH,mBAAgB,KAAK,eAAe;GACpC,MAAM,WAAW,KAAK,WAAW,IAAI,SAAS,IAAI,IAC7C,KAAK,WAAW,IAAI,MAAM,GAAG,GAAG,GAChC,KAAK,WAAW;AACrB,iBAAc,eAAe,QAAQ;IACnC;IACA,KAAK,UAAU;IAChB;;;AAGL,QAAO;EACL;EACA,wBAAwB,OACtB,MAEA,aACA,YAIG;GACH,MAAM,EACJ,SAAS,eACT,QAAQ,cACR,GAAG,SACD,WAAW,EAAE;GACjB,MAAM,EAAE,QAAQ,QAAQ,cAAc;GACtC,MAAM,gBAAgB,YAAY,UAAU,EAAE;GAC9C,MAAM,iBAAiB,OAAO,KAAK,cAAc,CAAC,QAE/C,cAAmC,YAAY;AAC9C,QACE,cAAc,aAAa,MAC3B,cAAc,aAAa,QAC3B,cAAc,aAAa,KAAA,EAE3B,cAAa,WAAW,cAAc;AAExC,WAAO;MAET,EAAE,CACH;GACD,MAAM,cAAc,IAAI,gBAAgB;IACtC,GAAG;IACH,GAAG;IACJ,CAAC,CAAC,UAAU;GACb,MAAM,aAAa,YAAY;GAC/B,MAAM,eACJ,UAAU,KAAK,WAAW,IACzB,YAAY,SAAS,IAAI,gBAAgB;GAC5C,MAAM,UAAkC,EAAE;GAC1C,IAAI;AACJ,OAAI,YAAY,SAAS,KAAA,GAAW;IAClC,IAAI,cAAc;AAClB,QAAI,OAAO,YAAY,SAAS,UAAU;AACxC,SAAI,OAAO,YAAY,SAAS,SAC9B,eAAc;AAEhB,YAAO,KAAK,UAAU,YAAY,KAAK;UAEvC,QAAO,YAAY;AAErB,YAAQ,kBAAkB;;GAE5B,MAAM,WAAW,MAAM,MAAM,cAAc;IACzC,GAAG;IACH;IACA,SAAS;KACP,GAAG;KACH,GAAG,YAAY;KACf,GAAG;KACJ;IACD;IACA,GAAG;IACJ,CAAC;GACF,IAAI;AACJ,OAAI,SAAS,SAAS,OAAO,SAAS,SAAS,IAC7C,UAAS,GAAG,SAAS,OAAO,IAC1B,SAAS,WACV,OAAO,KAAK,eAAe,KAAK,UAAU,YAAY;OAEvD,UAAS,MAAM,SAAS,MAAM;AAEhC,UAAO;;EAEV;;;;;AAeH,IAAM,qBAAN,cAAiC,UAAU;CACzC,OAAO,UAAU;AACf,SAAO;;CAGT;CAEA,WAAW;CAEX,YAAY;CAEZ,YAAY,QAA8D;AACxE,SAAO;AACP,OAAK,gBAAgB,OAAO;;CAG9B,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAa;AACf,SAAO,CAAC,KAAK,UAAU;;CAGzB,aAAa;AACX,SAAO;;;CAIT,MAAM,MACJ,QACA,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,UAAU;;;;;;;;;AAuBzC,eAAsB,mBACpB,MACA,UAA+B,EAAE,EACjC;CACA,IAAI;AACJ,KAAI,OAAO,SAAS,SAClB,KAAI;AACF,kBAAgB,MAAM,YAAY,QAAQ,KAAK;SACzC;AACN,MAAI;AACF,mBAAgB,YAAY,WAAW,KAAK;UACtC;AACN,SAAM,IAAI,MAAM,oCAAoC,KAAK,GAAG;;;KAIhE,iBAAgB,YAAY,WAAW,KAAK;CAE9C,MAAM,EAAE,iBAAiB,2BACvB,oCAAoC,cAAc;AACpD,KAAI,2BAA2B,KAAA,EAC7B,OAAM,IAAI,MACR,+DACD;AAGH,KAAI,CAAC,QAAQ,IACX,OAAM,IAAI,MAAM,2BAA2B;CAG7C,MAAM,EACJ,MAAM,QAAQ,KACd,SAAS,mBAAmB,aAAa,CACvC,2BAA2B,aACzB,mEACD,CACF,CAAC,EACF,eAAe,IAAI,mBAAmB,EACpC,eAAe,OAAO,MAAM,SAC1B,uBAAuB,MAAM,MAAM;EACjC,SAAS,QAAQ;EACjB,QAAQ,QAAQ;EACjB,CAAC,EACL,CAAC,EACF,iBAAiB,EAAE,EACnB,SACA,GAAG,SACD;CACJ,MAAM,cAAc,IAAI,SAAS;EAC/B;EACA;EACA,cAAc,IAAI,0BAA0B,EAAE,UAAU,OAAO,CAAC;EAChE,WAAW;EACX,WAAW,EAAE,WAAW,iBAAiB;EACzC,GAAG;EACJ,CAAC;AACF,QAAO,IAAI,gBAAgB;EACzB,QAAQ,CAAC,aAAa,aAAa;EACnC,iBAAiB,CAAC,WAAW;EAC7B,gBAAgB,YAAY;EAC5B;EACA,GAAG;EACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"openapi.js","names":[],"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 // oxlint-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 * Type representing the composition types of a schema.\n */\ntype CompositionType = \"anyOf\" | \"allOf\" | \"oneOf\";\n\n/**\n * Gets the composition type of a schema if it exists.\n * @param schema\n * @returns The composition type of the schema if it exists.\n */\nfunction getCompositionType(\n schema: OpenAPIV3_1.SchemaObject\n): CompositionType | undefined {\n if (schema.anyOf !== undefined) {\n return \"anyOf\";\n }\n if (schema.allOf !== undefined) {\n return \"allOf\";\n }\n if (schema.oneOf !== undefined) {\n return \"oneOf\";\n }\n return undefined;\n}\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 const compositionType = getCompositionType(schema);\n if (compositionType !== undefined && schema[compositionType] !== undefined) {\n return {\n [compositionType]: schema[compositionType].map((s) =>\n convertOpenAPISchemaToJSONSchema(spec.getSchema(s), spec)\n ),\n } as JsonSchema7Type;\n }\n\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 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\n if (schema.type === \"array\") {\n const openAPIItems = spec.getSchema(schema.items ?? {});\n return {\n type: \"array\",\n items: convertOpenAPISchemaToJSONSchema(openAPIItems, 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 // oxlint-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 // oxlint-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 // oxlint-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":"openai_moderation.cjs","names":["BaseChain","OpenAIClient","AsyncCaller"],"sources":["../../src/chains/openai_moderation.ts"],"sourcesContent":["import { type ClientOptions, OpenAIClient } from \"@langchain/openai\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n AsyncCaller,\n AsyncCallerParams,\n} from \"@langchain/core/utils/async_caller\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\n\n/**\n * Interface for the input parameters of the OpenAIModerationChain class.\n */\nexport interface OpenAIModerationChainInput\n extends ChainInputs, AsyncCallerParams {\n apiKey?: string;\n /** @deprecated Use \"apiKey\" instead. */\n openAIApiKey?: string;\n openAIOrganization?: string;\n throwError?: boolean;\n configuration?: ClientOptions;\n}\n\n/**\n * Class representing a chain for moderating text using the OpenAI\n * Moderation API. It extends the BaseChain class and implements the\n * OpenAIModerationChainInput interface.\n * @example\n * ```typescript\n * const moderation = new OpenAIModerationChain({ throwError: true });\n *\n * const badString = \"Bad naughty words from user\";\n *\n * try {\n * const { output: moderatedContent, results } = await moderation.call({\n * input: badString,\n * });\n *\n * if (results[0].category_scores[\"harassment/threatening\"] > 0.01) {\n * throw new Error(\"Harassment detected!\");\n * }\n *\n * const model = new OpenAI({ temperature: 0 });\n * const promptTemplate = \"Hello, how are you today {person}?\";\n * const prompt = new PromptTemplate({\n * template: promptTemplate,\n * inputVariables: [\"person\"],\n * });\n * const chain = new LLMChain({ llm: model, prompt });\n * const response = await chain.call({ person: moderatedContent });\n * console.log({ response });\n * } catch (error) {\n * console.error(\"Naughty words detected!\");\n * }\n * ```\n */\nexport class OpenAIModerationChain\n extends BaseChain\n implements OpenAIModerationChainInput\n{\n static lc_name() {\n return \"OpenAIModerationChain\";\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n openAIApiKey: \"OPENAI_API_KEY\",\n };\n }\n\n inputKey = \"input\";\n\n outputKey = \"output\";\n\n openAIApiKey?: string;\n\n openAIOrganization?: string;\n\n clientConfig: ClientOptions;\n\n client: OpenAIClient;\n\n throwError: boolean;\n\n caller: AsyncCaller;\n\n constructor(fields?: OpenAIModerationChainInput) {\n super(fields);\n this.throwError = fields?.throwError ?? false;\n this.openAIApiKey =\n fields?.apiKey ??\n fields?.openAIApiKey ??\n getEnvironmentVariable(\"OPENAI_API_KEY\");\n\n if (!this.openAIApiKey) {\n throw new Error(\"OpenAI API key not found\");\n }\n\n this.openAIOrganization = fields?.openAIOrganization;\n\n this.clientConfig = {\n ...fields?.configuration,\n apiKey: this.openAIApiKey,\n organization: this.openAIOrganization,\n };\n\n this.client = new OpenAIClient(this.clientConfig);\n\n this.caller = new AsyncCaller(fields ?? {});\n }\n\n _moderate(text: string, results: OpenAIClient.Moderation): string {\n if (results.flagged) {\n const errorStr = \"Text was found that violates OpenAI's content policy.\";\n if (this.throwError) {\n throw new Error(errorStr);\n } else {\n return errorStr;\n }\n }\n return text;\n }\n\n async _call(values: ChainValues): Promise<ChainValues> {\n const text = values[this.inputKey];\n const moderationRequest: OpenAIClient.ModerationCreateParams = {\n input: text,\n };\n let mod;\n try {\n mod = await this.caller.call(() =>\n this.client.moderations.create(moderationRequest)\n );\n } catch (error) {\n //
|
|
1
|
+
{"version":3,"file":"openai_moderation.cjs","names":["BaseChain","OpenAIClient","AsyncCaller"],"sources":["../../src/chains/openai_moderation.ts"],"sourcesContent":["import { type ClientOptions, OpenAIClient } from \"@langchain/openai\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n AsyncCaller,\n AsyncCallerParams,\n} from \"@langchain/core/utils/async_caller\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\n\n/**\n * Interface for the input parameters of the OpenAIModerationChain class.\n */\nexport interface OpenAIModerationChainInput\n extends ChainInputs, AsyncCallerParams {\n apiKey?: string;\n /** @deprecated Use \"apiKey\" instead. */\n openAIApiKey?: string;\n openAIOrganization?: string;\n throwError?: boolean;\n configuration?: ClientOptions;\n}\n\n/**\n * Class representing a chain for moderating text using the OpenAI\n * Moderation API. It extends the BaseChain class and implements the\n * OpenAIModerationChainInput interface.\n * @example\n * ```typescript\n * const moderation = new OpenAIModerationChain({ throwError: true });\n *\n * const badString = \"Bad naughty words from user\";\n *\n * try {\n * const { output: moderatedContent, results } = await moderation.call({\n * input: badString,\n * });\n *\n * if (results[0].category_scores[\"harassment/threatening\"] > 0.01) {\n * throw new Error(\"Harassment detected!\");\n * }\n *\n * const model = new OpenAI({ temperature: 0 });\n * const promptTemplate = \"Hello, how are you today {person}?\";\n * const prompt = new PromptTemplate({\n * template: promptTemplate,\n * inputVariables: [\"person\"],\n * });\n * const chain = new LLMChain({ llm: model, prompt });\n * const response = await chain.call({ person: moderatedContent });\n * console.log({ response });\n * } catch (error) {\n * console.error(\"Naughty words detected!\");\n * }\n * ```\n */\nexport class OpenAIModerationChain\n extends BaseChain\n implements OpenAIModerationChainInput\n{\n static lc_name() {\n return \"OpenAIModerationChain\";\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n openAIApiKey: \"OPENAI_API_KEY\",\n };\n }\n\n inputKey = \"input\";\n\n outputKey = \"output\";\n\n openAIApiKey?: string;\n\n openAIOrganization?: string;\n\n clientConfig: ClientOptions;\n\n client: OpenAIClient;\n\n throwError: boolean;\n\n caller: AsyncCaller;\n\n constructor(fields?: OpenAIModerationChainInput) {\n super(fields);\n this.throwError = fields?.throwError ?? false;\n this.openAIApiKey =\n fields?.apiKey ??\n fields?.openAIApiKey ??\n getEnvironmentVariable(\"OPENAI_API_KEY\");\n\n if (!this.openAIApiKey) {\n throw new Error(\"OpenAI API key not found\");\n }\n\n this.openAIOrganization = fields?.openAIOrganization;\n\n this.clientConfig = {\n ...fields?.configuration,\n apiKey: this.openAIApiKey,\n organization: this.openAIOrganization,\n };\n\n this.client = new OpenAIClient(this.clientConfig);\n\n this.caller = new AsyncCaller(fields ?? {});\n }\n\n _moderate(text: string, results: OpenAIClient.Moderation): string {\n if (results.flagged) {\n const errorStr = \"Text was found that violates OpenAI's content policy.\";\n if (this.throwError) {\n throw new Error(errorStr);\n } else {\n return errorStr;\n }\n }\n return text;\n }\n\n async _call(values: ChainValues): Promise<ChainValues> {\n const text = values[this.inputKey];\n const moderationRequest: OpenAIClient.ModerationCreateParams = {\n input: text,\n };\n let mod;\n try {\n mod = await this.caller.call(() =>\n this.client.moderations.create(moderationRequest)\n );\n } catch (error) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (error instanceof Error) {\n throw error;\n } else {\n throw new Error(error as string);\n }\n }\n const output = this._moderate(text, mod.results[0]);\n return {\n [this.outputKey]: output,\n results: mod.results,\n };\n }\n\n _chainType() {\n return \"moderation_chain\";\n }\n\n get inputKeys(): string[] {\n return [this.inputKey];\n }\n\n get outputKeys(): string[] {\n return [this.outputKey];\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,IAAa,wBAAb,cACUA,aAAAA,UAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,aAAoD;AACtD,SAAO,EACL,cAAc,kBACf;;CAGH,WAAW;CAEX,YAAY;CAEZ;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,QAAqC;AAC/C,QAAM,OAAO;AACb,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,eACH,QAAQ,UACR,QAAQ,iBAAA,GAAA,0BAAA,wBACe,iBAAiB;AAE1C,MAAI,CAAC,KAAK,aACR,OAAM,IAAI,MAAM,2BAA2B;AAG7C,OAAK,qBAAqB,QAAQ;AAElC,OAAK,eAAe;GAClB,GAAG,QAAQ;GACX,QAAQ,KAAK;GACb,cAAc,KAAK;GACpB;AAED,OAAK,SAAS,IAAIC,kBAAAA,aAAa,KAAK,aAAa;AAEjD,OAAK,SAAS,IAAIC,mCAAAA,YAAY,UAAU,EAAE,CAAC;;CAG7C,UAAU,MAAc,SAA0C;AAChE,MAAI,QAAQ,SAAS;GACnB,MAAM,WAAW;AACjB,OAAI,KAAK,WACP,OAAM,IAAI,MAAM,SAAS;OAEzB,QAAO;;AAGX,SAAO;;CAGT,MAAM,MAAM,QAA2C;EACrD,MAAM,OAAO,OAAO,KAAK;EACzB,MAAM,oBAAyD,EAC7D,OAAO,MACR;EACD,IAAI;AACJ,MAAI;AACF,SAAM,MAAM,KAAK,OAAO,WACtB,KAAK,OAAO,YAAY,OAAO,kBAAkB,CAClD;WACM,OAAO;AAEd,OAAI,iBAAiB,MACnB,OAAM;OAEN,OAAM,IAAI,MAAM,MAAgB;;EAGpC,MAAM,SAAS,KAAK,UAAU,MAAM,IAAI,QAAQ,GAAG;AACnD,SAAO;IACJ,KAAK,YAAY;GAClB,SAAS,IAAI;GACd;;CAGH,aAAa;AACX,SAAO;;CAGT,IAAI,YAAsB;AACxB,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAuB;AACzB,SAAO,CAAC,KAAK,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai_moderation.js","names":[],"sources":["../../src/chains/openai_moderation.ts"],"sourcesContent":["import { type ClientOptions, OpenAIClient } from \"@langchain/openai\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n AsyncCaller,\n AsyncCallerParams,\n} from \"@langchain/core/utils/async_caller\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\n\n/**\n * Interface for the input parameters of the OpenAIModerationChain class.\n */\nexport interface OpenAIModerationChainInput\n extends ChainInputs, AsyncCallerParams {\n apiKey?: string;\n /** @deprecated Use \"apiKey\" instead. */\n openAIApiKey?: string;\n openAIOrganization?: string;\n throwError?: boolean;\n configuration?: ClientOptions;\n}\n\n/**\n * Class representing a chain for moderating text using the OpenAI\n * Moderation API. It extends the BaseChain class and implements the\n * OpenAIModerationChainInput interface.\n * @example\n * ```typescript\n * const moderation = new OpenAIModerationChain({ throwError: true });\n *\n * const badString = \"Bad naughty words from user\";\n *\n * try {\n * const { output: moderatedContent, results } = await moderation.call({\n * input: badString,\n * });\n *\n * if (results[0].category_scores[\"harassment/threatening\"] > 0.01) {\n * throw new Error(\"Harassment detected!\");\n * }\n *\n * const model = new OpenAI({ temperature: 0 });\n * const promptTemplate = \"Hello, how are you today {person}?\";\n * const prompt = new PromptTemplate({\n * template: promptTemplate,\n * inputVariables: [\"person\"],\n * });\n * const chain = new LLMChain({ llm: model, prompt });\n * const response = await chain.call({ person: moderatedContent });\n * console.log({ response });\n * } catch (error) {\n * console.error(\"Naughty words detected!\");\n * }\n * ```\n */\nexport class OpenAIModerationChain\n extends BaseChain\n implements OpenAIModerationChainInput\n{\n static lc_name() {\n return \"OpenAIModerationChain\";\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n openAIApiKey: \"OPENAI_API_KEY\",\n };\n }\n\n inputKey = \"input\";\n\n outputKey = \"output\";\n\n openAIApiKey?: string;\n\n openAIOrganization?: string;\n\n clientConfig: ClientOptions;\n\n client: OpenAIClient;\n\n throwError: boolean;\n\n caller: AsyncCaller;\n\n constructor(fields?: OpenAIModerationChainInput) {\n super(fields);\n this.throwError = fields?.throwError ?? false;\n this.openAIApiKey =\n fields?.apiKey ??\n fields?.openAIApiKey ??\n getEnvironmentVariable(\"OPENAI_API_KEY\");\n\n if (!this.openAIApiKey) {\n throw new Error(\"OpenAI API key not found\");\n }\n\n this.openAIOrganization = fields?.openAIOrganization;\n\n this.clientConfig = {\n ...fields?.configuration,\n apiKey: this.openAIApiKey,\n organization: this.openAIOrganization,\n };\n\n this.client = new OpenAIClient(this.clientConfig);\n\n this.caller = new AsyncCaller(fields ?? {});\n }\n\n _moderate(text: string, results: OpenAIClient.Moderation): string {\n if (results.flagged) {\n const errorStr = \"Text was found that violates OpenAI's content policy.\";\n if (this.throwError) {\n throw new Error(errorStr);\n } else {\n return errorStr;\n }\n }\n return text;\n }\n\n async _call(values: ChainValues): Promise<ChainValues> {\n const text = values[this.inputKey];\n const moderationRequest: OpenAIClient.ModerationCreateParams = {\n input: text,\n };\n let mod;\n try {\n mod = await this.caller.call(() =>\n this.client.moderations.create(moderationRequest)\n );\n } catch (error) {\n //
|
|
1
|
+
{"version":3,"file":"openai_moderation.js","names":[],"sources":["../../src/chains/openai_moderation.ts"],"sourcesContent":["import { type ClientOptions, OpenAIClient } from \"@langchain/openai\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n AsyncCaller,\n AsyncCallerParams,\n} from \"@langchain/core/utils/async_caller\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\n\n/**\n * Interface for the input parameters of the OpenAIModerationChain class.\n */\nexport interface OpenAIModerationChainInput\n extends ChainInputs, AsyncCallerParams {\n apiKey?: string;\n /** @deprecated Use \"apiKey\" instead. */\n openAIApiKey?: string;\n openAIOrganization?: string;\n throwError?: boolean;\n configuration?: ClientOptions;\n}\n\n/**\n * Class representing a chain for moderating text using the OpenAI\n * Moderation API. It extends the BaseChain class and implements the\n * OpenAIModerationChainInput interface.\n * @example\n * ```typescript\n * const moderation = new OpenAIModerationChain({ throwError: true });\n *\n * const badString = \"Bad naughty words from user\";\n *\n * try {\n * const { output: moderatedContent, results } = await moderation.call({\n * input: badString,\n * });\n *\n * if (results[0].category_scores[\"harassment/threatening\"] > 0.01) {\n * throw new Error(\"Harassment detected!\");\n * }\n *\n * const model = new OpenAI({ temperature: 0 });\n * const promptTemplate = \"Hello, how are you today {person}?\";\n * const prompt = new PromptTemplate({\n * template: promptTemplate,\n * inputVariables: [\"person\"],\n * });\n * const chain = new LLMChain({ llm: model, prompt });\n * const response = await chain.call({ person: moderatedContent });\n * console.log({ response });\n * } catch (error) {\n * console.error(\"Naughty words detected!\");\n * }\n * ```\n */\nexport class OpenAIModerationChain\n extends BaseChain\n implements OpenAIModerationChainInput\n{\n static lc_name() {\n return \"OpenAIModerationChain\";\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n openAIApiKey: \"OPENAI_API_KEY\",\n };\n }\n\n inputKey = \"input\";\n\n outputKey = \"output\";\n\n openAIApiKey?: string;\n\n openAIOrganization?: string;\n\n clientConfig: ClientOptions;\n\n client: OpenAIClient;\n\n throwError: boolean;\n\n caller: AsyncCaller;\n\n constructor(fields?: OpenAIModerationChainInput) {\n super(fields);\n this.throwError = fields?.throwError ?? false;\n this.openAIApiKey =\n fields?.apiKey ??\n fields?.openAIApiKey ??\n getEnvironmentVariable(\"OPENAI_API_KEY\");\n\n if (!this.openAIApiKey) {\n throw new Error(\"OpenAI API key not found\");\n }\n\n this.openAIOrganization = fields?.openAIOrganization;\n\n this.clientConfig = {\n ...fields?.configuration,\n apiKey: this.openAIApiKey,\n organization: this.openAIOrganization,\n };\n\n this.client = new OpenAIClient(this.clientConfig);\n\n this.caller = new AsyncCaller(fields ?? {});\n }\n\n _moderate(text: string, results: OpenAIClient.Moderation): string {\n if (results.flagged) {\n const errorStr = \"Text was found that violates OpenAI's content policy.\";\n if (this.throwError) {\n throw new Error(errorStr);\n } else {\n return errorStr;\n }\n }\n return text;\n }\n\n async _call(values: ChainValues): Promise<ChainValues> {\n const text = values[this.inputKey];\n const moderationRequest: OpenAIClient.ModerationCreateParams = {\n input: text,\n };\n let mod;\n try {\n mod = await this.caller.call(() =>\n this.client.moderations.create(moderationRequest)\n );\n } catch (error) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (error instanceof Error) {\n throw error;\n } else {\n throw new Error(error as string);\n }\n }\n const output = this._moderate(text, mod.results[0]);\n return {\n [this.outputKey]: output,\n results: mod.results,\n };\n }\n\n _chainType() {\n return \"moderation_chain\";\n }\n\n get inputKeys(): string[] {\n return [this.inputKey];\n }\n\n get outputKeys(): string[] {\n return [this.outputKey];\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,IAAa,wBAAb,cACU,UAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,aAAoD;AACtD,SAAO,EACL,cAAc,kBACf;;CAGH,WAAW;CAEX,YAAY;CAEZ;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,QAAqC;AAC/C,QAAM,OAAO;AACb,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,eACH,QAAQ,UACR,QAAQ,gBACR,uBAAuB,iBAAiB;AAE1C,MAAI,CAAC,KAAK,aACR,OAAM,IAAI,MAAM,2BAA2B;AAG7C,OAAK,qBAAqB,QAAQ;AAElC,OAAK,eAAe;GAClB,GAAG,QAAQ;GACX,QAAQ,KAAK;GACb,cAAc,KAAK;GACpB;AAED,OAAK,SAAS,IAAI,aAAa,KAAK,aAAa;AAEjD,OAAK,SAAS,IAAI,YAAY,UAAU,EAAE,CAAC;;CAG7C,UAAU,MAAc,SAA0C;AAChE,MAAI,QAAQ,SAAS;GACnB,MAAM,WAAW;AACjB,OAAI,KAAK,WACP,OAAM,IAAI,MAAM,SAAS;OAEzB,QAAO;;AAGX,SAAO;;CAGT,MAAM,MAAM,QAA2C;EACrD,MAAM,OAAO,OAAO,KAAK;EACzB,MAAM,oBAAyD,EAC7D,OAAO,MACR;EACD,IAAI;AACJ,MAAI;AACF,SAAM,MAAM,KAAK,OAAO,WACtB,KAAK,OAAO,YAAY,OAAO,kBAAkB,CAClD;WACM,OAAO;AAEd,OAAI,iBAAiB,MACnB,OAAM;OAEN,OAAM,IAAI,MAAM,MAAgB;;EAGpC,MAAM,SAAS,KAAK,UAAU,MAAM,IAAI,QAAQ,GAAG;AACnD,SAAO;IACJ,KAAK,YAAY;GAClB,SAAS,IAAI;GACd;;CAGH,aAAa;AACX,SAAO;;CAGT,IAAI,YAAsB;AACxB,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAuB;AACzB,SAAO,CAAC,KAAK,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["AsymmetricStructuredOutputParser","QueryTransformer","StructuredQuery","DEFAULT_EXAMPLES","Comparators","Operators","DEFAULT_PREFIX","DEFAULT_SCHEMA","FewShotPromptTemplate","EXAMPLE_PROMPT","DEFAULT_SUFFIX"],"sources":["../../../src/chains/query_constructor/index.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport {\n Example,\n interpolateFString,\n FewShotPromptTemplate,\n} from \"@langchain/core/prompts\";\nimport {\n InferInteropZodOutput,\n InputValues,\n} from \"@langchain/core/utils/types\";\nimport {\n Comparator,\n Comparators,\n Operator,\n Operators,\n StructuredQuery,\n} from \"@langchain/core/structured_query\";\nimport { Runnable, RunnableConfig } from \"@langchain/core/runnables\";\nimport { QueryTransformer, TraverseType } from \"./parser.js\";\nimport {\n DEFAULT_EXAMPLES,\n DEFAULT_PREFIX,\n DEFAULT_SCHEMA,\n DEFAULT_SUFFIX,\n EXAMPLE_PROMPT,\n} from \"./prompt.js\";\nimport { AsymmetricStructuredOutputParser } from \"../../output_parsers/structured.js\";\n\n/**\n * A simple data structure that holds information about an attribute. It\n * is typically used to provide metadata about attributes in other classes\n * or data structures within the LangChain framework.\n */\nexport class AttributeInfo {\n constructor(\n public name: string,\n public type: string,\n public description: string\n ) {}\n}\n\nexport { QueryTransformer, type TraverseType };\nexport {\n DEFAULT_EXAMPLES,\n DEFAULT_PREFIX,\n DEFAULT_SCHEMA,\n DEFAULT_SUFFIX,\n EXAMPLE_PROMPT,\n};\n\nconst queryInputSchema = /* #__PURE__ */ z.object({\n query: /* #__PURE__ */ z\n .string()\n .describe(\"text string to compare to document contents\"),\n filter: /* #__PURE__ */ z\n .string()\n .optional()\n .describe(\"logical condition statement for filtering documents\"),\n});\n\n/**\n * A class that extends AsymmetricStructuredOutputParser to parse\n * structured query output.\n */\nexport class StructuredQueryOutputParser extends AsymmetricStructuredOutputParser<\n typeof queryInputSchema,\n StructuredQuery\n> {\n lc_namespace = [\"langchain\", \"chains\", \"query_constructor\"];\n\n queryTransformer: QueryTransformer;\n\n constructor(fields: {\n allowedComparators: Comparator[];\n allowedOperators: Operator[];\n }) {\n super({ ...fields, inputSchema: queryInputSchema });\n\n const { allowedComparators, allowedOperators } = fields;\n this.queryTransformer = new QueryTransformer(\n allowedComparators,\n allowedOperators\n );\n }\n\n /**\n * Processes the output of a structured query.\n * @param query The query string.\n * @param filter The filter condition.\n * @returns A Promise that resolves to a StructuredQuery instance.\n */\n async outputProcessor({\n query,\n filter,\n }: InferInteropZodOutput<typeof queryInputSchema>): Promise<StructuredQuery> {\n let myQuery = query;\n if (myQuery.length === 0) {\n myQuery = \" \";\n }\n if (filter === \"NO_FILTER\" || filter === undefined) {\n return new StructuredQuery(query);\n } else {\n const parsedFilter = await this.queryTransformer.parse(filter);\n return new StructuredQuery(query, parsedFilter);\n }\n }\n\n /**\n * Creates a new StructuredQueryOutputParser instance from the provided\n * components.\n * @param allowedComparators An array of allowed Comparator instances.\n * @param allowedOperators An array of allowed Operator instances.\n * @returns A new StructuredQueryOutputParser instance.\n */\n static fromComponents(\n allowedComparators: Comparator[] = [],\n allowedOperators: Operator[] = []\n ) {\n return new StructuredQueryOutputParser({\n allowedComparators,\n allowedOperators,\n });\n }\n}\n\nexport function formatAttributeInfo(info: AttributeInfo[]) {\n const infoObj = info.reduce(\n (acc, attr) => {\n acc[attr.name] = {\n type: attr.type,\n description: attr.description,\n };\n return acc;\n },\n {} as { [name: string]: { type: string; description: string } }\n );\n\n return JSON.stringify(infoObj, null, 2)\n .replaceAll(\"{\", \"{{\")\n .replaceAll(\"}\", \"}}\");\n}\n\nconst defaultExample = DEFAULT_EXAMPLES.map((EXAMPLE) => EXAMPLE as Example);\n\nfunction _getPrompt(\n documentContents: string,\n attributeInfo: AttributeInfo[],\n allowedComparators?: Comparator[],\n allowedOperators?: Operator[],\n examples: InputValues[] = defaultExample\n) {\n const myAllowedComparators: Comparator[] =\n allowedComparators ?? Object.values(Comparators);\n const myAllowedOperators: Operator[] =\n allowedOperators ?? Object.values(Operators);\n const attributeJSON = formatAttributeInfo(attributeInfo);\n const schema = interpolateFString(DEFAULT_SCHEMA, {\n allowed_comparators: myAllowedComparators.join(\" | \"),\n allowed_operators: myAllowedOperators.join(\" | \"),\n });\n const prefix = interpolateFString(DEFAULT_PREFIX, {\n schema,\n });\n const suffix = interpolateFString(DEFAULT_SUFFIX, {\n i: examples.length + 1,\n content: documentContents,\n attributes: attributeJSON,\n });\n\n const outputParser = StructuredQueryOutputParser.fromComponents(\n allowedComparators,\n allowedOperators\n );\n\n return new FewShotPromptTemplate({\n examples,\n examplePrompt: EXAMPLE_PROMPT,\n inputVariables: [\"query\"],\n suffix,\n prefix,\n outputParser,\n });\n}\n\n/**\n * A type that represents options for the query constructor chain.\n */\nexport type QueryConstructorRunnableOptions = {\n llm: BaseLanguageModelInterface;\n documentContents: string;\n attributeInfo: AttributeInfo[];\n examples?: InputValues[];\n allowedComparators?: Comparator[];\n allowedOperators?: Operator[];\n};\n\n/** @deprecated */\nexport type QueryConstructorChainOptions = QueryConstructorRunnableOptions;\n\nexport function loadQueryConstructorRunnable(\n opts: QueryConstructorRunnableOptions\n //
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["AsymmetricStructuredOutputParser","QueryTransformer","StructuredQuery","DEFAULT_EXAMPLES","Comparators","Operators","DEFAULT_PREFIX","DEFAULT_SCHEMA","FewShotPromptTemplate","EXAMPLE_PROMPT","DEFAULT_SUFFIX"],"sources":["../../../src/chains/query_constructor/index.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport {\n Example,\n interpolateFString,\n FewShotPromptTemplate,\n} from \"@langchain/core/prompts\";\nimport {\n InferInteropZodOutput,\n InputValues,\n} from \"@langchain/core/utils/types\";\nimport {\n Comparator,\n Comparators,\n Operator,\n Operators,\n StructuredQuery,\n} from \"@langchain/core/structured_query\";\nimport { Runnable, RunnableConfig } from \"@langchain/core/runnables\";\nimport { QueryTransformer, TraverseType } from \"./parser.js\";\nimport {\n DEFAULT_EXAMPLES,\n DEFAULT_PREFIX,\n DEFAULT_SCHEMA,\n DEFAULT_SUFFIX,\n EXAMPLE_PROMPT,\n} from \"./prompt.js\";\nimport { AsymmetricStructuredOutputParser } from \"../../output_parsers/structured.js\";\n\n/**\n * A simple data structure that holds information about an attribute. It\n * is typically used to provide metadata about attributes in other classes\n * or data structures within the LangChain framework.\n */\nexport class AttributeInfo {\n constructor(\n public name: string,\n public type: string,\n public description: string\n ) {}\n}\n\nexport { QueryTransformer, type TraverseType };\nexport {\n DEFAULT_EXAMPLES,\n DEFAULT_PREFIX,\n DEFAULT_SCHEMA,\n DEFAULT_SUFFIX,\n EXAMPLE_PROMPT,\n};\n\nconst queryInputSchema = /* #__PURE__ */ z.object({\n query: /* #__PURE__ */ z\n .string()\n .describe(\"text string to compare to document contents\"),\n filter: /* #__PURE__ */ z\n .string()\n .optional()\n .describe(\"logical condition statement for filtering documents\"),\n});\n\n/**\n * A class that extends AsymmetricStructuredOutputParser to parse\n * structured query output.\n */\nexport class StructuredQueryOutputParser extends AsymmetricStructuredOutputParser<\n typeof queryInputSchema,\n StructuredQuery\n> {\n lc_namespace = [\"langchain\", \"chains\", \"query_constructor\"];\n\n queryTransformer: QueryTransformer;\n\n constructor(fields: {\n allowedComparators: Comparator[];\n allowedOperators: Operator[];\n }) {\n super({ ...fields, inputSchema: queryInputSchema });\n\n const { allowedComparators, allowedOperators } = fields;\n this.queryTransformer = new QueryTransformer(\n allowedComparators,\n allowedOperators\n );\n }\n\n /**\n * Processes the output of a structured query.\n * @param query The query string.\n * @param filter The filter condition.\n * @returns A Promise that resolves to a StructuredQuery instance.\n */\n async outputProcessor({\n query,\n filter,\n }: InferInteropZodOutput<typeof queryInputSchema>): Promise<StructuredQuery> {\n let myQuery = query;\n if (myQuery.length === 0) {\n myQuery = \" \";\n }\n if (filter === \"NO_FILTER\" || filter === undefined) {\n return new StructuredQuery(query);\n } else {\n const parsedFilter = await this.queryTransformer.parse(filter);\n return new StructuredQuery(query, parsedFilter);\n }\n }\n\n /**\n * Creates a new StructuredQueryOutputParser instance from the provided\n * components.\n * @param allowedComparators An array of allowed Comparator instances.\n * @param allowedOperators An array of allowed Operator instances.\n * @returns A new StructuredQueryOutputParser instance.\n */\n static fromComponents(\n allowedComparators: Comparator[] = [],\n allowedOperators: Operator[] = []\n ) {\n return new StructuredQueryOutputParser({\n allowedComparators,\n allowedOperators,\n });\n }\n}\n\nexport function formatAttributeInfo(info: AttributeInfo[]) {\n const infoObj = info.reduce(\n (acc, attr) => {\n acc[attr.name] = {\n type: attr.type,\n description: attr.description,\n };\n return acc;\n },\n {} as { [name: string]: { type: string; description: string } }\n );\n\n return JSON.stringify(infoObj, null, 2)\n .replaceAll(\"{\", \"{{\")\n .replaceAll(\"}\", \"}}\");\n}\n\nconst defaultExample = DEFAULT_EXAMPLES.map((EXAMPLE) => EXAMPLE as Example);\n\nfunction _getPrompt(\n documentContents: string,\n attributeInfo: AttributeInfo[],\n allowedComparators?: Comparator[],\n allowedOperators?: Operator[],\n examples: InputValues[] = defaultExample\n) {\n const myAllowedComparators: Comparator[] =\n allowedComparators ?? Object.values(Comparators);\n const myAllowedOperators: Operator[] =\n allowedOperators ?? Object.values(Operators);\n const attributeJSON = formatAttributeInfo(attributeInfo);\n const schema = interpolateFString(DEFAULT_SCHEMA, {\n allowed_comparators: myAllowedComparators.join(\" | \"),\n allowed_operators: myAllowedOperators.join(\" | \"),\n });\n const prefix = interpolateFString(DEFAULT_PREFIX, {\n schema,\n });\n const suffix = interpolateFString(DEFAULT_SUFFIX, {\n i: examples.length + 1,\n content: documentContents,\n attributes: attributeJSON,\n });\n\n const outputParser = StructuredQueryOutputParser.fromComponents(\n allowedComparators,\n allowedOperators\n );\n\n return new FewShotPromptTemplate({\n examples,\n examplePrompt: EXAMPLE_PROMPT,\n inputVariables: [\"query\"],\n suffix,\n prefix,\n outputParser,\n });\n}\n\n/**\n * A type that represents options for the query constructor chain.\n */\nexport type QueryConstructorRunnableOptions = {\n llm: BaseLanguageModelInterface;\n documentContents: string;\n attributeInfo: AttributeInfo[];\n examples?: InputValues[];\n allowedComparators?: Comparator[];\n allowedOperators?: Operator[];\n};\n\n/** @deprecated */\nexport type QueryConstructorChainOptions = QueryConstructorRunnableOptions;\n\nexport function loadQueryConstructorRunnable(\n opts: QueryConstructorRunnableOptions\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n): Runnable<any, StructuredQuery, RunnableConfig<Record<string, any>>> {\n const prompt = _getPrompt(\n opts.documentContents,\n opts.attributeInfo,\n opts.allowedComparators,\n opts.allowedOperators,\n opts.examples\n );\n const outputParser = StructuredQueryOutputParser.fromComponents(\n opts.allowedComparators,\n opts.allowedOperators\n );\n return prompt.pipe(opts.llm).pipe(outputParser);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,IAAa,gBAAb,MAA2B;CACzB,YACE,MACA,MACA,aACA;AAHO,OAAA,OAAA;AACA,OAAA,OAAA;AACA,OAAA,cAAA;;;AAaX,MAAM,mBAAmC,uBAAA,EAAE,OAAO;CAChD,OAAuB,uBAAA,EACpB,QAAQ,CACR,SAAS,8CAA8C;CAC1D,QAAwB,uBAAA,EACrB,QAAQ,CACR,UAAU,CACV,SAAS,sDAAsD;CACnE,CAAC;;;;;AAMF,IAAa,8BAAb,MAAa,oCAAoCA,mBAAAA,iCAG/C;CACA,eAAe;EAAC;EAAa;EAAU;EAAoB;CAE3D;CAEA,YAAY,QAGT;AACD,QAAM;GAAE,GAAG;GAAQ,aAAa;GAAkB,CAAC;EAEnD,MAAM,EAAE,oBAAoB,qBAAqB;AACjD,OAAK,mBAAmB,IAAIC,eAAAA,iBAC1B,oBACA,iBACD;;;;;;;;CASH,MAAM,gBAAgB,EACpB,OACA,UAC2E;EAC3E,IAAI,UAAU;AACd,MAAI,QAAQ,WAAW,EACrB,WAAU;AAEZ,MAAI,WAAW,eAAe,WAAW,KAAA,EACvC,QAAO,IAAIC,iCAAAA,gBAAgB,MAAM;MAGjC,QAAO,IAAIA,iCAAAA,gBAAgB,OADN,MAAM,KAAK,iBAAiB,MAAM,OAAO,CACf;;;;;;;;;CAWnD,OAAO,eACL,qBAAmC,EAAE,EACrC,mBAA+B,EAAE,EACjC;AACA,SAAO,IAAI,4BAA4B;GACrC;GACA;GACD,CAAC;;;AAIN,SAAgB,oBAAoB,MAAuB;CACzD,MAAM,UAAU,KAAK,QAClB,KAAK,SAAS;AACb,MAAI,KAAK,QAAQ;GACf,MAAM,KAAK;GACX,aAAa,KAAK;GACnB;AACD,SAAO;IAET,EAAE,CACH;AAED,QAAO,KAAK,UAAU,SAAS,MAAM,EAAE,CACpC,WAAW,KAAK,KAAK,CACrB,WAAW,KAAK,KAAK;;AAG1B,MAAM,iBAAiBC,eAAAA,iBAAiB,KAAK,YAAY,QAAmB;AAE5E,SAAS,WACP,kBACA,eACA,oBACA,kBACA,WAA0B,gBAC1B;CACA,MAAM,uBACJ,sBAAsB,OAAO,OAAOC,iCAAAA,YAAY;CAClD,MAAM,qBACJ,oBAAoB,OAAO,OAAOC,iCAAAA,UAAU;CAC9C,MAAM,gBAAgB,oBAAoB,cAAc;CAKxD,MAAM,UAAA,GAAA,wBAAA,oBAA4BC,eAAAA,gBAAgB,EAChD,SAAA,GAAA,wBAAA,oBALgCC,eAAAA,gBAAgB;EAChD,qBAAqB,qBAAqB,KAAK,MAAM;EACrD,mBAAmB,mBAAmB,KAAK,MAAM;EAClD,CAAC,EAGD,CAAC;AAYF,QAAO,IAAIC,wBAAAA,sBAAsB;EAC/B;EACA,eAAeC,eAAAA;EACf,gBAAgB,CAAC,QAAQ;EACzB,SAAA,GAAA,wBAAA,oBAfgCC,eAAAA,gBAAgB;GAChD,GAAG,SAAS,SAAS;GACrB,SAAS;GACT,YAAY;GACb,CAAC;EAYA;EACA,cAXmB,4BAA4B,eAC/C,oBACA,iBACD;EASA,CAAC;;AAkBJ,SAAgB,6BACd,MAEqE;CACrE,MAAM,SAAS,WACb,KAAK,kBACL,KAAK,eACL,KAAK,oBACL,KAAK,kBACL,KAAK,SACN;CACD,MAAM,eAAe,4BAA4B,eAC/C,KAAK,oBACL,KAAK,iBACN;AACD,QAAO,OAAO,KAAK,KAAK,IAAI,CAAC,KAAK,aAAa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/chains/query_constructor/index.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport {\n Example,\n interpolateFString,\n FewShotPromptTemplate,\n} from \"@langchain/core/prompts\";\nimport {\n InferInteropZodOutput,\n InputValues,\n} from \"@langchain/core/utils/types\";\nimport {\n Comparator,\n Comparators,\n Operator,\n Operators,\n StructuredQuery,\n} from \"@langchain/core/structured_query\";\nimport { Runnable, RunnableConfig } from \"@langchain/core/runnables\";\nimport { QueryTransformer, TraverseType } from \"./parser.js\";\nimport {\n DEFAULT_EXAMPLES,\n DEFAULT_PREFIX,\n DEFAULT_SCHEMA,\n DEFAULT_SUFFIX,\n EXAMPLE_PROMPT,\n} from \"./prompt.js\";\nimport { AsymmetricStructuredOutputParser } from \"../../output_parsers/structured.js\";\n\n/**\n * A simple data structure that holds information about an attribute. It\n * is typically used to provide metadata about attributes in other classes\n * or data structures within the LangChain framework.\n */\nexport class AttributeInfo {\n constructor(\n public name: string,\n public type: string,\n public description: string\n ) {}\n}\n\nexport { QueryTransformer, type TraverseType };\nexport {\n DEFAULT_EXAMPLES,\n DEFAULT_PREFIX,\n DEFAULT_SCHEMA,\n DEFAULT_SUFFIX,\n EXAMPLE_PROMPT,\n};\n\nconst queryInputSchema = /* #__PURE__ */ z.object({\n query: /* #__PURE__ */ z\n .string()\n .describe(\"text string to compare to document contents\"),\n filter: /* #__PURE__ */ z\n .string()\n .optional()\n .describe(\"logical condition statement for filtering documents\"),\n});\n\n/**\n * A class that extends AsymmetricStructuredOutputParser to parse\n * structured query output.\n */\nexport class StructuredQueryOutputParser extends AsymmetricStructuredOutputParser<\n typeof queryInputSchema,\n StructuredQuery\n> {\n lc_namespace = [\"langchain\", \"chains\", \"query_constructor\"];\n\n queryTransformer: QueryTransformer;\n\n constructor(fields: {\n allowedComparators: Comparator[];\n allowedOperators: Operator[];\n }) {\n super({ ...fields, inputSchema: queryInputSchema });\n\n const { allowedComparators, allowedOperators } = fields;\n this.queryTransformer = new QueryTransformer(\n allowedComparators,\n allowedOperators\n );\n }\n\n /**\n * Processes the output of a structured query.\n * @param query The query string.\n * @param filter The filter condition.\n * @returns A Promise that resolves to a StructuredQuery instance.\n */\n async outputProcessor({\n query,\n filter,\n }: InferInteropZodOutput<typeof queryInputSchema>): Promise<StructuredQuery> {\n let myQuery = query;\n if (myQuery.length === 0) {\n myQuery = \" \";\n }\n if (filter === \"NO_FILTER\" || filter === undefined) {\n return new StructuredQuery(query);\n } else {\n const parsedFilter = await this.queryTransformer.parse(filter);\n return new StructuredQuery(query, parsedFilter);\n }\n }\n\n /**\n * Creates a new StructuredQueryOutputParser instance from the provided\n * components.\n * @param allowedComparators An array of allowed Comparator instances.\n * @param allowedOperators An array of allowed Operator instances.\n * @returns A new StructuredQueryOutputParser instance.\n */\n static fromComponents(\n allowedComparators: Comparator[] = [],\n allowedOperators: Operator[] = []\n ) {\n return new StructuredQueryOutputParser({\n allowedComparators,\n allowedOperators,\n });\n }\n}\n\nexport function formatAttributeInfo(info: AttributeInfo[]) {\n const infoObj = info.reduce(\n (acc, attr) => {\n acc[attr.name] = {\n type: attr.type,\n description: attr.description,\n };\n return acc;\n },\n {} as { [name: string]: { type: string; description: string } }\n );\n\n return JSON.stringify(infoObj, null, 2)\n .replaceAll(\"{\", \"{{\")\n .replaceAll(\"}\", \"}}\");\n}\n\nconst defaultExample = DEFAULT_EXAMPLES.map((EXAMPLE) => EXAMPLE as Example);\n\nfunction _getPrompt(\n documentContents: string,\n attributeInfo: AttributeInfo[],\n allowedComparators?: Comparator[],\n allowedOperators?: Operator[],\n examples: InputValues[] = defaultExample\n) {\n const myAllowedComparators: Comparator[] =\n allowedComparators ?? Object.values(Comparators);\n const myAllowedOperators: Operator[] =\n allowedOperators ?? Object.values(Operators);\n const attributeJSON = formatAttributeInfo(attributeInfo);\n const schema = interpolateFString(DEFAULT_SCHEMA, {\n allowed_comparators: myAllowedComparators.join(\" | \"),\n allowed_operators: myAllowedOperators.join(\" | \"),\n });\n const prefix = interpolateFString(DEFAULT_PREFIX, {\n schema,\n });\n const suffix = interpolateFString(DEFAULT_SUFFIX, {\n i: examples.length + 1,\n content: documentContents,\n attributes: attributeJSON,\n });\n\n const outputParser = StructuredQueryOutputParser.fromComponents(\n allowedComparators,\n allowedOperators\n );\n\n return new FewShotPromptTemplate({\n examples,\n examplePrompt: EXAMPLE_PROMPT,\n inputVariables: [\"query\"],\n suffix,\n prefix,\n outputParser,\n });\n}\n\n/**\n * A type that represents options for the query constructor chain.\n */\nexport type QueryConstructorRunnableOptions = {\n llm: BaseLanguageModelInterface;\n documentContents: string;\n attributeInfo: AttributeInfo[];\n examples?: InputValues[];\n allowedComparators?: Comparator[];\n allowedOperators?: Operator[];\n};\n\n/** @deprecated */\nexport type QueryConstructorChainOptions = QueryConstructorRunnableOptions;\n\nexport function loadQueryConstructorRunnable(\n opts: QueryConstructorRunnableOptions\n //
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/chains/query_constructor/index.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport {\n Example,\n interpolateFString,\n FewShotPromptTemplate,\n} from \"@langchain/core/prompts\";\nimport {\n InferInteropZodOutput,\n InputValues,\n} from \"@langchain/core/utils/types\";\nimport {\n Comparator,\n Comparators,\n Operator,\n Operators,\n StructuredQuery,\n} from \"@langchain/core/structured_query\";\nimport { Runnable, RunnableConfig } from \"@langchain/core/runnables\";\nimport { QueryTransformer, TraverseType } from \"./parser.js\";\nimport {\n DEFAULT_EXAMPLES,\n DEFAULT_PREFIX,\n DEFAULT_SCHEMA,\n DEFAULT_SUFFIX,\n EXAMPLE_PROMPT,\n} from \"./prompt.js\";\nimport { AsymmetricStructuredOutputParser } from \"../../output_parsers/structured.js\";\n\n/**\n * A simple data structure that holds information about an attribute. It\n * is typically used to provide metadata about attributes in other classes\n * or data structures within the LangChain framework.\n */\nexport class AttributeInfo {\n constructor(\n public name: string,\n public type: string,\n public description: string\n ) {}\n}\n\nexport { QueryTransformer, type TraverseType };\nexport {\n DEFAULT_EXAMPLES,\n DEFAULT_PREFIX,\n DEFAULT_SCHEMA,\n DEFAULT_SUFFIX,\n EXAMPLE_PROMPT,\n};\n\nconst queryInputSchema = /* #__PURE__ */ z.object({\n query: /* #__PURE__ */ z\n .string()\n .describe(\"text string to compare to document contents\"),\n filter: /* #__PURE__ */ z\n .string()\n .optional()\n .describe(\"logical condition statement for filtering documents\"),\n});\n\n/**\n * A class that extends AsymmetricStructuredOutputParser to parse\n * structured query output.\n */\nexport class StructuredQueryOutputParser extends AsymmetricStructuredOutputParser<\n typeof queryInputSchema,\n StructuredQuery\n> {\n lc_namespace = [\"langchain\", \"chains\", \"query_constructor\"];\n\n queryTransformer: QueryTransformer;\n\n constructor(fields: {\n allowedComparators: Comparator[];\n allowedOperators: Operator[];\n }) {\n super({ ...fields, inputSchema: queryInputSchema });\n\n const { allowedComparators, allowedOperators } = fields;\n this.queryTransformer = new QueryTransformer(\n allowedComparators,\n allowedOperators\n );\n }\n\n /**\n * Processes the output of a structured query.\n * @param query The query string.\n * @param filter The filter condition.\n * @returns A Promise that resolves to a StructuredQuery instance.\n */\n async outputProcessor({\n query,\n filter,\n }: InferInteropZodOutput<typeof queryInputSchema>): Promise<StructuredQuery> {\n let myQuery = query;\n if (myQuery.length === 0) {\n myQuery = \" \";\n }\n if (filter === \"NO_FILTER\" || filter === undefined) {\n return new StructuredQuery(query);\n } else {\n const parsedFilter = await this.queryTransformer.parse(filter);\n return new StructuredQuery(query, parsedFilter);\n }\n }\n\n /**\n * Creates a new StructuredQueryOutputParser instance from the provided\n * components.\n * @param allowedComparators An array of allowed Comparator instances.\n * @param allowedOperators An array of allowed Operator instances.\n * @returns A new StructuredQueryOutputParser instance.\n */\n static fromComponents(\n allowedComparators: Comparator[] = [],\n allowedOperators: Operator[] = []\n ) {\n return new StructuredQueryOutputParser({\n allowedComparators,\n allowedOperators,\n });\n }\n}\n\nexport function formatAttributeInfo(info: AttributeInfo[]) {\n const infoObj = info.reduce(\n (acc, attr) => {\n acc[attr.name] = {\n type: attr.type,\n description: attr.description,\n };\n return acc;\n },\n {} as { [name: string]: { type: string; description: string } }\n );\n\n return JSON.stringify(infoObj, null, 2)\n .replaceAll(\"{\", \"{{\")\n .replaceAll(\"}\", \"}}\");\n}\n\nconst defaultExample = DEFAULT_EXAMPLES.map((EXAMPLE) => EXAMPLE as Example);\n\nfunction _getPrompt(\n documentContents: string,\n attributeInfo: AttributeInfo[],\n allowedComparators?: Comparator[],\n allowedOperators?: Operator[],\n examples: InputValues[] = defaultExample\n) {\n const myAllowedComparators: Comparator[] =\n allowedComparators ?? Object.values(Comparators);\n const myAllowedOperators: Operator[] =\n allowedOperators ?? Object.values(Operators);\n const attributeJSON = formatAttributeInfo(attributeInfo);\n const schema = interpolateFString(DEFAULT_SCHEMA, {\n allowed_comparators: myAllowedComparators.join(\" | \"),\n allowed_operators: myAllowedOperators.join(\" | \"),\n });\n const prefix = interpolateFString(DEFAULT_PREFIX, {\n schema,\n });\n const suffix = interpolateFString(DEFAULT_SUFFIX, {\n i: examples.length + 1,\n content: documentContents,\n attributes: attributeJSON,\n });\n\n const outputParser = StructuredQueryOutputParser.fromComponents(\n allowedComparators,\n allowedOperators\n );\n\n return new FewShotPromptTemplate({\n examples,\n examplePrompt: EXAMPLE_PROMPT,\n inputVariables: [\"query\"],\n suffix,\n prefix,\n outputParser,\n });\n}\n\n/**\n * A type that represents options for the query constructor chain.\n */\nexport type QueryConstructorRunnableOptions = {\n llm: BaseLanguageModelInterface;\n documentContents: string;\n attributeInfo: AttributeInfo[];\n examples?: InputValues[];\n allowedComparators?: Comparator[];\n allowedOperators?: Operator[];\n};\n\n/** @deprecated */\nexport type QueryConstructorChainOptions = QueryConstructorRunnableOptions;\n\nexport function loadQueryConstructorRunnable(\n opts: QueryConstructorRunnableOptions\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n): Runnable<any, StructuredQuery, RunnableConfig<Record<string, any>>> {\n const prompt = _getPrompt(\n opts.documentContents,\n opts.attributeInfo,\n opts.allowedComparators,\n opts.allowedOperators,\n opts.examples\n );\n const outputParser = StructuredQueryOutputParser.fromComponents(\n opts.allowedComparators,\n opts.allowedOperators\n );\n return prompt.pipe(opts.llm).pipe(outputParser);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,IAAa,gBAAb,MAA2B;CACzB,YACE,MACA,MACA,aACA;AAHO,OAAA,OAAA;AACA,OAAA,OAAA;AACA,OAAA,cAAA;;;AAaX,MAAM,mBAAmC,kBAAE,OAAO;CAChD,OAAuB,kBACpB,QAAQ,CACR,SAAS,8CAA8C;CAC1D,QAAwB,kBACrB,QAAQ,CACR,UAAU,CACV,SAAS,sDAAsD;CACnE,CAAC;;;;;AAMF,IAAa,8BAAb,MAAa,oCAAoC,iCAG/C;CACA,eAAe;EAAC;EAAa;EAAU;EAAoB;CAE3D;CAEA,YAAY,QAGT;AACD,QAAM;GAAE,GAAG;GAAQ,aAAa;GAAkB,CAAC;EAEnD,MAAM,EAAE,oBAAoB,qBAAqB;AACjD,OAAK,mBAAmB,IAAI,iBAC1B,oBACA,iBACD;;;;;;;;CASH,MAAM,gBAAgB,EACpB,OACA,UAC2E;EAC3E,IAAI,UAAU;AACd,MAAI,QAAQ,WAAW,EACrB,WAAU;AAEZ,MAAI,WAAW,eAAe,WAAW,KAAA,EACvC,QAAO,IAAI,gBAAgB,MAAM;MAGjC,QAAO,IAAI,gBAAgB,OADN,MAAM,KAAK,iBAAiB,MAAM,OAAO,CACf;;;;;;;;;CAWnD,OAAO,eACL,qBAAmC,EAAE,EACrC,mBAA+B,EAAE,EACjC;AACA,SAAO,IAAI,4BAA4B;GACrC;GACA;GACD,CAAC;;;AAIN,SAAgB,oBAAoB,MAAuB;CACzD,MAAM,UAAU,KAAK,QAClB,KAAK,SAAS;AACb,MAAI,KAAK,QAAQ;GACf,MAAM,KAAK;GACX,aAAa,KAAK;GACnB;AACD,SAAO;IAET,EAAE,CACH;AAED,QAAO,KAAK,UAAU,SAAS,MAAM,EAAE,CACpC,WAAW,KAAK,KAAK,CACrB,WAAW,KAAK,KAAK;;AAG1B,MAAM,iBAAiB,iBAAiB,KAAK,YAAY,QAAmB;AAE5E,SAAS,WACP,kBACA,eACA,oBACA,kBACA,WAA0B,gBAC1B;CACA,MAAM,uBACJ,sBAAsB,OAAO,OAAO,YAAY;CAClD,MAAM,qBACJ,oBAAoB,OAAO,OAAO,UAAU;CAC9C,MAAM,gBAAgB,oBAAoB,cAAc;CAKxD,MAAM,SAAS,mBAAmB,gBAAgB,EAChD,QALa,mBAAmB,gBAAgB;EAChD,qBAAqB,qBAAqB,KAAK,MAAM;EACrD,mBAAmB,mBAAmB,KAAK,MAAM;EAClD,CAAC,EAGD,CAAC;AAYF,QAAO,IAAI,sBAAsB;EAC/B;EACA,eAAe;EACf,gBAAgB,CAAC,QAAQ;EACzB,QAfa,mBAAmB,gBAAgB;GAChD,GAAG,SAAS,SAAS;GACrB,SAAS;GACT,YAAY;GACb,CAAC;EAYA;EACA,cAXmB,4BAA4B,eAC/C,oBACA,iBACD;EASA,CAAC;;AAkBJ,SAAgB,6BACd,MAEqE;CACrE,MAAM,SAAS,WACb,KAAK,kBACL,KAAK,eACL,KAAK,oBACL,KAAK,kBACL,KAAK,SACN;CACD,MAAM,eAAe,4BAA4B,eAC/C,KAAK,oBACL,KAAK,iBACN;AACD,QAAO,OAAO,KAAK,KAAK,IAAI,CAAC,KAAK,aAAa"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { MapReduceDocumentsChain, MapReduceDocumentsChainInput, RefineDocumentsChain, StuffDocumentsChain } from "../combine_docs_chain.cjs";
|
|
2
2
|
import { BasePromptTemplate } from "@langchain/core/prompts";
|
|
3
|
-
import * as _langchain_core_language_models_base0 from "@langchain/core/language_models/base";
|
|
4
3
|
import { BaseLanguageModelInterface } from "@langchain/core/language_models/base";
|
|
5
4
|
|
|
6
5
|
//#region src/chains/question_answering/load.d.ts
|
|
@@ -15,7 +14,7 @@ type QAChainParams = ({
|
|
|
15
14
|
} & MapReduceQAChainParams) | ({
|
|
16
15
|
type?: "refine";
|
|
17
16
|
} & RefineQAChainParams);
|
|
18
|
-
declare const loadQAChain: (llm: BaseLanguageModelInterface
|
|
17
|
+
declare const loadQAChain: (llm: BaseLanguageModelInterface, params?: QAChainParams) => MapReduceDocumentsChain | RefineDocumentsChain | StuffDocumentsChain;
|
|
19
18
|
/**
|
|
20
19
|
* Represents the parameters for creating a StuffQAChain.
|
|
21
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.cts","names":[],"sources":["../../../src/chains/question_answering/load.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"load.d.cts","names":[],"sources":["../../../src/chains/question_answering/load.ts"],"mappings":";;;;;;;AAuBA;;KAAY,aAAA;EAEN,IAAA;AAAA,IACE,kBAAA;EAEF,IAAA;AAAA,IACE,sBAAA;EAEF,IAAA;AAAA,IACE,mBAAA;AAAA,cAEK,WAAA,GAAW,GAAA,EACjB,0BAAA,EAA0B,MAAA,GACvB,aAAA,KAAa,uBAAA,GAAA,oBAAA,GAAA,mBAAA;;;;UAkBN,kBAAA;EACf,MAAA,GAAS,kBAAA;EACT,OAAA;AAAA;;;;;;;;iBAUc,gBAAA,CACd,GAAA,EAAK,0BAAA,EACL,MAAA,GAAQ,kBAAA,GAAuB,mBAAA;;;;UAWhB,sBAAA;EACf,uBAAA,GAA0B,4BAAA;EAC1B,gBAAA,GAAmB,kBAAA;EACnB,aAAA,GAAgB,kBAAA;EAChB,UAAA,GAAa,0BAAA;EACb,OAAA;AAAA;AA9BF;;;;;;;AAAA,iBAwCgB,oBAAA,CACd,GAAA,EAAK,0BAAA,EACL,MAAA,GAAQ,sBAAA,GAA2B,uBAAA;;AA9BrC;;UA8DiB,mBAAA;EACf,cAAA,GAAiB,kBAAA;EACjB,YAAA,GAAe,kBAAA;EACf,SAAA,GAAY,0BAAA;EACZ,OAAA;AAAA;;;;;;;;iBAUc,iBAAA,CACd,GAAA,EAAK,0BAAA,EACL,MAAA,GAAQ,mBAAA,GAAwB,oBAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { MapReduceDocumentsChain, MapReduceDocumentsChainInput, RefineDocumentsChain, StuffDocumentsChain } from "../combine_docs_chain.js";
|
|
2
2
|
import { BasePromptTemplate } from "@langchain/core/prompts";
|
|
3
|
-
import * as _langchain_core_language_models_base0 from "@langchain/core/language_models/base";
|
|
4
3
|
import { BaseLanguageModelInterface } from "@langchain/core/language_models/base";
|
|
5
4
|
|
|
6
5
|
//#region src/chains/question_answering/load.d.ts
|
|
@@ -15,7 +14,7 @@ type QAChainParams = ({
|
|
|
15
14
|
} & MapReduceQAChainParams) | ({
|
|
16
15
|
type?: "refine";
|
|
17
16
|
} & RefineQAChainParams);
|
|
18
|
-
declare const loadQAChain: (llm: BaseLanguageModelInterface
|
|
17
|
+
declare const loadQAChain: (llm: BaseLanguageModelInterface, params?: QAChainParams) => MapReduceDocumentsChain | RefineDocumentsChain | StuffDocumentsChain;
|
|
19
18
|
/**
|
|
20
19
|
* Represents the parameters for creating a StuffQAChain.
|
|
21
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","names":[],"sources":["../../../src/chains/question_answering/load.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"load.d.ts","names":[],"sources":["../../../src/chains/question_answering/load.ts"],"mappings":";;;;;;;AAuBA;;KAAY,aAAA;EAEN,IAAA;AAAA,IACE,kBAAA;EAEF,IAAA;AAAA,IACE,sBAAA;EAEF,IAAA;AAAA,IACE,mBAAA;AAAA,cAEK,WAAA,GAAW,GAAA,EACjB,0BAAA,EAA0B,MAAA,GACvB,aAAA,KAAa,uBAAA,GAAA,oBAAA,GAAA,mBAAA;;;;UAkBN,kBAAA;EACf,MAAA,GAAS,kBAAA;EACT,OAAA;AAAA;;;;;;;;iBAUc,gBAAA,CACd,GAAA,EAAK,0BAAA,EACL,MAAA,GAAQ,kBAAA,GAAuB,mBAAA;;;;UAWhB,sBAAA;EACf,uBAAA,GAA0B,4BAAA;EAC1B,gBAAA,GAAmB,kBAAA;EACnB,aAAA,GAAgB,kBAAA;EAChB,UAAA,GAAa,0BAAA;EACb,OAAA;AAAA;AA9BF;;;;;;;AAAA,iBAwCgB,oBAAA,CACd,GAAA,EAAK,0BAAA,EACL,MAAA,GAAQ,sBAAA,GAA2B,uBAAA;;AA9BrC;;UA8DiB,mBAAA;EACf,cAAA,GAAiB,kBAAA;EACjB,YAAA,GAAe,kBAAA;EACf,SAAA,GAAY,0BAAA;EACZ,OAAA;AAAA;;;;;;;;iBAUc,iBAAA,CACd,GAAA,EAAK,0BAAA,EACL,MAAA,GAAQ,mBAAA,GAAwB,oBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retrieval.cjs","names":["RunnableSequence","RunnablePassthrough"],"sources":["../../src/chains/retrieval.ts"],"sourcesContent":["import type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport {\n type Runnable,\n RunnableSequence,\n type RunnableInterface,\n RunnablePassthrough,\n} from \"@langchain/core/runnables\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport type { DocumentInterface, Document } from \"@langchain/core/documents\";\n\n/**\n * Parameters for the createRetrievalChain method.\n */\nexport type CreateRetrievalChainParams<RunOutput> = {\n /**\n * Retriever-like object that returns list of documents. Should\n * either be a subclass of BaseRetriever or a Runnable that returns\n * a list of documents. If a subclass of BaseRetriever, then it\n * is expected that an `input` key be passed in - this is what\n * is will be used to pass into the retriever. If this is NOT a\n * subclass of BaseRetriever, then all the inputs will be passed\n * into this runnable, meaning that runnable should take a object\n * as input.\n */\n retriever:\n | BaseRetrieverInterface\n //
|
|
1
|
+
{"version":3,"file":"retrieval.cjs","names":["RunnableSequence","RunnablePassthrough"],"sources":["../../src/chains/retrieval.ts"],"sourcesContent":["import type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport {\n type Runnable,\n RunnableSequence,\n type RunnableInterface,\n RunnablePassthrough,\n} from \"@langchain/core/runnables\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport type { DocumentInterface, Document } from \"@langchain/core/documents\";\n\n/**\n * Parameters for the createRetrievalChain method.\n */\nexport type CreateRetrievalChainParams<RunOutput> = {\n /**\n * Retriever-like object that returns list of documents. Should\n * either be a subclass of BaseRetriever or a Runnable that returns\n * a list of documents. If a subclass of BaseRetriever, then it\n * is expected that an `input` key be passed in - this is what\n * is will be used to pass into the retriever. If this is NOT a\n * subclass of BaseRetriever, then all the inputs will be passed\n * into this runnable, meaning that runnable should take a object\n * as input.\n */\n retriever:\n | BaseRetrieverInterface\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | RunnableInterface<Record<string, any>, DocumentInterface[]>;\n /**\n * Runnable that takes inputs and produces a string output.\n * The inputs to this will be any original inputs to this chain, a new\n * context key with the retrieved documents, and chat_history (if not present\n * in the inputs) with a value of `[]` (to easily enable conversational\n * retrieval).\n */\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n combineDocsChain: RunnableInterface<Record<string, any>, RunOutput>;\n};\n\nfunction isBaseRetriever(x: unknown): x is BaseRetrieverInterface {\n return !!x && typeof (x as BaseRetrieverInterface).invoke === \"function\";\n}\n\n/**\n * Create a retrieval chain that retrieves documents and then passes them on.\n * @param {CreateRetrievalChainParams} params A params object\n * containing a retriever and a combineDocsChain.\n * @returns An LCEL Runnable which returns a an object\n * containing at least `context` and `answer` keys.\n * @example\n * ```typescript\n * // pnpm add langchain @langchain/openai\n *\n * import { ChatOpenAI } from \"@langchain/openai\";\n * import { pull } from \"langchain/hub\";\n * import { createRetrievalChain } from \"@langchain/classic/chains/retrieval\";\n * import { createStuffDocumentsChain } from \"@langchain/classic/chains/combine_documents\";\n *\n * const retrievalQAChatPrompt = await pull(\"langchain-ai/retrieval-qa-chat\");\n * const llm = new ChatOpenAI({ model: \"gpt-4o-mini\" });\n * const retriever = ...\n * const combineDocsChain = await createStuffDocumentsChain(...);\n * const retrievalChain = await createRetrievalChain({\n * retriever,\n * combineDocsChain,\n * });\n * const response = await chain.invoke({ input: \"...\" });\n * ```\n */\nexport async function createRetrievalChain<RunOutput>({\n retriever,\n combineDocsChain,\n}: CreateRetrievalChainParams<RunOutput>): Promise<\n Runnable<\n { input: string; chat_history?: BaseMessage[] | string } & {\n [key: string]: unknown;\n },\n { context: Document[]; answer: RunOutput } & { [key: string]: unknown }\n >\n> {\n let retrieveDocumentsChain: Runnable<{ input: string }, DocumentInterface[]>;\n if (isBaseRetriever(retriever)) {\n retrieveDocumentsChain = RunnableSequence.from([\n (input) => input.input,\n retriever,\n ]);\n } else {\n // TODO: Fix typing by adding withConfig to core RunnableInterface\n retrieveDocumentsChain = retriever as Runnable;\n }\n const retrievalChain = RunnableSequence.from<{\n input: string;\n chat_history?: BaseMessage[] | string;\n }>([\n RunnablePassthrough.assign({\n context: retrieveDocumentsChain.withConfig({\n runName: \"retrieve_documents\",\n }),\n chat_history: (input) => input.chat_history ?? [],\n }),\n RunnablePassthrough.assign({\n answer: combineDocsChain,\n }),\n ]).withConfig({ runName: \"retrieval_chain\" });\n return retrievalChain;\n}\n"],"mappings":";;;;;AAuCA,SAAS,gBAAgB,GAAyC;AAChE,QAAO,CAAC,CAAC,KAAK,OAAQ,EAA6B,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BhE,eAAsB,qBAAgC,EACpD,WACA,oBAQA;CACA,IAAI;AACJ,KAAI,gBAAgB,UAAU,CAC5B,0BAAyBA,0BAAAA,iBAAiB,KAAK,EAC5C,UAAU,MAAM,OACjB,UACD,CAAC;KAGF,0BAAyB;AAgB3B,QAduBA,0BAAAA,iBAAiB,KAGrC,CACDC,0BAAAA,oBAAoB,OAAO;EACzB,SAAS,uBAAuB,WAAW,EACzC,SAAS,sBACV,CAAC;EACF,eAAe,UAAU,MAAM,gBAAgB,EAAE;EAClD,CAAC,EACFA,0BAAAA,oBAAoB,OAAO,EACzB,QAAQ,kBACT,CAAC,CACH,CAAC,CAAC,WAAW,EAAE,SAAS,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retrieval.js","names":[],"sources":["../../src/chains/retrieval.ts"],"sourcesContent":["import type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport {\n type Runnable,\n RunnableSequence,\n type RunnableInterface,\n RunnablePassthrough,\n} from \"@langchain/core/runnables\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport type { DocumentInterface, Document } from \"@langchain/core/documents\";\n\n/**\n * Parameters for the createRetrievalChain method.\n */\nexport type CreateRetrievalChainParams<RunOutput> = {\n /**\n * Retriever-like object that returns list of documents. Should\n * either be a subclass of BaseRetriever or a Runnable that returns\n * a list of documents. If a subclass of BaseRetriever, then it\n * is expected that an `input` key be passed in - this is what\n * is will be used to pass into the retriever. If this is NOT a\n * subclass of BaseRetriever, then all the inputs will be passed\n * into this runnable, meaning that runnable should take a object\n * as input.\n */\n retriever:\n | BaseRetrieverInterface\n //
|
|
1
|
+
{"version":3,"file":"retrieval.js","names":[],"sources":["../../src/chains/retrieval.ts"],"sourcesContent":["import type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport {\n type Runnable,\n RunnableSequence,\n type RunnableInterface,\n RunnablePassthrough,\n} from \"@langchain/core/runnables\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport type { DocumentInterface, Document } from \"@langchain/core/documents\";\n\n/**\n * Parameters for the createRetrievalChain method.\n */\nexport type CreateRetrievalChainParams<RunOutput> = {\n /**\n * Retriever-like object that returns list of documents. Should\n * either be a subclass of BaseRetriever or a Runnable that returns\n * a list of documents. If a subclass of BaseRetriever, then it\n * is expected that an `input` key be passed in - this is what\n * is will be used to pass into the retriever. If this is NOT a\n * subclass of BaseRetriever, then all the inputs will be passed\n * into this runnable, meaning that runnable should take a object\n * as input.\n */\n retriever:\n | BaseRetrieverInterface\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | RunnableInterface<Record<string, any>, DocumentInterface[]>;\n /**\n * Runnable that takes inputs and produces a string output.\n * The inputs to this will be any original inputs to this chain, a new\n * context key with the retrieved documents, and chat_history (if not present\n * in the inputs) with a value of `[]` (to easily enable conversational\n * retrieval).\n */\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n combineDocsChain: RunnableInterface<Record<string, any>, RunOutput>;\n};\n\nfunction isBaseRetriever(x: unknown): x is BaseRetrieverInterface {\n return !!x && typeof (x as BaseRetrieverInterface).invoke === \"function\";\n}\n\n/**\n * Create a retrieval chain that retrieves documents and then passes them on.\n * @param {CreateRetrievalChainParams} params A params object\n * containing a retriever and a combineDocsChain.\n * @returns An LCEL Runnable which returns a an object\n * containing at least `context` and `answer` keys.\n * @example\n * ```typescript\n * // pnpm add langchain @langchain/openai\n *\n * import { ChatOpenAI } from \"@langchain/openai\";\n * import { pull } from \"langchain/hub\";\n * import { createRetrievalChain } from \"@langchain/classic/chains/retrieval\";\n * import { createStuffDocumentsChain } from \"@langchain/classic/chains/combine_documents\";\n *\n * const retrievalQAChatPrompt = await pull(\"langchain-ai/retrieval-qa-chat\");\n * const llm = new ChatOpenAI({ model: \"gpt-4o-mini\" });\n * const retriever = ...\n * const combineDocsChain = await createStuffDocumentsChain(...);\n * const retrievalChain = await createRetrievalChain({\n * retriever,\n * combineDocsChain,\n * });\n * const response = await chain.invoke({ input: \"...\" });\n * ```\n */\nexport async function createRetrievalChain<RunOutput>({\n retriever,\n combineDocsChain,\n}: CreateRetrievalChainParams<RunOutput>): Promise<\n Runnable<\n { input: string; chat_history?: BaseMessage[] | string } & {\n [key: string]: unknown;\n },\n { context: Document[]; answer: RunOutput } & { [key: string]: unknown }\n >\n> {\n let retrieveDocumentsChain: Runnable<{ input: string }, DocumentInterface[]>;\n if (isBaseRetriever(retriever)) {\n retrieveDocumentsChain = RunnableSequence.from([\n (input) => input.input,\n retriever,\n ]);\n } else {\n // TODO: Fix typing by adding withConfig to core RunnableInterface\n retrieveDocumentsChain = retriever as Runnable;\n }\n const retrievalChain = RunnableSequence.from<{\n input: string;\n chat_history?: BaseMessage[] | string;\n }>([\n RunnablePassthrough.assign({\n context: retrieveDocumentsChain.withConfig({\n runName: \"retrieve_documents\",\n }),\n chat_history: (input) => input.chat_history ?? [],\n }),\n RunnablePassthrough.assign({\n answer: combineDocsChain,\n }),\n ]).withConfig({ runName: \"retrieval_chain\" });\n return retrievalChain;\n}\n"],"mappings":";;;;AAuCA,SAAS,gBAAgB,GAAyC;AAChE,QAAO,CAAC,CAAC,KAAK,OAAQ,EAA6B,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BhE,eAAsB,qBAAgC,EACpD,WACA,oBAQA;CACA,IAAI;AACJ,KAAI,gBAAgB,UAAU,CAC5B,0BAAyB,iBAAiB,KAAK,EAC5C,UAAU,MAAM,OACjB,UACD,CAAC;KAGF,0BAAyB;AAgB3B,QAduB,iBAAiB,KAGrC,CACD,oBAAoB,OAAO;EACzB,SAAS,uBAAuB,WAAW,EACzC,SAAS,sBACV,CAAC;EACF,eAAe,UAAU,MAAM,gBAAgB,EAAE;EAClD,CAAC,EACF,oBAAoB,OAAO,EACzB,QAAQ,kBACT,CAAC,CACH,CAAC,CAAC,WAAW,EAAE,SAAS,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retrieval_qa.cjs","names":["BaseChain","loadQAStuffChain"],"sources":["../../src/chains/retrieval_qa.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedVectorDBQAChain } from \"./serde.js\";\nimport {\n StuffQAChainParams,\n loadQAStuffChain,\n} from \"./question_answering/load.js\";\n\n//
|
|
1
|
+
{"version":3,"file":"retrieval_qa.cjs","names":["BaseChain","loadQAStuffChain"],"sources":["../../src/chains/retrieval_qa.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedVectorDBQAChain } from \"./serde.js\";\nimport {\n StuffQAChainParams,\n loadQAStuffChain,\n} from \"./question_answering/load.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\n/**\n * Interface for the input parameters of the RetrievalQAChain class.\n */\nexport interface RetrievalQAChainInput extends Omit<ChainInputs, \"memory\"> {\n retriever: BaseRetrieverInterface;\n combineDocumentsChain: BaseChain;\n inputKey?: string;\n returnSourceDocuments?: boolean;\n}\n\n/**\n * Class representing a chain for performing question-answering tasks with\n * a retrieval component.\n * @example\n * ```typescript\n * import { createStuffDocumentsChain } from \"@langchain/classic/chains/combine_documents\";\n * import { ChatPromptTemplate } from \"@langchain/core/prompts\";\n * import { createRetrievalChain } from \"@langchain/classic/chains/retrieval\";\n * import { MemoryVectorStore } from \"@langchain/classic/vectorstores/memory\";\n *\n * const documents = [...your documents here];\n * const embeddings = ...your embeddings model;\n * const llm = ...your LLM model;\n *\n * const vectorstore = await MemoryVectorStore.fromDocuments(\n * documents,\n * embeddings\n * );\n * const prompt = ChatPromptTemplate.fromTemplate(`Answer the user's question: {input} based on the following context {context}`);\n *\n * const combineDocsChain = await createStuffDocumentsChain({\n * llm,\n * prompt,\n * });\n * const retriever = vectorstore.asRetriever();\n *\n * const retrievalChain = await createRetrievalChain({\n * combineDocsChain,\n * retriever,\n * });\n * ```\n */\nexport class RetrievalQAChain\n extends BaseChain\n implements RetrievalQAChainInput\n{\n static lc_name() {\n return \"RetrievalQAChain\";\n }\n\n inputKey = \"query\";\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return this.combineDocumentsChain.outputKeys.concat(\n this.returnSourceDocuments ? [\"sourceDocuments\"] : []\n );\n }\n\n retriever: BaseRetrieverInterface;\n\n combineDocumentsChain: BaseChain;\n\n returnSourceDocuments = false;\n\n constructor(fields: RetrievalQAChainInput) {\n super(fields);\n this.retriever = fields.retriever;\n this.combineDocumentsChain = fields.combineDocumentsChain;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.returnSourceDocuments =\n fields.returnSourceDocuments ?? this.returnSourceDocuments;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.inputKey in values)) {\n throw new Error(`Question key \"${this.inputKey}\" not found.`);\n }\n const question: string = values[this.inputKey];\n const docs = await this.retriever.invoke(\n question,\n runManager?.getChild(\"retriever\")\n );\n const inputs = { question, input_documents: docs, ...values };\n const result = await this.combineDocumentsChain.call(\n inputs,\n runManager?.getChild(\"combine_documents\")\n );\n if (this.returnSourceDocuments) {\n return {\n ...result,\n sourceDocuments: docs,\n };\n }\n return result;\n }\n\n _chainType() {\n return \"retrieval_qa\" as const;\n }\n\n static async deserialize(\n _data: SerializedVectorDBQAChain,\n _values: LoadValues\n ): Promise<RetrievalQAChain> {\n throw new Error(\"Not implemented\");\n }\n\n serialize(): SerializedVectorDBQAChain {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Creates a new instance of RetrievalQAChain using a BaseLanguageModel\n * and a BaseRetriever.\n * @param llm The BaseLanguageModel used to generate a new question.\n * @param retriever The BaseRetriever used to retrieve relevant documents.\n * @param options Optional parameters for the RetrievalQAChain.\n * @returns A new instance of RetrievalQAChain.\n */\n static fromLLM(\n llm: BaseLanguageModelInterface,\n retriever: BaseRetrieverInterface,\n options?: Partial<\n Omit<\n RetrievalQAChainInput,\n \"retriever\" | \"combineDocumentsChain\" | \"index\"\n >\n > &\n StuffQAChainParams\n ): RetrievalQAChain {\n const qaChain = loadQAStuffChain(llm, {\n prompt: options?.prompt,\n });\n return new this({\n ...options,\n retriever,\n combineDocumentsChain: qaChain,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,IAAa,mBAAb,cACUA,aAAAA,UAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,WAAW;CAEX,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAa;AACf,SAAO,KAAK,sBAAsB,WAAW,OAC3C,KAAK,wBAAwB,CAAC,kBAAkB,GAAG,EAAE,CACtD;;CAGH;CAEA;CAEA,wBAAwB;CAExB,YAAY,QAA+B;AACzC,QAAM,OAAO;AACb,OAAK,YAAY,OAAO;AACxB,OAAK,wBAAwB,OAAO;AACpC,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,wBACH,OAAO,yBAAyB,KAAK;;;CAIzC,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,YAAY,QACrB,OAAM,IAAI,MAAM,iBAAiB,KAAK,SAAS,cAAc;EAE/D,MAAM,WAAmB,OAAO,KAAK;EACrC,MAAM,OAAO,MAAM,KAAK,UAAU,OAChC,UACA,YAAY,SAAS,YAAY,CAClC;EACD,MAAM,SAAS;GAAE;GAAU,iBAAiB;GAAM,GAAG;GAAQ;EAC7D,MAAM,SAAS,MAAM,KAAK,sBAAsB,KAC9C,QACA,YAAY,SAAS,oBAAoB,CAC1C;AACD,MAAI,KAAK,sBACP,QAAO;GACL,GAAG;GACH,iBAAiB;GAClB;AAEH,SAAO;;CAGT,aAAa;AACX,SAAO;;CAGT,aAAa,YACX,OACA,SAC2B;AAC3B,QAAM,IAAI,MAAM,kBAAkB;;CAGpC,YAAuC;AACrC,QAAM,IAAI,MAAM,kBAAkB;;;;;;;;;;CAWpC,OAAO,QACL,KACA,WACA,SAOkB;EAClB,MAAM,UAAUC,aAAAA,iBAAiB,KAAK,EACpC,QAAQ,SAAS,QAClB,CAAC;AACF,SAAO,IAAI,KAAK;GACd,GAAG;GACH;GACA,uBAAuB;GACxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retrieval_qa.js","names":[],"sources":["../../src/chains/retrieval_qa.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedVectorDBQAChain } from \"./serde.js\";\nimport {\n StuffQAChainParams,\n loadQAStuffChain,\n} from \"./question_answering/load.js\";\n\n//
|
|
1
|
+
{"version":3,"file":"retrieval_qa.js","names":[],"sources":["../../src/chains/retrieval_qa.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { BaseRetrieverInterface } from \"@langchain/core/retrievers\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedVectorDBQAChain } from \"./serde.js\";\nimport {\n StuffQAChainParams,\n loadQAStuffChain,\n} from \"./question_answering/load.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\n/**\n * Interface for the input parameters of the RetrievalQAChain class.\n */\nexport interface RetrievalQAChainInput extends Omit<ChainInputs, \"memory\"> {\n retriever: BaseRetrieverInterface;\n combineDocumentsChain: BaseChain;\n inputKey?: string;\n returnSourceDocuments?: boolean;\n}\n\n/**\n * Class representing a chain for performing question-answering tasks with\n * a retrieval component.\n * @example\n * ```typescript\n * import { createStuffDocumentsChain } from \"@langchain/classic/chains/combine_documents\";\n * import { ChatPromptTemplate } from \"@langchain/core/prompts\";\n * import { createRetrievalChain } from \"@langchain/classic/chains/retrieval\";\n * import { MemoryVectorStore } from \"@langchain/classic/vectorstores/memory\";\n *\n * const documents = [...your documents here];\n * const embeddings = ...your embeddings model;\n * const llm = ...your LLM model;\n *\n * const vectorstore = await MemoryVectorStore.fromDocuments(\n * documents,\n * embeddings\n * );\n * const prompt = ChatPromptTemplate.fromTemplate(`Answer the user's question: {input} based on the following context {context}`);\n *\n * const combineDocsChain = await createStuffDocumentsChain({\n * llm,\n * prompt,\n * });\n * const retriever = vectorstore.asRetriever();\n *\n * const retrievalChain = await createRetrievalChain({\n * combineDocsChain,\n * retriever,\n * });\n * ```\n */\nexport class RetrievalQAChain\n extends BaseChain\n implements RetrievalQAChainInput\n{\n static lc_name() {\n return \"RetrievalQAChain\";\n }\n\n inputKey = \"query\";\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return this.combineDocumentsChain.outputKeys.concat(\n this.returnSourceDocuments ? [\"sourceDocuments\"] : []\n );\n }\n\n retriever: BaseRetrieverInterface;\n\n combineDocumentsChain: BaseChain;\n\n returnSourceDocuments = false;\n\n constructor(fields: RetrievalQAChainInput) {\n super(fields);\n this.retriever = fields.retriever;\n this.combineDocumentsChain = fields.combineDocumentsChain;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.returnSourceDocuments =\n fields.returnSourceDocuments ?? this.returnSourceDocuments;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.inputKey in values)) {\n throw new Error(`Question key \"${this.inputKey}\" not found.`);\n }\n const question: string = values[this.inputKey];\n const docs = await this.retriever.invoke(\n question,\n runManager?.getChild(\"retriever\")\n );\n const inputs = { question, input_documents: docs, ...values };\n const result = await this.combineDocumentsChain.call(\n inputs,\n runManager?.getChild(\"combine_documents\")\n );\n if (this.returnSourceDocuments) {\n return {\n ...result,\n sourceDocuments: docs,\n };\n }\n return result;\n }\n\n _chainType() {\n return \"retrieval_qa\" as const;\n }\n\n static async deserialize(\n _data: SerializedVectorDBQAChain,\n _values: LoadValues\n ): Promise<RetrievalQAChain> {\n throw new Error(\"Not implemented\");\n }\n\n serialize(): SerializedVectorDBQAChain {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Creates a new instance of RetrievalQAChain using a BaseLanguageModel\n * and a BaseRetriever.\n * @param llm The BaseLanguageModel used to generate a new question.\n * @param retriever The BaseRetriever used to retrieve relevant documents.\n * @param options Optional parameters for the RetrievalQAChain.\n * @returns A new instance of RetrievalQAChain.\n */\n static fromLLM(\n llm: BaseLanguageModelInterface,\n retriever: BaseRetrieverInterface,\n options?: Partial<\n Omit<\n RetrievalQAChainInput,\n \"retriever\" | \"combineDocumentsChain\" | \"index\"\n >\n > &\n StuffQAChainParams\n ): RetrievalQAChain {\n const qaChain = loadQAStuffChain(llm, {\n prompt: options?.prompt,\n });\n return new this({\n ...options,\n retriever,\n combineDocumentsChain: qaChain,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,IAAa,mBAAb,cACU,UAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,WAAW;CAEX,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAa;AACf,SAAO,KAAK,sBAAsB,WAAW,OAC3C,KAAK,wBAAwB,CAAC,kBAAkB,GAAG,EAAE,CACtD;;CAGH;CAEA;CAEA,wBAAwB;CAExB,YAAY,QAA+B;AACzC,QAAM,OAAO;AACb,OAAK,YAAY,OAAO;AACxB,OAAK,wBAAwB,OAAO;AACpC,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,wBACH,OAAO,yBAAyB,KAAK;;;CAIzC,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,YAAY,QACrB,OAAM,IAAI,MAAM,iBAAiB,KAAK,SAAS,cAAc;EAE/D,MAAM,WAAmB,OAAO,KAAK;EACrC,MAAM,OAAO,MAAM,KAAK,UAAU,OAChC,UACA,YAAY,SAAS,YAAY,CAClC;EACD,MAAM,SAAS;GAAE;GAAU,iBAAiB;GAAM,GAAG;GAAQ;EAC7D,MAAM,SAAS,MAAM,KAAK,sBAAsB,KAC9C,QACA,YAAY,SAAS,oBAAoB,CAC1C;AACD,MAAI,KAAK,sBACP,QAAO;GACL,GAAG;GACH,iBAAiB;GAClB;AAEH,SAAO;;CAGT,aAAa;AACX,SAAO;;CAGT,aAAa,YACX,OACA,SAC2B;AAC3B,QAAM,IAAI,MAAM,kBAAkB;;CAGpC,YAAuC;AACrC,QAAM,IAAI,MAAM,kBAAkB;;;;;;;;;;CAWpC,OAAO,QACL,KACA,WACA,SAOkB;EAClB,MAAM,UAAU,iBAAiB,KAAK,EACpC,QAAQ,SAAS,QAClB,CAAC;AACF,SAAO,IAAI,KAAK;GACd,GAAG;GACH;GACA,uBAAuB;GACxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","names":[],"sources":["../../../src/chains/router/utils.ts"],"sourcesContent":["//
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":[],"sources":["../../../src/chains/router/utils.ts"],"sourcesContent":["// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function zipEntries<T extends any[]>(\n ...arrays: {\n [P in keyof T]: T[P][];\n }\n): T[] {\n // Check for empty input\n if (arrays.length === 0) {\n return [];\n }\n\n // Find the length of the first input array\n const firstArrayLength = arrays[0].length;\n\n // Ensure all input arrays have the same length\n for (const array of arrays) {\n if (array.length !== firstArrayLength) {\n throw new Error(\"All input arrays must have the same length.\");\n }\n }\n\n // Create an empty array to store the zipped arrays\n const zipped: T[] = [];\n\n // Iterate through each element of the first input array\n for (let i = 0; i < firstArrayLength; i += 1) {\n // Create an array to store the zipped elements at the current index\n const zippedElement: T[keyof T][] = [];\n\n // Iterate through each input array\n for (const array of arrays) {\n // Add the element at the current index to the zipped element array\n zippedElement.push(array[i]);\n }\n\n // Add the zipped element array to the zipped array\n zipped.push(zippedElement as T);\n }\n\n return zipped;\n}\n"],"mappings":";AACA,SAAgB,WACd,GAAG,QAGE;AAEL,KAAI,OAAO,WAAW,EACpB,QAAO,EAAE;CAIX,MAAM,mBAAmB,OAAO,GAAG;AAGnC,MAAK,MAAM,SAAS,OAClB,KAAI,MAAM,WAAW,iBACnB,OAAM,IAAI,MAAM,8CAA8C;CAKlE,MAAM,SAAc,EAAE;AAGtB,MAAK,IAAI,IAAI,GAAG,IAAI,kBAAkB,KAAK,GAAG;EAE5C,MAAM,gBAA8B,EAAE;AAGtC,OAAK,MAAM,SAAS,OAElB,eAAc,KAAK,MAAM,GAAG;AAI9B,SAAO,KAAK,cAAmB;;AAGjC,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../src/chains/router/utils.ts"],"sourcesContent":["//
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../src/chains/router/utils.ts"],"sourcesContent":["// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function zipEntries<T extends any[]>(\n ...arrays: {\n [P in keyof T]: T[P][];\n }\n): T[] {\n // Check for empty input\n if (arrays.length === 0) {\n return [];\n }\n\n // Find the length of the first input array\n const firstArrayLength = arrays[0].length;\n\n // Ensure all input arrays have the same length\n for (const array of arrays) {\n if (array.length !== firstArrayLength) {\n throw new Error(\"All input arrays must have the same length.\");\n }\n }\n\n // Create an empty array to store the zipped arrays\n const zipped: T[] = [];\n\n // Iterate through each element of the first input array\n for (let i = 0; i < firstArrayLength; i += 1) {\n // Create an array to store the zipped elements at the current index\n const zippedElement: T[keyof T][] = [];\n\n // Iterate through each input array\n for (const array of arrays) {\n // Add the element at the current index to the zipped element array\n zippedElement.push(array[i]);\n }\n\n // Add the zipped element array to the zipped array\n zipped.push(zippedElement as T);\n }\n\n return zipped;\n}\n"],"mappings":";AACA,SAAgB,WACd,GAAG,QAGE;AAEL,KAAI,OAAO,WAAW,EACpB,QAAO,EAAE;CAIX,MAAM,mBAAmB,OAAO,GAAG;AAGnC,MAAK,MAAM,SAAS,OAClB,KAAI,MAAM,WAAW,iBACnB,OAAM,IAAI,MAAM,8CAA8C;CAKlE,MAAM,SAAc,EAAE;AAGtB,MAAK,IAAI,IAAI,GAAG,IAAI,kBAAkB,KAAK,GAAG;EAE5C,MAAM,gBAA8B,EAAE;AAGtC,OAAK,MAAM,SAAS,OAElB,eAAc,KAAK,MAAM,GAAG;AAI9B,SAAO,KAAK,cAAmB;;AAGjC,QAAO"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { MapReduceDocumentsChain, MapReduceDocumentsChainInput, RefineDocumentsChain, StuffDocumentsChain } from "../combine_docs_chain.cjs";
|
|
2
2
|
import { BasePromptTemplate } from "@langchain/core/prompts";
|
|
3
|
-
import * as _langchain_core_language_models_base0 from "@langchain/core/language_models/base";
|
|
4
3
|
import { BaseLanguageModelInterface } from "@langchain/core/language_models/base";
|
|
5
4
|
|
|
6
5
|
//#region src/chains/summarization/load.d.ts
|
|
@@ -26,7 +25,7 @@ type SummarizationChainParams = BaseParams & ({
|
|
|
26
25
|
refineLLM?: BaseLanguageModelInterface;
|
|
27
26
|
questionPrompt?: BasePromptTemplate;
|
|
28
27
|
});
|
|
29
|
-
declare const loadSummarizationChain: (llm: BaseLanguageModelInterface
|
|
28
|
+
declare const loadSummarizationChain: (llm: BaseLanguageModelInterface, params?: SummarizationChainParams) => MapReduceDocumentsChain | RefineDocumentsChain | StuffDocumentsChain;
|
|
30
29
|
//#endregion
|
|
31
30
|
export { SummarizationChainParams, loadSummarizationChain };
|
|
32
31
|
//# sourceMappingURL=load.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.cts","names":[],"sources":["../../../src/chains/summarization/load.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"load.d.cts","names":[],"sources":["../../../src/chains/summarization/load.ts"],"mappings":";;;;;;;AAQkC;;KAQ7B,UAAA;EACH,OAAA;AAAA;AAIF;AAAA,KAAY,wBAAA,GAA2B,UAAA;EAG/B,IAAA;EACA,MAAA,GAAS,kBAAA;AAAA;EAGT,IAAA;EACA,gBAAA,GAAmB,kBAAA;EACnB,aAAA,GAAgB,kBAAA;EAChB,UAAA,GAAa,0BAAA;AAAA,IACX,IAAA,CAAK,4BAAA;EAEP,IAAA;EACA,YAAA,GAAe,kBAAA;EACf,SAAA,GAAY,0BAAA;EACZ,cAAA,GAAiB,kBAAA;AAAA;AAAA,cAIZ,sBAAA,GAAsB,GAAA,EAC5B,0BAAA,EAA0B,MAAA,GACvB,wBAAA,KAAwB,uBAAA,GAAA,oBAAA,GAAA,mBAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { MapReduceDocumentsChain, MapReduceDocumentsChainInput, RefineDocumentsChain, StuffDocumentsChain } from "../combine_docs_chain.js";
|
|
2
2
|
import { BasePromptTemplate } from "@langchain/core/prompts";
|
|
3
|
-
import * as _langchain_core_language_models_base0 from "@langchain/core/language_models/base";
|
|
4
3
|
import { BaseLanguageModelInterface } from "@langchain/core/language_models/base";
|
|
5
4
|
|
|
6
5
|
//#region src/chains/summarization/load.d.ts
|
|
@@ -26,7 +25,7 @@ type SummarizationChainParams = BaseParams & ({
|
|
|
26
25
|
refineLLM?: BaseLanguageModelInterface;
|
|
27
26
|
questionPrompt?: BasePromptTemplate;
|
|
28
27
|
});
|
|
29
|
-
declare const loadSummarizationChain: (llm: BaseLanguageModelInterface
|
|
28
|
+
declare const loadSummarizationChain: (llm: BaseLanguageModelInterface, params?: SummarizationChainParams) => MapReduceDocumentsChain | RefineDocumentsChain | StuffDocumentsChain;
|
|
30
29
|
//#endregion
|
|
31
30
|
export { SummarizationChainParams, loadSummarizationChain };
|
|
32
31
|
//# sourceMappingURL=load.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","names":[],"sources":["../../../src/chains/summarization/load.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"load.d.ts","names":[],"sources":["../../../src/chains/summarization/load.ts"],"mappings":";;;;;;;AAQkC;;KAQ7B,UAAA;EACH,OAAA;AAAA;AAIF;AAAA,KAAY,wBAAA,GAA2B,UAAA;EAG/B,IAAA;EACA,MAAA,GAAS,kBAAA;AAAA;EAGT,IAAA;EACA,gBAAA,GAAmB,kBAAA;EACnB,aAAA,GAAgB,kBAAA;EAChB,UAAA,GAAa,0BAAA;AAAA,IACX,IAAA,CAAK,4BAAA;EAEP,IAAA;EACA,YAAA,GAAe,kBAAA;EACf,SAAA,GAAY,0BAAA;EACZ,cAAA,GAAiB,kBAAA;AAAA;AAAA,cAIZ,sBAAA,GAAsB,GAAA,EAC5B,0BAAA,EAA0B,MAAA,GACvB,wBAAA,KAAwB,uBAAA,GAAA,oBAAA,GAAA,mBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector_db_qa.cjs","names":["BaseChain","loadQAStuffChain"],"sources":["../../src/chains/vector_db_qa.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { VectorStoreInterface } from \"@langchain/core/vectorstores\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedVectorDBQAChain } from \"./serde.js\";\nimport { loadQAStuffChain } from \"./question_answering/load.js\";\n\n//
|
|
1
|
+
{"version":3,"file":"vector_db_qa.cjs","names":["BaseChain","loadQAStuffChain"],"sources":["../../src/chains/vector_db_qa.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { VectorStoreInterface } from \"@langchain/core/vectorstores\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedVectorDBQAChain } from \"./serde.js\";\nimport { loadQAStuffChain } from \"./question_answering/load.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\n/**\n * Interface that extends the `ChainInputs` interface and defines the\n * input fields required for a VectorDBQAChain. It includes properties\n * such as `vectorstore`, `combineDocumentsChain`,\n * `returnSourceDocuments`, `k`, and `inputKey`.\n */\nexport interface VectorDBQAChainInput extends Omit<ChainInputs, \"memory\"> {\n vectorstore: VectorStoreInterface;\n combineDocumentsChain: BaseChain;\n returnSourceDocuments?: boolean;\n k?: number;\n inputKey?: string;\n}\n\n/**\n * Class that represents a VectorDBQAChain. It extends the `BaseChain`\n * class and implements the `VectorDBQAChainInput` interface. It performs\n * a similarity search using a vector store and combines the search\n * results using a specified combine documents chain.\n */\nexport class VectorDBQAChain extends BaseChain implements VectorDBQAChainInput {\n static lc_name() {\n return \"VectorDBQAChain\";\n }\n\n k = 4;\n\n inputKey = \"query\";\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return this.combineDocumentsChain.outputKeys.concat(\n this.returnSourceDocuments ? [\"sourceDocuments\"] : []\n );\n }\n\n vectorstore: VectorStoreInterface;\n\n combineDocumentsChain: BaseChain;\n\n returnSourceDocuments = false;\n\n constructor(fields: VectorDBQAChainInput) {\n super(fields);\n this.vectorstore = fields.vectorstore;\n this.combineDocumentsChain = fields.combineDocumentsChain;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.k = fields.k ?? this.k;\n this.returnSourceDocuments =\n fields.returnSourceDocuments ?? this.returnSourceDocuments;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.inputKey in values)) {\n throw new Error(`Question key ${this.inputKey} not found.`);\n }\n const question: string = values[this.inputKey];\n const docs = await this.vectorstore.similaritySearch(\n question,\n this.k,\n values.filter,\n runManager?.getChild(\"vectorstore\")\n );\n const inputs = { question, input_documents: docs };\n const result = await this.combineDocumentsChain.call(\n inputs,\n runManager?.getChild(\"combine_documents\")\n );\n if (this.returnSourceDocuments) {\n return {\n ...result,\n sourceDocuments: docs,\n };\n }\n return result;\n }\n\n _chainType() {\n return \"vector_db_qa\" as const;\n }\n\n static async deserialize(\n data: SerializedVectorDBQAChain,\n values: LoadValues\n ) {\n if (!(\"vectorstore\" in values)) {\n throw new Error(\n `Need to pass in a vectorstore to deserialize VectorDBQAChain`\n );\n }\n const { vectorstore } = values;\n if (!data.combine_documents_chain) {\n throw new Error(\n `VectorDBQAChain must have combine_documents_chain in serialized data`\n );\n }\n\n return new VectorDBQAChain({\n combineDocumentsChain: await BaseChain.deserialize(\n data.combine_documents_chain\n ),\n k: data.k,\n vectorstore,\n });\n }\n\n serialize(): SerializedVectorDBQAChain {\n return {\n _type: this._chainType(),\n combine_documents_chain: this.combineDocumentsChain.serialize(),\n k: this.k,\n };\n }\n\n /**\n * Static method that creates a VectorDBQAChain instance from a\n * BaseLanguageModel and a vector store. It also accepts optional options\n * to customize the chain.\n * @param llm The BaseLanguageModel instance.\n * @param vectorstore The vector store used for similarity search.\n * @param options Optional options to customize the chain.\n * @returns A new instance of VectorDBQAChain.\n */\n static fromLLM(\n llm: BaseLanguageModelInterface,\n vectorstore: VectorStoreInterface,\n options?: Partial<\n Omit<VectorDBQAChainInput, \"combineDocumentsChain\" | \"vectorstore\">\n >\n ): VectorDBQAChain {\n const qaChain = loadQAStuffChain(llm);\n return new this({\n vectorstore,\n combineDocumentsChain: qaChain,\n ...options,\n });\n }\n}\n"],"mappings":";;;;;;;;;AA+BA,IAAa,kBAAb,MAAa,wBAAwBA,aAAAA,UAA0C;CAC7E,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI;CAEJ,WAAW;CAEX,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAa;AACf,SAAO,KAAK,sBAAsB,WAAW,OAC3C,KAAK,wBAAwB,CAAC,kBAAkB,GAAG,EAAE,CACtD;;CAGH;CAEA;CAEA,wBAAwB;CAExB,YAAY,QAA8B;AACxC,QAAM,OAAO;AACb,OAAK,cAAc,OAAO;AAC1B,OAAK,wBAAwB,OAAO;AACpC,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,IAAI,OAAO,KAAK,KAAK;AAC1B,OAAK,wBACH,OAAO,yBAAyB,KAAK;;;CAIzC,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,YAAY,QACrB,OAAM,IAAI,MAAM,gBAAgB,KAAK,SAAS,aAAa;EAE7D,MAAM,WAAmB,OAAO,KAAK;EACrC,MAAM,OAAO,MAAM,KAAK,YAAY,iBAClC,UACA,KAAK,GACL,OAAO,QACP,YAAY,SAAS,cAAc,CACpC;EACD,MAAM,SAAS;GAAE;GAAU,iBAAiB;GAAM;EAClD,MAAM,SAAS,MAAM,KAAK,sBAAsB,KAC9C,QACA,YAAY,SAAS,oBAAoB,CAC1C;AACD,MAAI,KAAK,sBACP,QAAO;GACL,GAAG;GACH,iBAAiB;GAClB;AAEH,SAAO;;CAGT,aAAa;AACX,SAAO;;CAGT,aAAa,YACX,MACA,QACA;AACA,MAAI,EAAE,iBAAiB,QACrB,OAAM,IAAI,MACR,+DACD;EAEH,MAAM,EAAE,gBAAgB;AACxB,MAAI,CAAC,KAAK,wBACR,OAAM,IAAI,MACR,uEACD;AAGH,SAAO,IAAI,gBAAgB;GACzB,uBAAuB,MAAMA,aAAAA,UAAU,YACrC,KAAK,wBACN;GACD,GAAG,KAAK;GACR;GACD,CAAC;;CAGJ,YAAuC;AACrC,SAAO;GACL,OAAO,KAAK,YAAY;GACxB,yBAAyB,KAAK,sBAAsB,WAAW;GAC/D,GAAG,KAAK;GACT;;;;;;;;;;;CAYH,OAAO,QACL,KACA,aACA,SAGiB;EACjB,MAAM,UAAUC,aAAAA,iBAAiB,IAAI;AACrC,SAAO,IAAI,KAAK;GACd;GACA,uBAAuB;GACvB,GAAG;GACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector_db_qa.js","names":[],"sources":["../../src/chains/vector_db_qa.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { VectorStoreInterface } from \"@langchain/core/vectorstores\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedVectorDBQAChain } from \"./serde.js\";\nimport { loadQAStuffChain } from \"./question_answering/load.js\";\n\n//
|
|
1
|
+
{"version":3,"file":"vector_db_qa.js","names":[],"sources":["../../src/chains/vector_db_qa.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { VectorStoreInterface } from \"@langchain/core/vectorstores\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedVectorDBQAChain } from \"./serde.js\";\nimport { loadQAStuffChain } from \"./question_answering/load.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\n/**\n * Interface that extends the `ChainInputs` interface and defines the\n * input fields required for a VectorDBQAChain. It includes properties\n * such as `vectorstore`, `combineDocumentsChain`,\n * `returnSourceDocuments`, `k`, and `inputKey`.\n */\nexport interface VectorDBQAChainInput extends Omit<ChainInputs, \"memory\"> {\n vectorstore: VectorStoreInterface;\n combineDocumentsChain: BaseChain;\n returnSourceDocuments?: boolean;\n k?: number;\n inputKey?: string;\n}\n\n/**\n * Class that represents a VectorDBQAChain. It extends the `BaseChain`\n * class and implements the `VectorDBQAChainInput` interface. It performs\n * a similarity search using a vector store and combines the search\n * results using a specified combine documents chain.\n */\nexport class VectorDBQAChain extends BaseChain implements VectorDBQAChainInput {\n static lc_name() {\n return \"VectorDBQAChain\";\n }\n\n k = 4;\n\n inputKey = \"query\";\n\n get inputKeys() {\n return [this.inputKey];\n }\n\n get outputKeys() {\n return this.combineDocumentsChain.outputKeys.concat(\n this.returnSourceDocuments ? [\"sourceDocuments\"] : []\n );\n }\n\n vectorstore: VectorStoreInterface;\n\n combineDocumentsChain: BaseChain;\n\n returnSourceDocuments = false;\n\n constructor(fields: VectorDBQAChainInput) {\n super(fields);\n this.vectorstore = fields.vectorstore;\n this.combineDocumentsChain = fields.combineDocumentsChain;\n this.inputKey = fields.inputKey ?? this.inputKey;\n this.k = fields.k ?? this.k;\n this.returnSourceDocuments =\n fields.returnSourceDocuments ?? this.returnSourceDocuments;\n }\n\n /** @ignore */\n async _call(\n values: ChainValues,\n runManager?: CallbackManagerForChainRun\n ): Promise<ChainValues> {\n if (!(this.inputKey in values)) {\n throw new Error(`Question key ${this.inputKey} not found.`);\n }\n const question: string = values[this.inputKey];\n const docs = await this.vectorstore.similaritySearch(\n question,\n this.k,\n values.filter,\n runManager?.getChild(\"vectorstore\")\n );\n const inputs = { question, input_documents: docs };\n const result = await this.combineDocumentsChain.call(\n inputs,\n runManager?.getChild(\"combine_documents\")\n );\n if (this.returnSourceDocuments) {\n return {\n ...result,\n sourceDocuments: docs,\n };\n }\n return result;\n }\n\n _chainType() {\n return \"vector_db_qa\" as const;\n }\n\n static async deserialize(\n data: SerializedVectorDBQAChain,\n values: LoadValues\n ) {\n if (!(\"vectorstore\" in values)) {\n throw new Error(\n `Need to pass in a vectorstore to deserialize VectorDBQAChain`\n );\n }\n const { vectorstore } = values;\n if (!data.combine_documents_chain) {\n throw new Error(\n `VectorDBQAChain must have combine_documents_chain in serialized data`\n );\n }\n\n return new VectorDBQAChain({\n combineDocumentsChain: await BaseChain.deserialize(\n data.combine_documents_chain\n ),\n k: data.k,\n vectorstore,\n });\n }\n\n serialize(): SerializedVectorDBQAChain {\n return {\n _type: this._chainType(),\n combine_documents_chain: this.combineDocumentsChain.serialize(),\n k: this.k,\n };\n }\n\n /**\n * Static method that creates a VectorDBQAChain instance from a\n * BaseLanguageModel and a vector store. It also accepts optional options\n * to customize the chain.\n * @param llm The BaseLanguageModel instance.\n * @param vectorstore The vector store used for similarity search.\n * @param options Optional options to customize the chain.\n * @returns A new instance of VectorDBQAChain.\n */\n static fromLLM(\n llm: BaseLanguageModelInterface,\n vectorstore: VectorStoreInterface,\n options?: Partial<\n Omit<VectorDBQAChainInput, \"combineDocumentsChain\" | \"vectorstore\">\n >\n ): VectorDBQAChain {\n const qaChain = loadQAStuffChain(llm);\n return new this({\n vectorstore,\n combineDocumentsChain: qaChain,\n ...options,\n });\n }\n}\n"],"mappings":";;;;;;;;;AA+BA,IAAa,kBAAb,MAAa,wBAAwB,UAA0C;CAC7E,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI;CAEJ,WAAW;CAEX,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAa;AACf,SAAO,KAAK,sBAAsB,WAAW,OAC3C,KAAK,wBAAwB,CAAC,kBAAkB,GAAG,EAAE,CACtD;;CAGH;CAEA;CAEA,wBAAwB;CAExB,YAAY,QAA8B;AACxC,QAAM,OAAO;AACb,OAAK,cAAc,OAAO;AAC1B,OAAK,wBAAwB,OAAO;AACpC,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,IAAI,OAAO,KAAK,KAAK;AAC1B,OAAK,wBACH,OAAO,yBAAyB,KAAK;;;CAIzC,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,YAAY,QACrB,OAAM,IAAI,MAAM,gBAAgB,KAAK,SAAS,aAAa;EAE7D,MAAM,WAAmB,OAAO,KAAK;EACrC,MAAM,OAAO,MAAM,KAAK,YAAY,iBAClC,UACA,KAAK,GACL,OAAO,QACP,YAAY,SAAS,cAAc,CACpC;EACD,MAAM,SAAS;GAAE;GAAU,iBAAiB;GAAM;EAClD,MAAM,SAAS,MAAM,KAAK,sBAAsB,KAC9C,QACA,YAAY,SAAS,oBAAoB,CAC1C;AACD,MAAI,KAAK,sBACP,QAAO;GACL,GAAG;GACH,iBAAiB;GAClB;AAEH,SAAO;;CAGT,aAAa;AACX,SAAO;;CAGT,aAAa,YACX,MACA,QACA;AACA,MAAI,EAAE,iBAAiB,QACrB,OAAM,IAAI,MACR,+DACD;EAEH,MAAM,EAAE,gBAAgB;AACxB,MAAI,CAAC,KAAK,wBACR,OAAM,IAAI,MACR,uEACD;AAGH,SAAO,IAAI,gBAAgB;GACzB,uBAAuB,MAAM,UAAU,YACrC,KAAK,wBACN;GACD,GAAG,KAAK;GACR;GACD,CAAC;;CAGJ,YAAuC;AACrC,SAAO;GACL,OAAO,KAAK,YAAY;GACxB,yBAAyB,KAAK,sBAAsB,WAAW;GAC/D,GAAG,KAAK;GACT;;;;;;;;;;;CAYH,OAAO,QACL,KACA,aACA,SAGiB;EACjB,MAAM,UAAU,iBAAiB,IAAI;AACrC,SAAO,IAAI,KAAK;GACd;GACA,uBAAuB;GACvB,GAAG;GACJ,CAAC"}
|