langchain 0.2.9 → 0.2.11
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/chat_models/universal.cjs +1 -0
- package/chat_models/universal.d.cts +1 -0
- package/chat_models/universal.d.ts +1 -0
- package/chat_models/universal.js +1 -0
- package/dist/agents/executor.cjs +6 -0
- package/dist/agents/executor.js +6 -0
- package/dist/chat_models/universal.cjs +600 -0
- package/dist/chat_models/universal.d.ts +115 -0
- package/dist/chat_models/universal.js +595 -0
- package/dist/document_loaders/web/assemblyai.cjs +9 -1
- package/dist/document_loaders/web/assemblyai.js +9 -1
- package/dist/experimental/chrome_ai/app/dist/bundle.cjs +1250 -0
- package/dist/experimental/chrome_ai/app/dist/bundle.d.ts +1 -0
- package/dist/experimental/chrome_ai/app/dist/bundle.js +1249 -0
- package/dist/load/import_constants.cjs +1 -0
- package/dist/load/import_constants.js +1 -0
- package/dist/retrievers/parent_document.cjs +1 -1
- package/dist/retrievers/parent_document.d.ts +1 -1
- package/dist/retrievers/parent_document.js +1 -1
- package/package.json +65 -6
- package/dist/agents/tests/agent.int.test.d.ts +0 -1
- package/dist/agents/tests/agent.int.test.js +0 -309
- package/dist/agents/tests/chat_convo_output_parser.test.d.ts +0 -1
- package/dist/agents/tests/chat_convo_output_parser.test.js +0 -91
- package/dist/agents/tests/create_openai_functions_agent.int.test.d.ts +0 -2
- package/dist/agents/tests/create_openai_functions_agent.int.test.js +0 -71
- package/dist/agents/tests/create_openai_tools_agent.int.test.d.ts +0 -1
- package/dist/agents/tests/create_openai_tools_agent.int.test.js +0 -75
- package/dist/agents/tests/create_react_agent.int.test.d.ts +0 -1
- package/dist/agents/tests/create_react_agent.int.test.js +0 -32
- package/dist/agents/tests/create_structured_chat_agent.int.test.d.ts +0 -1
- package/dist/agents/tests/create_structured_chat_agent.int.test.js +0 -32
- package/dist/agents/tests/create_tool_calling_agent.int.test.d.ts +0 -1
- package/dist/agents/tests/create_tool_calling_agent.int.test.js +0 -122
- package/dist/agents/tests/create_xml_agent.int.test.d.ts +0 -1
- package/dist/agents/tests/create_xml_agent.int.test.js +0 -32
- package/dist/agents/tests/json.test.d.ts +0 -1
- package/dist/agents/tests/json.test.js +0 -74
- package/dist/agents/tests/react.test.d.ts +0 -1
- package/dist/agents/tests/react.test.js +0 -44
- package/dist/agents/tests/runnable.int.test.d.ts +0 -1
- package/dist/agents/tests/runnable.int.test.js +0 -104
- package/dist/agents/tests/sql.test.d.ts +0 -1
- package/dist/agents/tests/sql.test.js +0 -133
- package/dist/agents/tests/structured_chat_output_parser.test.d.ts +0 -1
- package/dist/agents/tests/structured_chat_output_parser.test.js +0 -35
- package/dist/agents/tests/structured_chat_output_parser_with_retries.int.test.d.ts +0 -1
- package/dist/agents/tests/structured_chat_output_parser_with_retries.int.test.js +0 -44
- package/dist/agents/tests/structured_output_runnables.int.test.d.ts +0 -1
- package/dist/agents/tests/structured_output_runnables.int.test.js +0 -112
- package/dist/agents/toolkits/tests/conversational_retrieval.int.test.d.ts +0 -1
- package/dist/agents/toolkits/tests/conversational_retrieval.int.test.js +0 -41
- package/dist/cache/tests/file_system.int.test.d.ts +0 -1
- package/dist/cache/tests/file_system.int.test.js +0 -32
- package/dist/chains/openai_functions/tests/create_runnable_chains.int.test.d.ts +0 -1
- package/dist/chains/openai_functions/tests/create_runnable_chains.int.test.js +0 -139
- package/dist/chains/openai_functions/tests/extraction.int.test.d.ts +0 -1
- package/dist/chains/openai_functions/tests/extraction.int.test.js +0 -33
- package/dist/chains/openai_functions/tests/openapi.int.test.d.ts +0 -1
- package/dist/chains/openai_functions/tests/openapi.int.test.js +0 -130
- package/dist/chains/openai_functions/tests/openapi.test.d.ts +0 -1
- package/dist/chains/openai_functions/tests/openapi.test.js +0 -172
- package/dist/chains/openai_functions/tests/structured_output.int.test.d.ts +0 -1
- package/dist/chains/openai_functions/tests/structured_output.int.test.js +0 -40
- package/dist/chains/openai_functions/tests/structured_output.test.d.ts +0 -1
- package/dist/chains/openai_functions/tests/structured_output.test.js +0 -102
- package/dist/chains/openai_functions/tests/tagging.int.test.d.ts +0 -1
- package/dist/chains/openai_functions/tests/tagging.int.test.js +0 -21
- package/dist/chains/query_constructor/tests/query_chain.int.test.d.ts +0 -1
- package/dist/chains/query_constructor/tests/query_chain.int.test.js +0 -93
- package/dist/chains/query_constructor/tests/query_parser.test.d.ts +0 -1
- package/dist/chains/query_constructor/tests/query_parser.test.js +0 -28
- package/dist/chains/question_answering/tests/load.int.test.d.ts +0 -1
- package/dist/chains/question_answering/tests/load.int.test.js +0 -39
- package/dist/chains/router/tests/multi_prompt.int.test.d.ts +0 -1
- package/dist/chains/router/tests/multi_prompt.int.test.js +0 -45
- package/dist/chains/router/tests/multi_prompt.test.d.ts +0 -1
- package/dist/chains/router/tests/multi_prompt.test.js +0 -62
- package/dist/chains/router/tests/multi_retrieval_qa.int.test.d.ts +0 -1
- package/dist/chains/router/tests/multi_retrieval_qa.int.test.js +0 -67
- package/dist/chains/router/tests/multi_retrieval_qa.test.d.ts +0 -1
- package/dist/chains/router/tests/multi_retrieval_qa.test.js +0 -125
- package/dist/chains/summarization/tests/load.int.test.d.ts +0 -1
- package/dist/chains/summarization/tests/load.int.test.js +0 -37
- package/dist/chains/tests/api_chain.int.test.d.ts +0 -1
- package/dist/chains/tests/api_chain.int.test.js +0 -55
- package/dist/chains/tests/combine_docs_chain.int.test.d.ts +0 -1
- package/dist/chains/tests/combine_docs_chain.int.test.js +0 -50
- package/dist/chains/tests/combine_docs_chain.test.d.ts +0 -1
- package/dist/chains/tests/combine_docs_chain.test.js +0 -98
- package/dist/chains/tests/constitutional_chain.int.test.d.ts +0 -1
- package/dist/chains/tests/constitutional_chain.int.test.js +0 -30
- package/dist/chains/tests/constitutional_chain.test.d.ts +0 -1
- package/dist/chains/tests/constitutional_chain.test.js +0 -63
- package/dist/chains/tests/conversation_chain.int.test.d.ts +0 -1
- package/dist/chains/tests/conversation_chain.int.test.js +0 -9
- package/dist/chains/tests/conversational_retrieval_chain.int.test.d.ts +0 -1
- package/dist/chains/tests/conversational_retrieval_chain.int.test.js +0 -243
- package/dist/chains/tests/example_data/open_meteo_docs.d.ts +0 -1
- package/dist/chains/tests/example_data/open_meteo_docs.js +0 -29
- package/dist/chains/tests/history_aware_retriever.int.test.d.ts +0 -1
- package/dist/chains/tests/history_aware_retriever.int.test.js +0 -41
- package/dist/chains/tests/history_aware_retriever.test.d.ts +0 -1
- package/dist/chains/tests/history_aware_retriever.test.js +0 -27
- package/dist/chains/tests/llm_chain.int.test.d.ts +0 -1
- package/dist/chains/tests/llm_chain.int.test.js +0 -119
- package/dist/chains/tests/openai_moderation.int.test.d.ts +0 -1
- package/dist/chains/tests/openai_moderation.int.test.js +0 -30
- package/dist/chains/tests/retrieval_chain.int.test.d.ts +0 -1
- package/dist/chains/tests/retrieval_chain.int.test.js +0 -69
- package/dist/chains/tests/retrieval_chain.test.d.ts +0 -1
- package/dist/chains/tests/retrieval_chain.test.js +0 -36
- package/dist/chains/tests/sequential_chain.int.test.d.ts +0 -1
- package/dist/chains/tests/sequential_chain.int.test.js +0 -88
- package/dist/chains/tests/sequential_chain.test.d.ts +0 -1
- package/dist/chains/tests/sequential_chain.test.js +0 -295
- package/dist/chains/tests/simple_sequential_chain.int.test.d.ts +0 -1
- package/dist/chains/tests/simple_sequential_chain.int.test.js +0 -81
- package/dist/chains/tests/simple_sequential_chain.test.d.ts +0 -1
- package/dist/chains/tests/simple_sequential_chain.test.js +0 -128
- package/dist/chains/tests/sql_db_chain.int.test.d.ts +0 -1
- package/dist/chains/tests/sql_db_chain.int.test.js +0 -125
- package/dist/chains/tests/transform.test.d.ts +0 -1
- package/dist/chains/tests/transform.test.js +0 -12
- package/dist/chains/tests/vector_db_qa_chain.int.test.d.ts +0 -1
- package/dist/chains/tests/vector_db_qa_chain.int.test.js +0 -45
- package/dist/document_loaders/tests/assemblyai.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/assemblyai.int.test.js +0 -111
- package/dist/document_loaders/tests/chatgpt-blob.test.d.ts +0 -1
- package/dist/document_loaders/tests/chatgpt-blob.test.js +0 -30
- package/dist/document_loaders/tests/chatgpt.test.d.ts +0 -1
- package/dist/document_loaders/tests/chatgpt.test.js +0 -29
- package/dist/document_loaders/tests/cheerio.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/cheerio.int.test.js +0 -21
- package/dist/document_loaders/tests/college_confidential.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/college_confidential.int.test.js +0 -6
- package/dist/document_loaders/tests/confluence.test.d.ts +0 -1
- package/dist/document_loaders/tests/confluence.test.js +0 -52
- package/dist/document_loaders/tests/couchbase.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/couchbase.int.test.js +0 -28
- package/dist/document_loaders/tests/csv-blob.test.d.ts +0 -1
- package/dist/document_loaders/tests/csv-blob.test.js +0 -53
- package/dist/document_loaders/tests/csv.test.d.ts +0 -1
- package/dist/document_loaders/tests/csv.test.js +0 -41
- package/dist/document_loaders/tests/directory.test.d.ts +0 -1
- package/dist/document_loaders/tests/directory.test.js +0 -38
- package/dist/document_loaders/tests/docx.test.d.ts +0 -1
- package/dist/document_loaders/tests/docx.test.js +0 -11
- package/dist/document_loaders/tests/epub.test.d.ts +0 -1
- package/dist/document_loaders/tests/epub.test.js +0 -18
- package/dist/document_loaders/tests/example_data/github_api_responses.d.ts +0 -5
- package/dist/document_loaders/tests/example_data/github_api_responses.js +0 -91
- package/dist/document_loaders/tests/figma.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/figma.int.test.js +0 -13
- package/dist/document_loaders/tests/firecrawl.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/firecrawl.int.test.js +0 -30
- package/dist/document_loaders/tests/gitbook.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/gitbook.int.test.js +0 -14
- package/dist/document_loaders/tests/github.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/github.int.test.js +0 -86
- package/dist/document_loaders/tests/github.test.d.ts +0 -1
- package/dist/document_loaders/tests/github.test.js +0 -51
- package/dist/document_loaders/tests/hn.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/hn.int.test.js +0 -6
- package/dist/document_loaders/tests/imsdb.test.d.ts +0 -1
- package/dist/document_loaders/tests/imsdb.test.js +0 -6
- package/dist/document_loaders/tests/json-blob.test.d.ts +0 -1
- package/dist/document_loaders/tests/json-blob.test.js +0 -91
- package/dist/document_loaders/tests/json.test.d.ts +0 -1
- package/dist/document_loaders/tests/json.test.js +0 -69
- package/dist/document_loaders/tests/jsonl-blob.test.d.ts +0 -1
- package/dist/document_loaders/tests/jsonl-blob.test.js +0 -46
- package/dist/document_loaders/tests/jsonl.test.d.ts +0 -1
- package/dist/document_loaders/tests/jsonl.test.js +0 -15
- package/dist/document_loaders/tests/multi_file.test.d.ts +0 -1
- package/dist/document_loaders/tests/multi_file.test.js +0 -49
- package/dist/document_loaders/tests/notion.test.d.ts +0 -1
- package/dist/document_loaders/tests/notion.test.js +0 -11
- package/dist/document_loaders/tests/notionapi.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/notionapi.int.test.js +0 -80
- package/dist/document_loaders/tests/notionapi.test.d.ts +0 -1
- package/dist/document_loaders/tests/notionapi.test.js +0 -84
- package/dist/document_loaders/tests/notiondb.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/notiondb.int.test.js +0 -13
- package/dist/document_loaders/tests/obsidian.test.d.ts +0 -1
- package/dist/document_loaders/tests/obsidian.test.js +0 -119
- package/dist/document_loaders/tests/pdf-blob.test.d.ts +0 -1
- package/dist/document_loaders/tests/pdf-blob.test.js +0 -44
- package/dist/document_loaders/tests/pdf.test.d.ts +0 -1
- package/dist/document_loaders/tests/pdf.test.js +0 -25
- package/dist/document_loaders/tests/playwright_web.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/playwright_web.int.test.js +0 -27
- package/dist/document_loaders/tests/pptx.test.d.ts +0 -1
- package/dist/document_loaders/tests/pptx.test.js +0 -17
- package/dist/document_loaders/tests/puppeteer.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/puppeteer.int.test.js +0 -47
- package/dist/document_loaders/tests/recursive_url.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/recursive_url.int.test.js +0 -64
- package/dist/document_loaders/tests/s3.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/s3.int.test.js +0 -48
- package/dist/document_loaders/tests/searchapi.test.d.ts +0 -1
- package/dist/document_loaders/tests/searchapi.test.js +0 -29
- package/dist/document_loaders/tests/serpapi.test.d.ts +0 -1
- package/dist/document_loaders/tests/serpapi.test.js +0 -21
- package/dist/document_loaders/tests/sitemap.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/sitemap.int.test.js +0 -28
- package/dist/document_loaders/tests/sonix_audio.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/sonix_audio.int.test.js +0 -55
- package/dist/document_loaders/tests/sort_xyz_blockchain.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/sort_xyz_blockchain.int.test.js +0 -38
- package/dist/document_loaders/tests/srt-blob.test.d.ts +0 -1
- package/dist/document_loaders/tests/srt-blob.test.js +0 -18
- package/dist/document_loaders/tests/srt.test.d.ts +0 -1
- package/dist/document_loaders/tests/srt.test.js +0 -16
- package/dist/document_loaders/tests/text-blob.test.d.ts +0 -1
- package/dist/document_loaders/tests/text-blob.test.js +0 -14
- package/dist/document_loaders/tests/text.test.d.ts +0 -1
- package/dist/document_loaders/tests/text.test.js +0 -22
- package/dist/document_loaders/tests/unstructured.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/unstructured.int.test.js +0 -58
- package/dist/document_loaders/tests/webpdf.int.test.d.ts +0 -1
- package/dist/document_loaders/tests/webpdf.int.test.js +0 -90
- package/dist/document_transformers/tests/openai_functions.int.test.d.ts +0 -1
- package/dist/document_transformers/tests/openai_functions.int.test.js +0 -40
- package/dist/embeddings/tests/cache.test.d.ts +0 -1
- package/dist/embeddings/tests/cache.test.js +0 -24
- package/dist/embeddings/tests/fake.test.d.ts +0 -1
- package/dist/embeddings/tests/fake.test.js +0 -34
- package/dist/evaluation/agents/tests/trajectory_eval_chain.int.test.d.ts +0 -1
- package/dist/evaluation/agents/tests/trajectory_eval_chain.int.test.js +0 -33
- package/dist/evaluation/comparison/tests/pairwise_eval_chain.int.test.d.ts +0 -1
- package/dist/evaluation/comparison/tests/pairwise_eval_chain.int.test.js +0 -46
- package/dist/evaluation/criteria/tests/criteria_eval_chain.int.test.d.ts +0 -1
- package/dist/evaluation/criteria/tests/criteria_eval_chain.int.test.js +0 -108
- package/dist/evaluation/embedding_distance/tests/embedding_distance_eval_chain.int.test.d.ts +0 -1
- package/dist/evaluation/embedding_distance/tests/embedding_distance_eval_chain.int.test.js +0 -26
- package/dist/evaluation/qa/tests/eval_chain.int.test.d.ts +0 -1
- package/dist/evaluation/qa/tests/eval_chain.int.test.js +0 -27
- package/dist/experimental/autogpt/tests/output_parser.test.d.ts +0 -1
- package/dist/experimental/autogpt/tests/output_parser.test.js +0 -8
- package/dist/experimental/autogpt/tests/prompt.test.d.ts +0 -1
- package/dist/experimental/autogpt/tests/prompt.test.js +0 -69
- package/dist/experimental/autogpt/tests/prompt_generator.test.d.ts +0 -1
- package/dist/experimental/autogpt/tests/prompt_generator.test.js +0 -91
- package/dist/experimental/chains/tests/violation_of_expectations_chain.int.test.d.ts +0 -1
- package/dist/experimental/chains/tests/violation_of_expectations_chain.int.test.js +0 -26
- package/dist/experimental/generative_agents/tests/generative_agent.int.test.d.ts +0 -1
- package/dist/experimental/generative_agents/tests/generative_agent.int.test.js +0 -304
- package/dist/experimental/masking/tests/masking-extended.test.d.ts +0 -1
- package/dist/experimental/masking/tests/masking-extended.test.js +0 -58
- package/dist/experimental/masking/tests/masking.test.d.ts +0 -1
- package/dist/experimental/masking/tests/masking.test.js +0 -388
- package/dist/experimental/openai_assistant/tests/openai_assistant.int.test.d.ts +0 -1
- package/dist/experimental/openai_assistant/tests/openai_assistant.int.test.js +0 -203
- package/dist/experimental/openai_files/tests/openai_file.int.test.d.ts +0 -1
- package/dist/experimental/openai_files/tests/openai_file.int.test.js +0 -87
- package/dist/experimental/plan_and_execute/tests/plan_and_execute.int.test.d.ts +0 -1
- package/dist/experimental/plan_and_execute/tests/plan_and_execute.int.test.js +0 -54
- package/dist/experimental/prompts/tests/handlebars.test.d.ts +0 -1
- package/dist/experimental/prompts/tests/handlebars.test.js +0 -24
- package/dist/experimental/tools/tests/pyinterpreter.int.test.d.ts +0 -1
- package/dist/experimental/tools/tests/pyinterpreter.int.test.js +0 -22
- package/dist/load/tests/cross_language.test.d.ts +0 -1
- package/dist/load/tests/cross_language.test.js +0 -83
- package/dist/load/tests/load.int.test.d.ts +0 -1
- package/dist/load/tests/load.int.test.js +0 -9
- package/dist/load/tests/load.test.d.ts +0 -1
- package/dist/load/tests/load.test.js +0 -412
- package/dist/memory/tests/buffer_memory.test.d.ts +0 -1
- package/dist/memory/tests/buffer_memory.test.js +0 -34
- package/dist/memory/tests/buffer_token_memory.int.test.d.ts +0 -1
- package/dist/memory/tests/buffer_token_memory.int.test.js +0 -47
- package/dist/memory/tests/buffer_window_memory.test.d.ts +0 -1
- package/dist/memory/tests/buffer_window_memory.test.js +0 -42
- package/dist/memory/tests/combined_memory.int.test.d.ts +0 -1
- package/dist/memory/tests/combined_memory.int.test.js +0 -74
- package/dist/memory/tests/entity_memory.int.test.d.ts +0 -1
- package/dist/memory/tests/entity_memory.int.test.js +0 -79
- package/dist/memory/tests/entity_memory.test.d.ts +0 -1
- package/dist/memory/tests/entity_memory.test.js +0 -48
- package/dist/memory/tests/summary.int.test.d.ts +0 -1
- package/dist/memory/tests/summary.int.test.js +0 -50
- package/dist/memory/tests/summary_buffer.int.test.d.ts +0 -1
- package/dist/memory/tests/summary_buffer.int.test.js +0 -55
- package/dist/memory/tests/vector_store_memory.int.test.d.ts +0 -1
- package/dist/memory/tests/vector_store_memory.int.test.js +0 -55
- package/dist/output_parsers/tests/combining.int.test.d.ts +0 -1
- package/dist/output_parsers/tests/combining.int.test.js +0 -26
- package/dist/output_parsers/tests/combining.test.d.ts +0 -1
- package/dist/output_parsers/tests/combining.test.js +0 -54
- package/dist/output_parsers/tests/datetime.test.d.ts +0 -1
- package/dist/output_parsers/tests/datetime.test.js +0 -14
- package/dist/output_parsers/tests/expression.test.d.ts +0 -1
- package/dist/output_parsers/tests/expression.test.js +0 -339
- package/dist/output_parsers/tests/http_response.test.d.ts +0 -1
- package/dist/output_parsers/tests/http_response.test.js +0 -39
- package/dist/output_parsers/tests/list.test.d.ts +0 -1
- package/dist/output_parsers/tests/list.test.js +0 -27
- package/dist/output_parsers/tests/openai_functions.int.test.d.ts +0 -1
- package/dist/output_parsers/tests/openai_functions.int.test.js +0 -89
- package/dist/output_parsers/tests/openai_tools.int.test.d.ts +0 -1
- package/dist/output_parsers/tests/openai_tools.int.test.js +0 -36
- package/dist/output_parsers/tests/structured.int.test.d.ts +0 -1
- package/dist/output_parsers/tests/structured.int.test.js +0 -150
- package/dist/prompts/tests/selectors.test.d.ts +0 -1
- package/dist/prompts/tests/selectors.test.js +0 -59
- package/dist/retrievers/self_query/tests/memory_self_query.int.test.d.ts +0 -1
- package/dist/retrievers/self_query/tests/memory_self_query.int.test.js +0 -330
- package/dist/retrievers/tests/chain_extract.int.test.d.ts +0 -1
- package/dist/retrievers/tests/chain_extract.int.test.js +0 -32
- package/dist/retrievers/tests/ensemble_retriever.int.test.d.ts +0 -1
- package/dist/retrievers/tests/ensemble_retriever.int.test.js +0 -74
- package/dist/retrievers/tests/hyde.int.test.d.ts +0 -1
- package/dist/retrievers/tests/hyde.int.test.js +0 -44
- package/dist/retrievers/tests/matryoshka_retriever.int.test.d.ts +0 -1
- package/dist/retrievers/tests/matryoshka_retriever.int.test.js +0 -113
- package/dist/retrievers/tests/multi_query.int.test.d.ts +0 -1
- package/dist/retrievers/tests/multi_query.int.test.js +0 -45
- package/dist/retrievers/tests/parent_document.int.test.d.ts +0 -1
- package/dist/retrievers/tests/parent_document.int.test.js +0 -122
- package/dist/retrievers/tests/score_threshold.int.test.d.ts +0 -1
- package/dist/retrievers/tests/score_threshold.int.test.js +0 -83
- package/dist/retrievers/tests/time_weighted.test.d.ts +0 -1
- package/dist/retrievers/tests/time_weighted.test.js +0 -320
- package/dist/retrievers/tests/vectorstores.test.d.ts +0 -1
- package/dist/retrievers/tests/vectorstores.test.js +0 -50
- package/dist/smith/tests/run_on_dataset.int.test.d.ts +0 -1
- package/dist/smith/tests/run_on_dataset.int.test.js +0 -257
- package/dist/smith/tests/runner_utils.int.test.d.ts +0 -9
- package/dist/smith/tests/runner_utils.int.test.js +0 -234
- package/dist/storage/tests/file_system.test.d.ts +0 -1
- package/dist/storage/tests/file_system.test.js +0 -81
- package/dist/tools/tests/chain.test.d.ts +0 -1
- package/dist/tools/tests/chain.test.js +0 -136
- package/dist/tools/tests/webbrowser.int.test.d.ts +0 -1
- package/dist/tools/tests/webbrowser.int.test.js +0 -80
- package/dist/tools/tests/webbrowser.test.d.ts +0 -1
- package/dist/tools/tests/webbrowser.test.js +0 -21
- package/dist/util/tests/async_caller.int.test.d.ts +0 -1
- package/dist/util/tests/async_caller.int.test.js +0 -34
- package/dist/util/tests/azure.test.d.ts +0 -1
- package/dist/util/tests/azure.test.js +0 -42
- package/dist/util/tests/openai-stream.test.d.ts +0 -1
- package/dist/util/tests/openai-stream.test.js +0 -135
- package/dist/util/tests/set.test.d.ts +0 -1
- package/dist/util/tests/set.test.js +0 -36
- package/dist/util/tests/sql_utils.test.d.ts +0 -1
- package/dist/util/tests/sql_utils.test.js +0 -50
- package/dist/vectorstores/tests/memory.test.d.ts +0 -1
- package/dist/vectorstores/tests/memory.test.js +0 -78
|
@@ -1,388 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-promise-executor-return */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
-
// yarn test:single src/experimental/masking/tests/masking.test.ts
|
|
4
|
-
import { jest } from "@jest/globals";
|
|
5
|
-
import { MaskingParser, RegexMaskingTransformer, } from "../index.js";
|
|
6
|
-
describe("MaskingParser and PIIMaskingTransformer", () => {
|
|
7
|
-
describe("Masking with Static Identifiers", () => {
|
|
8
|
-
let maskingParser;
|
|
9
|
-
let piiMaskingTransformer;
|
|
10
|
-
const emailPattern = { regex: /\S+@\S+\.\S+/, replacement: "[email]" };
|
|
11
|
-
const phonePattern = { regex: /\d{3}-\d{3}-\d{4}/, replacement: "[phone]" };
|
|
12
|
-
beforeEach(() => {
|
|
13
|
-
piiMaskingTransformer = new RegexMaskingTransformer({
|
|
14
|
-
email: emailPattern,
|
|
15
|
-
phone: phonePattern,
|
|
16
|
-
});
|
|
17
|
-
maskingParser = new MaskingParser();
|
|
18
|
-
maskingParser.addTransformer(piiMaskingTransformer);
|
|
19
|
-
});
|
|
20
|
-
it("masks single occurrences of PII with static identifiers", async () => {
|
|
21
|
-
const message = "Contact me at jane.doe@email.com or 555-123-4567.";
|
|
22
|
-
const expectedMaskedMessage = "Contact me at [email] or [phone].";
|
|
23
|
-
const maskedMessage = await maskingParser.mask(message);
|
|
24
|
-
expect(maskedMessage).toBe(expectedMaskedMessage);
|
|
25
|
-
});
|
|
26
|
-
it("rehydrates static masked data to its original form", async () => {
|
|
27
|
-
const maskedMessage = "Contact me at [email] or [phone].";
|
|
28
|
-
const expectedOriginalMessage = "Contact me at jane.doe@email.com or 555-123-4567.";
|
|
29
|
-
await maskingParser.mask(expectedOriginalMessage); // Masking original message
|
|
30
|
-
const rehydratedMessage = await maskingParser.rehydrate(maskedMessage);
|
|
31
|
-
expect(rehydratedMessage).toBe(expectedOriginalMessage);
|
|
32
|
-
});
|
|
33
|
-
function generateLargeMessage() {
|
|
34
|
-
let largeMessage = "";
|
|
35
|
-
for (let i = 0; i < 10000; i += 1) {
|
|
36
|
-
// Adjust the number for desired message size
|
|
37
|
-
largeMessage += `User${i}: jane.doe${i}@email.com, 555-123-${i
|
|
38
|
-
.toString()
|
|
39
|
-
.padStart(4, "0")}. `;
|
|
40
|
-
}
|
|
41
|
-
return largeMessage;
|
|
42
|
-
}
|
|
43
|
-
describe("Performance Testing", () => {
|
|
44
|
-
it("efficiently processes large data sets", async () => {
|
|
45
|
-
const largeMessage = generateLargeMessage();
|
|
46
|
-
const startTime = performance.now();
|
|
47
|
-
const maskedMessage = await maskingParser.mask(largeMessage);
|
|
48
|
-
const endTime = performance.now();
|
|
49
|
-
const someAcceptableDuration = 5000; // Set this to a duration you consider acceptable, e.g., 5000 milliseconds (5 seconds)
|
|
50
|
-
expect(maskedMessage).toBeDefined();
|
|
51
|
-
expect(endTime - startTime).toBeLessThan(someAcceptableDuration);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
describe("Masking with Dynamic Identifiers", () => {
|
|
56
|
-
let maskingParser;
|
|
57
|
-
let piiMaskingTransformer;
|
|
58
|
-
const emailMask = () => `[email-${Math.random().toString(16).slice(2)}]`;
|
|
59
|
-
const phoneMask = () => `[phone-${Math.random().toString(16).slice(2)}]`;
|
|
60
|
-
beforeEach(() => {
|
|
61
|
-
piiMaskingTransformer = new RegexMaskingTransformer({
|
|
62
|
-
email: { regex: /\S+@\S+\.\S+/g, mask: emailMask },
|
|
63
|
-
phone: { regex: /\d{3}-\d{3}-\d{4}/g, mask: phoneMask },
|
|
64
|
-
});
|
|
65
|
-
maskingParser = new MaskingParser();
|
|
66
|
-
maskingParser.addTransformer(piiMaskingTransformer);
|
|
67
|
-
});
|
|
68
|
-
it("masks multiple occurrences of different PII with unique identifiers", async () => {
|
|
69
|
-
const message = "Contact me at jane.doe@email.com or 555-123-4567. Also reach me at john.smith@email.com";
|
|
70
|
-
const maskedMessage = await maskingParser.mask(message);
|
|
71
|
-
expect(maskedMessage).toMatch(/\[email-[a-f0-9]+\]/g);
|
|
72
|
-
expect(maskedMessage).toMatch(/\[phone-[a-f0-9]+\]/g);
|
|
73
|
-
expect((maskedMessage.match(/\[email-[a-f0-9]+\]/g) || []).length).toBe(2);
|
|
74
|
-
expect((maskedMessage.match(/\[phone-[a-f0-9]+\]/g) || []).length).toBe(1);
|
|
75
|
-
});
|
|
76
|
-
it("rehydrates dynamic masked data to its original form", async () => {
|
|
77
|
-
const originalMessage = "Contact me at jane.doe@email.com or 555-123-4567. Also reach me at john.smith@email.com";
|
|
78
|
-
const maskedMessage = await maskingParser.mask(originalMessage);
|
|
79
|
-
const rehydratedMessage = await maskingParser.rehydrate(maskedMessage);
|
|
80
|
-
expect(rehydratedMessage).toBe(originalMessage);
|
|
81
|
-
});
|
|
82
|
-
it("masks identical PII with consistent dynamic identifiers", async () => {
|
|
83
|
-
const message = "Contact me at jane.doe@email.com or 555-123-4567. Also reach me at john.smith@email.com and 555-123-4567";
|
|
84
|
-
const maskedMessage = await maskingParser.mask(message);
|
|
85
|
-
expect(maskedMessage).toMatch(/\[email-[a-f0-9]+\]/g);
|
|
86
|
-
expect(maskedMessage).toMatch(/\[phone-[a-f0-9]+\]/g);
|
|
87
|
-
expect((maskedMessage.match(/\[email-[a-f0-9]+\]/g) || []).length).toBe(2);
|
|
88
|
-
expect((maskedMessage.match(/\[phone-[a-f0-9]+\]/g) || []).length).toBe(2);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
describe("PIIMaskingTransformer with Default Hash Function", () => {
|
|
92
|
-
let maskingParser;
|
|
93
|
-
let piiMaskingTransformer;
|
|
94
|
-
const emailPattern = { regex: /\S+@\S+\.\S+/, replacement: "[email]" };
|
|
95
|
-
const phonePattern = { regex: /\d{3}-\d{3}-\d{4}/, replacement: "[phone]" };
|
|
96
|
-
beforeEach(() => {
|
|
97
|
-
piiMaskingTransformer = new RegexMaskingTransformer({
|
|
98
|
-
email: emailPattern,
|
|
99
|
-
phone: phonePattern,
|
|
100
|
-
});
|
|
101
|
-
maskingParser = new MaskingParser();
|
|
102
|
-
maskingParser.addTransformer(piiMaskingTransformer);
|
|
103
|
-
});
|
|
104
|
-
it("should mask email and phone using default hash function", async () => {
|
|
105
|
-
const piiMaskingTransformer = new RegexMaskingTransformer({
|
|
106
|
-
email: emailPattern,
|
|
107
|
-
phone: phonePattern,
|
|
108
|
-
});
|
|
109
|
-
const maskingParser = new MaskingParser();
|
|
110
|
-
maskingParser.addTransformer(piiMaskingTransformer);
|
|
111
|
-
const message = "My email is jane.doe@email.com and phone is 555-123-4567.";
|
|
112
|
-
const maskedMessage = await maskingParser.mask(message);
|
|
113
|
-
expect(maskedMessage).toContain("[email]");
|
|
114
|
-
expect(maskedMessage).toContain("[phone]");
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
describe("PIIMaskingTransformer with Custom Hash Function", () => {
|
|
118
|
-
const emailPattern = { regex: /\S+@\S+\.\S+/, replacement: "[email]" };
|
|
119
|
-
const phonePattern = { regex: /\d{3}-\d{3}-\d{4}/, replacement: "[phone]" };
|
|
120
|
-
let maskingParser;
|
|
121
|
-
let piiMaskingTransformer;
|
|
122
|
-
beforeEach(() => {
|
|
123
|
-
piiMaskingTransformer = new RegexMaskingTransformer({
|
|
124
|
-
email: emailPattern,
|
|
125
|
-
phone: phonePattern,
|
|
126
|
-
});
|
|
127
|
-
maskingParser = new MaskingParser();
|
|
128
|
-
maskingParser.addTransformer(piiMaskingTransformer);
|
|
129
|
-
});
|
|
130
|
-
// A simple hash function that creates a mock hash representation of the input.
|
|
131
|
-
// This is just for demonstration purposes and not a secure hashing method.
|
|
132
|
-
const customHashFunction = (input) => input
|
|
133
|
-
.split("")
|
|
134
|
-
.map(() => "*")
|
|
135
|
-
.join("");
|
|
136
|
-
it("should mask email and phone using custom hash function", async () => {
|
|
137
|
-
const piiMaskingTransformer = new RegexMaskingTransformer({
|
|
138
|
-
email: {
|
|
139
|
-
regex: /\S+@\S+\.\S+/,
|
|
140
|
-
mask: (match) => `custom-email-${customHashFunction(match)}`,
|
|
141
|
-
},
|
|
142
|
-
phone: {
|
|
143
|
-
regex: /\d{3}-\d{3}-\d{4}/,
|
|
144
|
-
mask: (match) => `custom-phone-${customHashFunction(match)}`,
|
|
145
|
-
},
|
|
146
|
-
}, customHashFunction);
|
|
147
|
-
const maskingParser = new MaskingParser();
|
|
148
|
-
maskingParser.addTransformer(piiMaskingTransformer);
|
|
149
|
-
const message = "Contact me at jane.doe@email.com or 555-123-4567.";
|
|
150
|
-
const maskedMessage = await maskingParser.mask(message);
|
|
151
|
-
// The lengths of the masked parts should be equal to the lengths of the original email and phone number.
|
|
152
|
-
const expectedEmailMask = `custom-email-${"*".repeat("jane.doe@email.com".length)}`;
|
|
153
|
-
const expectedPhoneMask = `custom-phone-${"*".repeat("555-123-4567".length)}`;
|
|
154
|
-
expect(maskedMessage).toContain(expectedEmailMask);
|
|
155
|
-
expect(maskedMessage).toContain(expectedPhoneMask);
|
|
156
|
-
});
|
|
157
|
-
it("should rehydrate masked data correctly using custom hash function", async () => {
|
|
158
|
-
const piiMaskingTransformer = new RegexMaskingTransformer({
|
|
159
|
-
email: {
|
|
160
|
-
regex: /\S+@\S+\.\S+/,
|
|
161
|
-
mask: (match) => `custom-email-${customHashFunction(match)}`,
|
|
162
|
-
},
|
|
163
|
-
phone: {
|
|
164
|
-
regex: /\d{3}-\d{3}-\d{4}/,
|
|
165
|
-
mask: (match) => `custom-phone-${customHashFunction(match)}`,
|
|
166
|
-
},
|
|
167
|
-
}, customHashFunction);
|
|
168
|
-
maskingParser.addTransformer(piiMaskingTransformer);
|
|
169
|
-
const originalMessage = "Contact me at jane.doe@email.com or 555-123-4567.";
|
|
170
|
-
const maskedMessage = await maskingParser.mask(originalMessage);
|
|
171
|
-
const rehydratedMessage = await maskingParser.rehydrate(maskedMessage);
|
|
172
|
-
expect(rehydratedMessage).toBe(originalMessage);
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
describe("Error Handling in MaskingParser", () => {
|
|
176
|
-
let maskingParser;
|
|
177
|
-
let piiMaskingTransformer;
|
|
178
|
-
beforeEach(() => {
|
|
179
|
-
piiMaskingTransformer = new RegexMaskingTransformer({});
|
|
180
|
-
maskingParser = new MaskingParser();
|
|
181
|
-
});
|
|
182
|
-
it("throws an error when no transformers are added and parse is called", async () => {
|
|
183
|
-
const message = "Some message";
|
|
184
|
-
await expect(maskingParser.mask(message)).rejects.toThrow("MaskingParser.mask Error: No transformers have been added. Please add at least one transformer before parsing.");
|
|
185
|
-
});
|
|
186
|
-
it("throws an error when no transformers are added and rehydrate is called", async () => {
|
|
187
|
-
const message = "Some masked message";
|
|
188
|
-
await expect(maskingParser.rehydrate(message)).rejects.toThrow("MaskingParser.rehydrate Error: No transformers have been added. Please add at least one transformer before rehydrating.");
|
|
189
|
-
});
|
|
190
|
-
it("throws an error for invalid message type in parse", async () => {
|
|
191
|
-
const invalidMessage = 123; // intentionally incorrect type
|
|
192
|
-
maskingParser.addTransformer(piiMaskingTransformer); // Add a transformer
|
|
193
|
-
await expect(maskingParser.mask(invalidMessage)).rejects.toThrow("The 'message' argument must be a string.");
|
|
194
|
-
});
|
|
195
|
-
it("throws an error for invalid message type in rehydrate", async () => {
|
|
196
|
-
const invalidMessage = 123; // intentionally incorrect type
|
|
197
|
-
await expect(maskingParser.rehydrate(invalidMessage)).rejects.toThrow("The 'message' argument must be a string.");
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
describe("Error Handling in PIIMaskingTransformer", () => {
|
|
201
|
-
it("throws an error for invalid message type in transform", async () => {
|
|
202
|
-
const transformer = new RegexMaskingTransformer({});
|
|
203
|
-
const invalidMessage = 123; // intentionally incorrect type
|
|
204
|
-
const state = new Map();
|
|
205
|
-
await expect(transformer.transform(invalidMessage, state)).rejects.toThrow("The 'message' argument must be a string.");
|
|
206
|
-
});
|
|
207
|
-
it("throws an error for invalid state type in transform", async () => {
|
|
208
|
-
const transformer = new RegexMaskingTransformer({});
|
|
209
|
-
const message = "Some message";
|
|
210
|
-
const invalidState = {}; // intentionally incorrect type
|
|
211
|
-
await expect(transformer.transform(message, invalidState)).rejects.toThrow("The 'state' argument must be an instance of Map.");
|
|
212
|
-
});
|
|
213
|
-
it("throws an error when initialized with invalid regex pattern", () => {
|
|
214
|
-
expect(() => {
|
|
215
|
-
const transformer = new RegexMaskingTransformer({
|
|
216
|
-
// @ts-expect-error Should throw with invalid regex
|
|
217
|
-
invalid: { regex: null },
|
|
218
|
-
});
|
|
219
|
-
console.log(transformer);
|
|
220
|
-
}).toThrow("Invalid pattern configuration.");
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
describe("MaskingParser Hooks", () => {
|
|
224
|
-
let maskingParser;
|
|
225
|
-
let piiMaskingTransformer;
|
|
226
|
-
const emailPattern = { regex: /\S+@\S+\.\S+/, replacement: "[email]" };
|
|
227
|
-
beforeEach(() => {
|
|
228
|
-
piiMaskingTransformer = new RegexMaskingTransformer({
|
|
229
|
-
email: emailPattern,
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
// Masking hooks
|
|
233
|
-
it("handles synchronous onMaskingStart and onMaskingEnd hooks during parse", async () => {
|
|
234
|
-
const onMaskingStart = jest.fn(); // Synchronous mock
|
|
235
|
-
const onMaskingEnd = jest.fn(); // Synchronous mock
|
|
236
|
-
maskingParser = new MaskingParser({
|
|
237
|
-
transformers: [piiMaskingTransformer],
|
|
238
|
-
onMaskingStart,
|
|
239
|
-
onMaskingEnd,
|
|
240
|
-
});
|
|
241
|
-
const message = "Contact me at jane.doe@email.com";
|
|
242
|
-
await maskingParser.mask(message);
|
|
243
|
-
expect(onMaskingStart).toHaveBeenCalledWith(message);
|
|
244
|
-
expect(onMaskingEnd).toHaveBeenCalled();
|
|
245
|
-
});
|
|
246
|
-
it("handles asynchronous onMaskingStart and onMaskingEnd hooks during parse", async () => {
|
|
247
|
-
const onMaskingStart = jest.fn(() => Promise.resolve()); // Correctly mocked as an async function
|
|
248
|
-
const onMaskingEnd = jest.fn(() => Promise.resolve()); // Correctly mocked as an async function
|
|
249
|
-
maskingParser = new MaskingParser({
|
|
250
|
-
transformers: [piiMaskingTransformer],
|
|
251
|
-
onMaskingStart,
|
|
252
|
-
onMaskingEnd,
|
|
253
|
-
});
|
|
254
|
-
const message = "Contact me at jane.doe@email.com";
|
|
255
|
-
await maskingParser.mask(message);
|
|
256
|
-
expect(onMaskingStart).toHaveBeenCalledWith(message);
|
|
257
|
-
expect(onMaskingEnd).toHaveBeenCalled();
|
|
258
|
-
});
|
|
259
|
-
it("handles errors in synchronous onMaskingStart and onMaskingEnd hooks during parse", async () => {
|
|
260
|
-
const error = new Error("Test Error");
|
|
261
|
-
const onMaskingStart = jest.fn(() => {
|
|
262
|
-
throw error;
|
|
263
|
-
}); // Synchronous mock that throws an error
|
|
264
|
-
const onMaskingEnd = jest.fn(() => {
|
|
265
|
-
throw error;
|
|
266
|
-
}); // Synchronous mock that throws an error
|
|
267
|
-
maskingParser = new MaskingParser({
|
|
268
|
-
transformers: [piiMaskingTransformer],
|
|
269
|
-
onMaskingStart,
|
|
270
|
-
onMaskingEnd,
|
|
271
|
-
});
|
|
272
|
-
const message = "Contact me at jane.doe@email.com";
|
|
273
|
-
await expect(maskingParser.mask(message)).rejects.toThrow(error);
|
|
274
|
-
expect(onMaskingStart).toHaveBeenCalledWith(message);
|
|
275
|
-
// onMaskingEnd should not be called because an error is thrown in onMaskingStart
|
|
276
|
-
expect(onMaskingEnd).not.toHaveBeenCalled();
|
|
277
|
-
});
|
|
278
|
-
it("handles errors in asynchronous onMaskingStart and onMaskingEnd hooks during parse", async () => {
|
|
279
|
-
const error = new Error("Test Error");
|
|
280
|
-
const onMaskingStart = jest.fn(() => Promise.reject(error)); // Asynchronous mock that rejects with an error
|
|
281
|
-
const onMaskingEnd = jest.fn(() => Promise.reject(error)); // Asynchronous mock that rejects with an error
|
|
282
|
-
maskingParser = new MaskingParser({
|
|
283
|
-
transformers: [piiMaskingTransformer],
|
|
284
|
-
onMaskingStart,
|
|
285
|
-
onMaskingEnd,
|
|
286
|
-
});
|
|
287
|
-
const message = "Contact me at jane.doe@email.com";
|
|
288
|
-
await expect(maskingParser.mask(message)).rejects.toThrow(error);
|
|
289
|
-
expect(onMaskingStart).toHaveBeenCalledWith(message);
|
|
290
|
-
// onMaskingEnd should not be called because an error is thrown in onMaskingStart
|
|
291
|
-
expect(onMaskingEnd).not.toHaveBeenCalled();
|
|
292
|
-
});
|
|
293
|
-
// Rehydration hooks
|
|
294
|
-
it("handles synchronous onRehydratingStart and onRehydratingEnd hooks during rehydrate", async () => {
|
|
295
|
-
const onRehydratingStart = jest.fn(); // Synchronous mock
|
|
296
|
-
const onRehydratingEnd = jest.fn(); // Synchronous mock
|
|
297
|
-
maskingParser = new MaskingParser({
|
|
298
|
-
transformers: [piiMaskingTransformer],
|
|
299
|
-
onRehydratingStart,
|
|
300
|
-
onRehydratingEnd,
|
|
301
|
-
});
|
|
302
|
-
const maskedMessage = await maskingParser.mask("Contact me at jane.doe@email.com");
|
|
303
|
-
await maskingParser.rehydrate(maskedMessage);
|
|
304
|
-
expect(onRehydratingStart).toHaveBeenCalledWith(maskedMessage);
|
|
305
|
-
expect(onRehydratingEnd).toHaveBeenCalled();
|
|
306
|
-
});
|
|
307
|
-
it("handles asynchronous onRehydratingStart and onRehydratingEnd hooks during rehydrate", async () => {
|
|
308
|
-
const onRehydratingStart = jest.fn(() => Promise.resolve()); // Asynchronous mock
|
|
309
|
-
const onRehydratingEnd = jest.fn(() => Promise.resolve()); // Asynchronous mock
|
|
310
|
-
maskingParser = new MaskingParser({
|
|
311
|
-
transformers: [piiMaskingTransformer],
|
|
312
|
-
onRehydratingStart,
|
|
313
|
-
onRehydratingEnd,
|
|
314
|
-
});
|
|
315
|
-
const maskedMessage = await maskingParser.mask("Contact me at jane.doe@email.com");
|
|
316
|
-
await maskingParser.rehydrate(maskedMessage);
|
|
317
|
-
expect(onRehydratingStart).toHaveBeenCalledWith(maskedMessage);
|
|
318
|
-
expect(onRehydratingEnd).toHaveBeenCalled();
|
|
319
|
-
});
|
|
320
|
-
it("handles errors in synchronous onRehydratingStart and onRehydratingEnd hooks during rehydrate", async () => {
|
|
321
|
-
const error = new Error("Test Error");
|
|
322
|
-
const onRehydratingStart = jest.fn(() => {
|
|
323
|
-
throw error;
|
|
324
|
-
}); // Synchronous mock that throws an error
|
|
325
|
-
const onRehydratingEnd = jest.fn(() => {
|
|
326
|
-
throw error;
|
|
327
|
-
}); // Synchronous mock that throws an error
|
|
328
|
-
maskingParser = new MaskingParser({
|
|
329
|
-
transformers: [piiMaskingTransformer],
|
|
330
|
-
onRehydratingStart,
|
|
331
|
-
onRehydratingEnd,
|
|
332
|
-
});
|
|
333
|
-
const maskedMessage = await maskingParser.mask("Contact me at jane.doe@email.com");
|
|
334
|
-
await expect(maskingParser.rehydrate(maskedMessage)).rejects.toThrow(error);
|
|
335
|
-
expect(onRehydratingStart).toHaveBeenCalledWith(maskedMessage);
|
|
336
|
-
// onRehydratingEnd should not be called because an error is thrown in onRehydratingStart
|
|
337
|
-
expect(onRehydratingEnd).not.toHaveBeenCalled();
|
|
338
|
-
});
|
|
339
|
-
it("handles errors in asynchronous onRehydratingStart and onRehydratingEnd hooks during rehydrate", async () => {
|
|
340
|
-
const error = new Error("Test Error");
|
|
341
|
-
const onRehydratingStart = jest.fn(() => Promise.reject(error)); // Asynchronous mock that rejects with an error
|
|
342
|
-
const onRehydratingEnd = jest.fn(() => Promise.reject(error)); // Asynchronous mock that rejects with an error
|
|
343
|
-
maskingParser = new MaskingParser({
|
|
344
|
-
transformers: [piiMaskingTransformer],
|
|
345
|
-
onRehydratingStart,
|
|
346
|
-
onRehydratingEnd,
|
|
347
|
-
});
|
|
348
|
-
const maskedMessage = await maskingParser.mask("Contact me at jane.doe@email.com");
|
|
349
|
-
await expect(maskingParser.rehydrate(maskedMessage)).rejects.toThrow(error);
|
|
350
|
-
expect(onRehydratingStart).toHaveBeenCalledWith(maskedMessage);
|
|
351
|
-
// onRehydratingEnd should not be called because an error is thrown in onRehydratingStart
|
|
352
|
-
expect(onRehydratingEnd).not.toHaveBeenCalled();
|
|
353
|
-
});
|
|
354
|
-
});
|
|
355
|
-
describe("MaskingParser with Asynchronous Transformers", () => {
|
|
356
|
-
let maskingParser;
|
|
357
|
-
let asyncTransformer;
|
|
358
|
-
beforeEach(() => {
|
|
359
|
-
// Mock an asynchronous transformer
|
|
360
|
-
asyncTransformer = {
|
|
361
|
-
async transform(message, state) {
|
|
362
|
-
// Simulate an asynchronous operation
|
|
363
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
364
|
-
// Return transformed message and updated state
|
|
365
|
-
const transformedMessage = message.replace(/sensitiveData/g, "[REDACTED]");
|
|
366
|
-
const newState = new Map(state).set("redacted", "sensitive string :(");
|
|
367
|
-
return [transformedMessage, newState];
|
|
368
|
-
},
|
|
369
|
-
// Mock or placeholder rehydrate method
|
|
370
|
-
async rehydrate(message, _state) {
|
|
371
|
-
return message;
|
|
372
|
-
},
|
|
373
|
-
};
|
|
374
|
-
maskingParser = new MaskingParser({
|
|
375
|
-
transformers: [asyncTransformer],
|
|
376
|
-
// Add other configurations if necessary
|
|
377
|
-
});
|
|
378
|
-
});
|
|
379
|
-
it("properly handles asynchronous transformations and state updates", async () => {
|
|
380
|
-
const originalMessage = "This message contains sensitiveData that should be redacted.";
|
|
381
|
-
const transformedMessage = await maskingParser.mask(originalMessage);
|
|
382
|
-
// Check if the message is transformed correctly
|
|
383
|
-
expect(transformedMessage).toBe("This message contains [REDACTED] that should be redacted.");
|
|
384
|
-
// Check if the state is updated correctly
|
|
385
|
-
expect(maskingParser.getState().get("redacted")).toBe("sensitive string :(");
|
|
386
|
-
});
|
|
387
|
-
});
|
|
388
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-process-env */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
3
|
-
import { z } from "zod";
|
|
4
|
-
import { StructuredTool } from "@langchain/core/tools";
|
|
5
|
-
import { AgentExecutor } from "../../../agents/executor.js";
|
|
6
|
-
import { OpenAIAssistantRunnable } from "../index.js";
|
|
7
|
-
function getCurrentWeather(location, _unit = "fahrenheit") {
|
|
8
|
-
if (location.toLowerCase().includes("tokyo")) {
|
|
9
|
-
return JSON.stringify({ location, temperature: "10", unit: "celsius" });
|
|
10
|
-
}
|
|
11
|
-
else if (location.toLowerCase().includes("san francisco")) {
|
|
12
|
-
return JSON.stringify({ location, temperature: "72", unit: "fahrenheit" });
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
return JSON.stringify({ location, temperature: "22", unit: "celsius" });
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
function convertWeatherToHumanReadable(location, temperature) {
|
|
19
|
-
if (temperature.length > 1) {
|
|
20
|
-
return JSON.stringify({ location, temperature, readable: "warm" });
|
|
21
|
-
}
|
|
22
|
-
return JSON.stringify({ location, temperature, readable: "cold" });
|
|
23
|
-
}
|
|
24
|
-
class WeatherTool extends StructuredTool {
|
|
25
|
-
constructor() {
|
|
26
|
-
super(...arguments);
|
|
27
|
-
Object.defineProperty(this, "schema", {
|
|
28
|
-
enumerable: true,
|
|
29
|
-
configurable: true,
|
|
30
|
-
writable: true,
|
|
31
|
-
value: z.object({
|
|
32
|
-
location: z.string().describe("The city and state, e.g. San Francisco, CA"),
|
|
33
|
-
unit: z.enum(["celsius", "fahrenheit"]).optional(),
|
|
34
|
-
})
|
|
35
|
-
});
|
|
36
|
-
Object.defineProperty(this, "name", {
|
|
37
|
-
enumerable: true,
|
|
38
|
-
configurable: true,
|
|
39
|
-
writable: true,
|
|
40
|
-
value: "get_current_weather"
|
|
41
|
-
});
|
|
42
|
-
Object.defineProperty(this, "description", {
|
|
43
|
-
enumerable: true,
|
|
44
|
-
configurable: true,
|
|
45
|
-
writable: true,
|
|
46
|
-
value: "Get the current weather in a given location"
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
async _call(input) {
|
|
50
|
-
const { location, unit } = input;
|
|
51
|
-
const result = getCurrentWeather(location, unit);
|
|
52
|
-
return result;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
class HumanReadableChecker extends StructuredTool {
|
|
56
|
-
constructor() {
|
|
57
|
-
super(...arguments);
|
|
58
|
-
Object.defineProperty(this, "schema", {
|
|
59
|
-
enumerable: true,
|
|
60
|
-
configurable: true,
|
|
61
|
-
writable: true,
|
|
62
|
-
value: z.object({
|
|
63
|
-
location: z.string().describe("The city and state, e.g. San Francisco, CA"),
|
|
64
|
-
temperature: z.string().describe("The temperature in degrees"),
|
|
65
|
-
})
|
|
66
|
-
});
|
|
67
|
-
Object.defineProperty(this, "name", {
|
|
68
|
-
enumerable: true,
|
|
69
|
-
configurable: true,
|
|
70
|
-
writable: true,
|
|
71
|
-
value: "get_human_readable_weather"
|
|
72
|
-
});
|
|
73
|
-
Object.defineProperty(this, "description", {
|
|
74
|
-
enumerable: true,
|
|
75
|
-
configurable: true,
|
|
76
|
-
writable: true,
|
|
77
|
-
value: "Check whether or not the weather in a given location is warm or cold"
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
async _call(input) {
|
|
81
|
-
const { location, temperature } = input;
|
|
82
|
-
const result = convertWeatherToHumanReadable(location, temperature);
|
|
83
|
-
return result;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
test.skip("New OpenAIAssistantRunnable can be passed as an agent", async () => {
|
|
87
|
-
const tools = [new WeatherTool(), new HumanReadableChecker()];
|
|
88
|
-
const agent = await OpenAIAssistantRunnable.createAssistant({
|
|
89
|
-
model: "gpt-3.5-turbo-1106",
|
|
90
|
-
instructions: "You are a weather bot. Use the provided functions to answer questions.",
|
|
91
|
-
name: "Weather Assistant",
|
|
92
|
-
tools,
|
|
93
|
-
asAgent: true,
|
|
94
|
-
});
|
|
95
|
-
const agentExecutor = AgentExecutor.fromAgentAndTools({
|
|
96
|
-
agent,
|
|
97
|
-
tools,
|
|
98
|
-
});
|
|
99
|
-
const assistantResponse = await agentExecutor.invoke({
|
|
100
|
-
content: "What's the weather in San Francisco and Tokyo? And will it be warm or cold in those places?",
|
|
101
|
-
});
|
|
102
|
-
console.log(assistantResponse);
|
|
103
|
-
/**
|
|
104
|
-
{
|
|
105
|
-
output: "The weather in San Francisco, CA is currently 72°F and it's warm. In Tokyo, Japan, the temperature is 10°C and it's also warm."
|
|
106
|
-
}
|
|
107
|
-
*/
|
|
108
|
-
});
|
|
109
|
-
test("OpenAIAssistantRunnable create and delete assistant", async () => {
|
|
110
|
-
const assistant = await OpenAIAssistantRunnable.createAssistant({
|
|
111
|
-
name: "Personal Assistant",
|
|
112
|
-
model: "gpt-4-1106-preview",
|
|
113
|
-
});
|
|
114
|
-
const deleteStatus = await assistant.deleteAssistant();
|
|
115
|
-
expect(deleteStatus).toEqual({
|
|
116
|
-
id: assistant.assistantId,
|
|
117
|
-
object: "assistant.deleted",
|
|
118
|
-
deleted: true,
|
|
119
|
-
});
|
|
120
|
-
console.log(deleteStatus);
|
|
121
|
-
/**
|
|
122
|
-
{
|
|
123
|
-
id: 'asst_jwkJPzFkIL2ei9Kn1SZzmR6Y',
|
|
124
|
-
object: 'assistant.deleted',
|
|
125
|
-
deleted: true
|
|
126
|
-
}
|
|
127
|
-
*/
|
|
128
|
-
});
|
|
129
|
-
test("OpenAIAssistantRunnable create and modify assistant", async () => {
|
|
130
|
-
const assistant = await OpenAIAssistantRunnable.createAssistant({
|
|
131
|
-
name: "Personal Assistant",
|
|
132
|
-
model: "gpt-4-1106-preview",
|
|
133
|
-
});
|
|
134
|
-
const assistantResponse = await assistant.getAssistant();
|
|
135
|
-
expect(assistantResponse.name).toEqual("Personal Assistant");
|
|
136
|
-
const assistantResponseModified = await assistant.modifyAssistant({
|
|
137
|
-
name: "Personal Assistant 2",
|
|
138
|
-
});
|
|
139
|
-
expect(assistantResponseModified.name).toEqual("Personal Assistant 2");
|
|
140
|
-
expect(assistantResponseModified.model).toEqual("gpt-4-1106-preview");
|
|
141
|
-
});
|
|
142
|
-
test("OpenAIAssistantRunnable can be passed as an agent", async () => {
|
|
143
|
-
const tools = [new WeatherTool(), new HumanReadableChecker()];
|
|
144
|
-
const agent = new OpenAIAssistantRunnable({
|
|
145
|
-
assistantId: process.env.TEST_OPENAI_ASSISTANT_ID,
|
|
146
|
-
asAgent: true,
|
|
147
|
-
});
|
|
148
|
-
const agentExecutor = AgentExecutor.fromAgentAndTools({
|
|
149
|
-
agent,
|
|
150
|
-
tools,
|
|
151
|
-
});
|
|
152
|
-
const assistantResponse = await agentExecutor.invoke({
|
|
153
|
-
content: "What's the weather in San Francisco and Tokyo? And will it be warm or cold in those places?",
|
|
154
|
-
});
|
|
155
|
-
console.log(assistantResponse);
|
|
156
|
-
/**
|
|
157
|
-
{
|
|
158
|
-
output: "The weather in San Francisco, CA is currently 72°F and it's warm. In Tokyo, Japan, the temperature is 10°C and it's also warm."
|
|
159
|
-
}
|
|
160
|
-
*/
|
|
161
|
-
});
|
|
162
|
-
test.skip("Created OpenAIAssistantRunnable is invokeable", async () => {
|
|
163
|
-
const assistant = await OpenAIAssistantRunnable.createAssistant({
|
|
164
|
-
model: "gpt-4",
|
|
165
|
-
instructions: "You are a helpful assistant that provides answers to math problems.",
|
|
166
|
-
name: "Math Assistant",
|
|
167
|
-
tools: [{ type: "code_interpreter" }],
|
|
168
|
-
});
|
|
169
|
-
const assistantResponse = await assistant.invoke({
|
|
170
|
-
content: "What's 10 - 4 raised to the 2.7",
|
|
171
|
-
});
|
|
172
|
-
console.log(assistantResponse);
|
|
173
|
-
/**
|
|
174
|
-
[
|
|
175
|
-
{
|
|
176
|
-
id: 'msg_egqSo3AZTWJ0DAelzR6DdKbs',
|
|
177
|
-
object: 'thread.message',
|
|
178
|
-
created_at: 1699409656,
|
|
179
|
-
thread_id: 'thread_lAktOZkUetJ7Gl3hzMFdi42E',
|
|
180
|
-
role: 'assistant',
|
|
181
|
-
content: [ [Object] ],
|
|
182
|
-
file_ids: [],
|
|
183
|
-
assistant_id: 'asst_fPjLqVmN21EFGLNQb8iZckEy',
|
|
184
|
-
run_id: 'run_orPmWI9ri1HnqBXmX7LCWWax',
|
|
185
|
-
metadata: {}
|
|
186
|
-
}
|
|
187
|
-
]
|
|
188
|
-
*/
|
|
189
|
-
const content = // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
190
|
-
assistantResponse.flatMap((res) => res.content);
|
|
191
|
-
console.log(content);
|
|
192
|
-
/**
|
|
193
|
-
[
|
|
194
|
-
{
|
|
195
|
-
type: 'text',
|
|
196
|
-
text: {
|
|
197
|
-
value: '10 - 4 raised to the 2.7 is approximately -32.22.',
|
|
198
|
-
annotations: []
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
]
|
|
202
|
-
*/
|
|
203
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|