From 6598757037a7b99f679614ca4fbc75c1b21bd869 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Fri, 26 Apr 2024 10:50:21 -0400 Subject: [PATCH] cli[minor]: Add first version of migrate (#20902) Adds a first version of the migrate script. --- libs/cli/langchain_cli/cli.py | 8 + libs/cli/langchain_cli/namespaces/migrate.py | 0 .../namespaces/migrate/__init__.py | 0 .../namespaces/migrate/codemods/__init__.py | 25 + .../migrate/codemods/migrations_v0.2.json | 5450 +++++++++++++++++ .../codemods/migrations_v0.2_partner.json | 14 + .../migrate/codemods/replace_imports.py | 205 + .../namespaces/migrate/glob_helpers.py | 52 + .../langchain_cli/namespaces/migrate/main.py | 194 + libs/cli/poetry.lock | 45 +- libs/cli/pyproject.toml | 1 + libs/cli/tests/unit_tests/__init__.py | 0 libs/cli/tests/unit_tests/migrate/__init__.py | 0 .../unit_tests/migrate/cli_runner/__init__.py | 0 .../unit_tests/migrate/cli_runner/case.py | 13 + .../migrate/cli_runner/cases/__init__.py | 15 + .../migrate/cli_runner/cases/imports.py | 32 + .../unit_tests/migrate/cli_runner/file.py | 16 + .../unit_tests/migrate/cli_runner/folder.py | 59 + .../unit_tests/migrate/cli_runner/test_cli.py | 55 + .../unit_tests/migrate/test_glob_helpers.py | 72 + .../migrate/test_replace_imports.py | 41 + .../cli/tests/{ => unit_tests}/test_events.py | 0 libs/cli/tests/{ => unit_tests}/test_utils.py | 0 24 files changed, 6294 insertions(+), 3 deletions(-) create mode 100644 libs/cli/langchain_cli/namespaces/migrate.py create mode 100644 libs/cli/langchain_cli/namespaces/migrate/__init__.py create mode 100644 libs/cli/langchain_cli/namespaces/migrate/codemods/__init__.py create mode 100644 libs/cli/langchain_cli/namespaces/migrate/codemods/migrations_v0.2.json create mode 100644 libs/cli/langchain_cli/namespaces/migrate/codemods/migrations_v0.2_partner.json create mode 100644 libs/cli/langchain_cli/namespaces/migrate/codemods/replace_imports.py create mode 100644 libs/cli/langchain_cli/namespaces/migrate/glob_helpers.py create mode 100644 libs/cli/langchain_cli/namespaces/migrate/main.py create mode 100644 libs/cli/tests/unit_tests/__init__.py create mode 100644 libs/cli/tests/unit_tests/migrate/__init__.py create mode 100644 libs/cli/tests/unit_tests/migrate/cli_runner/__init__.py create mode 100644 libs/cli/tests/unit_tests/migrate/cli_runner/case.py create mode 100644 libs/cli/tests/unit_tests/migrate/cli_runner/cases/__init__.py create mode 100644 libs/cli/tests/unit_tests/migrate/cli_runner/cases/imports.py create mode 100644 libs/cli/tests/unit_tests/migrate/cli_runner/file.py create mode 100644 libs/cli/tests/unit_tests/migrate/cli_runner/folder.py create mode 100644 libs/cli/tests/unit_tests/migrate/cli_runner/test_cli.py create mode 100644 libs/cli/tests/unit_tests/migrate/test_glob_helpers.py create mode 100644 libs/cli/tests/unit_tests/migrate/test_replace_imports.py rename libs/cli/tests/{ => unit_tests}/test_events.py (100%) rename libs/cli/tests/{ => unit_tests}/test_utils.py (100%) diff --git a/libs/cli/langchain_cli/cli.py b/libs/cli/langchain_cli/cli.py index a2ee797491..70c4e5fb97 100644 --- a/libs/cli/langchain_cli/cli.py +++ b/libs/cli/langchain_cli/cli.py @@ -1,3 +1,4 @@ +import importlib from typing import Optional import typer @@ -22,6 +23,13 @@ app.add_typer( ) +# If libcst is installed, add the migrate namespace +if importlib.util.find_spec("libcst"): + from langchain_cli.namespaces.migrate import main as migrate_namespace + + app.add_typer(migrate_namespace.app, name="migrate", help=migrate_namespace.__doc__) + + def version_callback(show_version: bool) -> None: if show_version: typer.echo(f"langchain-cli {__version__}") diff --git a/libs/cli/langchain_cli/namespaces/migrate.py b/libs/cli/langchain_cli/namespaces/migrate.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/cli/langchain_cli/namespaces/migrate/__init__.py b/libs/cli/langchain_cli/namespaces/migrate/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/cli/langchain_cli/namespaces/migrate/codemods/__init__.py b/libs/cli/langchain_cli/namespaces/migrate/codemods/__init__.py new file mode 100644 index 0000000000..32e6cfa85c --- /dev/null +++ b/libs/cli/langchain_cli/namespaces/migrate/codemods/__init__.py @@ -0,0 +1,25 @@ +from enum import Enum +from typing import List, Type + +from libcst.codemod import ContextAwareTransformer +from libcst.codemod.visitors import AddImportsVisitor, RemoveImportsVisitor + +from langchain_cli.namespaces.migrate.codemods.replace_imports import ( + ReplaceImportsCodemod, +) + + +class Rule(str, Enum): + R001 = "R001" + """Replace imports that have been moved.""" + + +def gather_codemods(disabled: List[Rule]) -> List[Type[ContextAwareTransformer]]: + codemods: List[Type[ContextAwareTransformer]] = [] + + if Rule.R001 not in disabled: + codemods.append(ReplaceImportsCodemod) + + # Those codemods need to be the last ones. + codemods.extend([RemoveImportsVisitor, AddImportsVisitor]) + return codemods diff --git a/libs/cli/langchain_cli/namespaces/migrate/codemods/migrations_v0.2.json b/libs/cli/langchain_cli/namespaces/migrate/codemods/migrations_v0.2.json new file mode 100644 index 0000000000..6e288d2b51 --- /dev/null +++ b/libs/cli/langchain_cli/namespaces/migrate/codemods/migrations_v0.2.json @@ -0,0 +1,5450 @@ +[ + [ + "langchain.adapters.openai.Chat", + "langchain_community.adapters.openai.Chat" + ], + [ + "langchain.adapters.openai.ChatCompletion", + "langchain_community.adapters.openai.ChatCompletion" + ], + [ + "langchain.adapters.openai.ChatCompletionChunk", + "langchain_community.adapters.openai.ChatCompletionChunk" + ], + [ + "langchain.adapters.openai.ChatCompletions", + "langchain_community.adapters.openai.ChatCompletions" + ], + [ + "langchain.adapters.openai.Choice", + "langchain_community.adapters.openai.Choice" + ], + [ + "langchain.adapters.openai.ChoiceChunk", + "langchain_community.adapters.openai.ChoiceChunk" + ], + [ + "langchain.adapters.openai.Completions", + "langchain_community.adapters.openai.Completions" + ], + [ + "langchain.adapters.openai.IndexableBaseModel", + "langchain_community.adapters.openai.IndexableBaseModel" + ], + [ + "langchain.adapters.openai.chat", + "langchain_community.adapters.openai.chat" + ], + [ + "langchain.adapters.openai.convert_dict_to_message", + "langchain_community.adapters.openai.convert_dict_to_message" + ], + [ + "langchain.adapters.openai.convert_message_to_dict", + "langchain_community.adapters.openai.convert_message_to_dict" + ], + [ + "langchain.adapters.openai.convert_messages_for_finetuning", + "langchain_community.adapters.openai.convert_messages_for_finetuning" + ], + [ + "langchain.adapters.openai.convert_openai_messages", + "langchain_community.adapters.openai.convert_openai_messages" + ], + [ + "langchain.agents.create_json_agent", + "langchain_community.agent_toolkits.create_json_agent" + ], + [ + "langchain.agents.create_openapi_agent", + "langchain_community.agent_toolkits.create_openapi_agent" + ], + [ + "langchain.agents.create_pbi_agent", + "langchain_community.agent_toolkits.create_pbi_agent" + ], + [ + "langchain.agents.create_pbi_chat_agent", + "langchain_community.agent_toolkits.create_pbi_chat_agent" + ], + [ + "langchain.agents.create_spark_sql_agent", + "langchain_community.agent_toolkits.create_spark_sql_agent" + ], + [ + "langchain.agents.create_sql_agent", + "langchain_community.agent_toolkits.create_sql_agent" + ], + [ + "langchain.agents.load_tools.ArxivAPIWrapper", + "langchain_community.utilities.arxiv.ArxivAPIWrapper" + ], + [ + "langchain.agents.load_tools.ArxivQueryRun", + "langchain_community.tools.arxiv.tool.ArxivQueryRun" + ], + [ + "langchain.agents.load_tools.BaseGraphQLTool", + "langchain_community.tools.graphql.tool.BaseGraphQLTool" + ], + [ + "langchain.agents.load_tools.BingSearchAPIWrapper", + "langchain_community.utilities.bing_search.BingSearchAPIWrapper" + ], + [ + "langchain.agents.load_tools.BingSearchRun", + "langchain_community.tools.bing_search.tool.BingSearchRun" + ], + [ + "langchain.agents.load_tools.DallEAPIWrapper", + "langchain_community.utilities.dalle_image_generator.DallEAPIWrapper" + ], + [ + "langchain.agents.load_tools.DataForSeoAPISearchResults", + "langchain_community.tools.dataforseo_api_search.DataForSeoAPISearchResults" + ], + [ + "langchain.agents.load_tools.DataForSeoAPISearchRun", + "langchain_community.tools.dataforseo_api_search.DataForSeoAPISearchRun" + ], + [ + "langchain.agents.load_tools.DataForSeoAPIWrapper", + "langchain_community.utilities.dataforseo_api_search.DataForSeoAPIWrapper" + ], + [ + "langchain.agents.load_tools.DuckDuckGoSearchAPIWrapper", + "langchain_community.utilities.duckduckgo_search.DuckDuckGoSearchAPIWrapper" + ], + [ + "langchain.agents.load_tools.DuckDuckGoSearchRun", + "langchain_community.tools.ddg_search.tool.DuckDuckGoSearchRun" + ], + [ + "langchain.agents.load_tools.ElevenLabsText2SpeechTool", + "langchain_community.tools.eleven_labs.text2speech.ElevenLabsText2SpeechTool" + ], + [ + "langchain.agents.load_tools.GoldenQueryAPIWrapper", + "langchain_community.utilities.golden_query.GoldenQueryAPIWrapper" + ], + [ + "langchain.agents.load_tools.GoldenQueryRun", + "langchain_community.tools.golden_query.tool.GoldenQueryRun" + ], + [ + "langchain.agents.load_tools.GoogleCloudTextToSpeechTool", + "langchain_community.tools.google_cloud.texttospeech.GoogleCloudTextToSpeechTool" + ], + [ + "langchain.agents.load_tools.GoogleFinanceAPIWrapper", + "langchain_community.utilities.google_finance.GoogleFinanceAPIWrapper" + ], + [ + "langchain.agents.load_tools.GoogleFinanceQueryRun", + "langchain_community.tools.google_finance.tool.GoogleFinanceQueryRun" + ], + [ + "langchain.agents.load_tools.GoogleJobsAPIWrapper", + "langchain_community.utilities.google_jobs.GoogleJobsAPIWrapper" + ], + [ + "langchain.agents.load_tools.GoogleJobsQueryRun", + "langchain_community.tools.google_jobs.tool.GoogleJobsQueryRun" + ], + [ + "langchain.agents.load_tools.GoogleLensAPIWrapper", + "langchain_community.utilities.google_lens.GoogleLensAPIWrapper" + ], + [ + "langchain.agents.load_tools.GoogleLensQueryRun", + "langchain_community.tools.google_lens.tool.GoogleLensQueryRun" + ], + [ + "langchain.agents.load_tools.GoogleScholarAPIWrapper", + "langchain_community.utilities.google_scholar.GoogleScholarAPIWrapper" + ], + [ + "langchain.agents.load_tools.GoogleScholarQueryRun", + "langchain_community.tools.google_scholar.tool.GoogleScholarQueryRun" + ], + [ + "langchain.agents.load_tools.GoogleSearchAPIWrapper", + "langchain_community.utilities.google_search.GoogleSearchAPIWrapper" + ], + [ + "langchain.agents.load_tools.GoogleSearchResults", + "langchain_community.tools.google_search.tool.GoogleSearchResults" + ], + [ + "langchain.agents.load_tools.GoogleSearchRun", + "langchain_community.tools.google_search.tool.GoogleSearchRun" + ], + [ + "langchain.agents.load_tools.GoogleSerperAPIWrapper", + "langchain_community.utilities.google_serper.GoogleSerperAPIWrapper" + ], + [ + "langchain.agents.load_tools.GoogleSerperResults", + "langchain_community.tools.google_serper.tool.GoogleSerperResults" + ], + [ + "langchain.agents.load_tools.GoogleSerperRun", + "langchain_community.tools.google_serper.tool.GoogleSerperRun" + ], + [ + "langchain.agents.load_tools.GoogleTrendsAPIWrapper", + "langchain_community.utilities.google_trends.GoogleTrendsAPIWrapper" + ], + [ + "langchain.agents.load_tools.GoogleTrendsQueryRun", + "langchain_community.tools.google_trends.tool.GoogleTrendsQueryRun" + ], + [ + "langchain.agents.load_tools.GraphQLAPIWrapper", + "langchain_community.utilities.graphql.GraphQLAPIWrapper" + ], + [ + "langchain.agents.load_tools.HumanInputRun", + "langchain_community.tools.human.tool.HumanInputRun" + ], + [ + "langchain.agents.load_tools.LambdaWrapper", + "langchain_community.utilities.awslambda.LambdaWrapper" + ], + [ + "langchain.agents.load_tools.Memorize", + "langchain_community.tools.memorize.tool.Memorize" + ], + [ + "langchain.agents.load_tools.MerriamWebsterAPIWrapper", + "langchain_community.utilities.merriam_webster.MerriamWebsterAPIWrapper" + ], + [ + "langchain.agents.load_tools.MerriamWebsterQueryRun", + "langchain_community.tools.merriam_webster.tool.MerriamWebsterQueryRun" + ], + [ + "langchain.agents.load_tools.MetaphorSearchAPIWrapper", + "langchain_community.utilities.metaphor_search.MetaphorSearchAPIWrapper" + ], + [ + "langchain.agents.load_tools.MetaphorSearchResults", + "langchain_community.tools.metaphor_search.tool.MetaphorSearchResults" + ], + [ + "langchain.agents.load_tools.OpenWeatherMapAPIWrapper", + "langchain_community.utilities.openweathermap.OpenWeatherMapAPIWrapper" + ], + [ + "langchain.agents.load_tools.OpenWeatherMapQueryRun", + "langchain_community.tools.openweathermap.tool.OpenWeatherMapQueryRun" + ], + [ + "langchain.agents.load_tools.PubMedAPIWrapper", + "langchain_community.utilities.pubmed.PubMedAPIWrapper" + ], + [ + "langchain.agents.load_tools.PubmedQueryRun", + "langchain_community.tools.pubmed.tool.PubmedQueryRun" + ], + [ + "langchain.agents.load_tools.ReadFileTool", + "langchain_community.tools.file_management.ReadFileTool" + ], + [ + "langchain.agents.load_tools.RedditSearchAPIWrapper", + "langchain_community.utilities.reddit_search.RedditSearchAPIWrapper" + ], + [ + "langchain.agents.load_tools.RedditSearchRun", + "langchain_community.tools.reddit_search.tool.RedditSearchRun" + ], + [ + "langchain.agents.load_tools.RequestsDeleteTool", + "langchain_community.tools.requests.tool.RequestsDeleteTool" + ], + [ + "langchain.agents.load_tools.RequestsGetTool", + "langchain_community.tools.requests.tool.RequestsGetTool" + ], + [ + "langchain.agents.load_tools.RequestsPatchTool", + "langchain_community.tools.requests.tool.RequestsPatchTool" + ], + [ + "langchain.agents.load_tools.RequestsPostTool", + "langchain_community.tools.requests.tool.RequestsPostTool" + ], + [ + "langchain.agents.load_tools.RequestsPutTool", + "langchain_community.tools.requests.tool.RequestsPutTool" + ], + [ + "langchain.agents.load_tools.SceneXplainTool", + "langchain_community.tools.scenexplain.tool.SceneXplainTool" + ], + [ + "langchain.agents.load_tools.SearchAPIResults", + "langchain_community.tools.searchapi.tool.SearchAPIResults" + ], + [ + "langchain.agents.load_tools.SearchAPIRun", + "langchain_community.tools.searchapi.tool.SearchAPIRun" + ], + [ + "langchain.agents.load_tools.SearchApiAPIWrapper", + "langchain_community.utilities.searchapi.SearchApiAPIWrapper" + ], + [ + "langchain.agents.load_tools.SearxSearchResults", + "langchain_community.tools.searx_search.tool.SearxSearchResults" + ], + [ + "langchain.agents.load_tools.SearxSearchRun", + "langchain_community.tools.searx_search.tool.SearxSearchRun" + ], + [ + "langchain.agents.load_tools.SearxSearchWrapper", + "langchain_community.utilities.searx_search.SearxSearchWrapper" + ], + [ + "langchain.agents.load_tools.SerpAPIWrapper", + "langchain_community.utilities.serpapi.SerpAPIWrapper" + ], + [ + "langchain.agents.load_tools.ShellTool", + "langchain_community.tools.shell.tool.ShellTool" + ], + [ + "langchain.agents.load_tools.SleepTool", + "langchain_community.tools.sleep.tool.SleepTool" + ], + [ + "langchain.agents.load_tools.StackExchangeAPIWrapper", + "langchain_community.utilities.stackexchange.StackExchangeAPIWrapper" + ], + [ + "langchain.agents.load_tools.StackExchangeTool", + "langchain_community.tools.stackexchange.tool.StackExchangeTool" + ], + [ + "langchain.agents.load_tools.TextRequestsWrapper", + "langchain_community.utilities.requests.TextRequestsWrapper" + ], + [ + "langchain.agents.load_tools.TwilioAPIWrapper", + "langchain_community.utilities.twilio.TwilioAPIWrapper" + ], + [ + "langchain.agents.load_tools.WikipediaAPIWrapper", + "langchain_community.utilities.wikipedia.WikipediaAPIWrapper" + ], + [ + "langchain.agents.load_tools.WikipediaQueryRun", + "langchain_community.tools.wikipedia.tool.WikipediaQueryRun" + ], + [ + "langchain.agents.load_tools.WolframAlphaAPIWrapper", + "langchain_community.utilities.wolfram_alpha.WolframAlphaAPIWrapper" + ], + [ + "langchain.agents.load_tools.WolframAlphaQueryRun", + "langchain_community.tools.wolfram_alpha.tool.WolframAlphaQueryRun" + ], + [ + "langchain.callbacks.AimCallbackHandler", + "langchain_community.callbacks.AimCallbackHandler" + ], + [ + "langchain.callbacks.ArgillaCallbackHandler", + "langchain_community.callbacks.ArgillaCallbackHandler" + ], + [ + "langchain.callbacks.ArizeCallbackHandler", + "langchain_community.callbacks.ArizeCallbackHandler" + ], + [ + "langchain.callbacks.ArthurCallbackHandler", + "langchain_community.callbacks.ArthurCallbackHandler" + ], + [ + "langchain.callbacks.ClearMLCallbackHandler", + "langchain_community.callbacks.ClearMLCallbackHandler" + ], + [ + "langchain.callbacks.CometCallbackHandler", + "langchain_community.callbacks.CometCallbackHandler" + ], + [ + "langchain.callbacks.ContextCallbackHandler", + "langchain_community.callbacks.ContextCallbackHandler" + ], + [ + "langchain.callbacks.FlyteCallbackHandler", + "langchain_community.callbacks.FlyteCallbackHandler" + ], + [ + "langchain.callbacks.HumanApprovalCallbackHandler", + "langchain_community.callbacks.HumanApprovalCallbackHandler" + ], + [ + "langchain.callbacks.InfinoCallbackHandler", + "langchain_community.callbacks.InfinoCallbackHandler" + ], + [ + "langchain.callbacks.LLMThoughtLabeler", + "langchain_community.callbacks.LLMThoughtLabeler" + ], + [ + "langchain.callbacks.LLMonitorCallbackHandler", + "langchain_community.callbacks.LLMonitorCallbackHandler" + ], + [ + "langchain.callbacks.LabelStudioCallbackHandler", + "langchain_community.callbacks.LabelStudioCallbackHandler" + ], + [ + "langchain.callbacks.MlflowCallbackHandler", + "langchain_community.callbacks.MlflowCallbackHandler" + ], + [ + "langchain.callbacks.OpenAICallbackHandler", + "langchain_community.callbacks.OpenAICallbackHandler" + ], + [ + "langchain.callbacks.PromptLayerCallbackHandler", + "langchain_community.callbacks.PromptLayerCallbackHandler" + ], + [ + "langchain.callbacks.SageMakerCallbackHandler", + "langchain_community.callbacks.SageMakerCallbackHandler" + ], + [ + "langchain.callbacks.StreamlitCallbackHandler", + "langchain_community.callbacks.StreamlitCallbackHandler" + ], + [ + "langchain.callbacks.TrubricsCallbackHandler", + "langchain_community.callbacks.TrubricsCallbackHandler" + ], + [ + "langchain.callbacks.WandbCallbackHandler", + "langchain_community.callbacks.WandbCallbackHandler" + ], + [ + "langchain.callbacks.WhyLabsCallbackHandler", + "langchain_community.callbacks.WhyLabsCallbackHandler" + ], + [ + "langchain.callbacks.aim_callback.AimCallbackHandler", + "langchain_community.callbacks.aim_callback.AimCallbackHandler" + ], + [ + "langchain.callbacks.aim_callback.BaseMetadataCallbackHandler", + "langchain_community.callbacks.aim_callback.BaseMetadataCallbackHandler" + ], + [ + "langchain.callbacks.aim_callback.import_aim", + "langchain_community.callbacks.aim_callback.import_aim" + ], + [ + "langchain.callbacks.argilla_callback.ArgillaCallbackHandler", + "langchain_community.callbacks.argilla_callback.ArgillaCallbackHandler" + ], + [ + "langchain.callbacks.arize_callback.ArizeCallbackHandler", + "langchain_community.callbacks.arize_callback.ArizeCallbackHandler" + ], + [ + "langchain.callbacks.arthur_callback.ArthurCallbackHandler", + "langchain_community.callbacks.arthur_callback.ArthurCallbackHandler" + ], + [ + "langchain.callbacks.clearml_callback.ClearMLCallbackHandler", + "langchain_community.callbacks.clearml_callback.ClearMLCallbackHandler" + ], + [ + "langchain.callbacks.comet_ml_callback.CometCallbackHandler", + "langchain_community.callbacks.comet_ml_callback.CometCallbackHandler" + ], + [ + "langchain.callbacks.confident_callback.DeepEvalCallbackHandler", + "langchain_community.callbacks.confident_callback.DeepEvalCallbackHandler" + ], + [ + "langchain.callbacks.context_callback.ContextCallbackHandler", + "langchain_community.callbacks.context_callback.ContextCallbackHandler" + ], + [ + "langchain.callbacks.flyte_callback.FlyteCallbackHandler", + "langchain_community.callbacks.flyte_callback.FlyteCallbackHandler" + ], + [ + "langchain.callbacks.get_openai_callback", + "langchain_community.callbacks.get_openai_callback" + ], + [ + "langchain.callbacks.human.AsyncHumanApprovalCallbackHandler", + "langchain_community.callbacks.human.AsyncHumanApprovalCallbackHandler" + ], + [ + "langchain.callbacks.human.HumanApprovalCallbackHandler", + "langchain_community.callbacks.human.HumanApprovalCallbackHandler" + ], + [ + "langchain.callbacks.human.HumanRejectedException", + "langchain_community.callbacks.human.HumanRejectedException" + ], + [ + "langchain.callbacks.infino_callback.InfinoCallbackHandler", + "langchain_community.callbacks.infino_callback.InfinoCallbackHandler" + ], + [ + "langchain.callbacks.labelstudio_callback.LabelStudioCallbackHandler", + "langchain_community.callbacks.labelstudio_callback.LabelStudioCallbackHandler" + ], + [ + "langchain.callbacks.labelstudio_callback.LabelStudioMode", + "langchain_community.callbacks.labelstudio_callback.LabelStudioMode" + ], + [ + "langchain.callbacks.labelstudio_callback.get_default_label_configs", + "langchain_community.callbacks.labelstudio_callback.get_default_label_configs" + ], + [ + "langchain.callbacks.llmonitor_callback.LLMonitorCallbackHandler", + "langchain_community.callbacks.llmonitor_callback.LLMonitorCallbackHandler" + ], + [ + "langchain.callbacks.manager.get_openai_callback", + "langchain_community.callbacks.manager.get_openai_callback" + ], + [ + "langchain.callbacks.manager.wandb_tracing_enabled", + "langchain_community.callbacks.manager.wandb_tracing_enabled" + ], + [ + "langchain.callbacks.mlflow_callback.MlflowCallbackHandler", + "langchain_community.callbacks.mlflow_callback.MlflowCallbackHandler" + ], + [ + "langchain.callbacks.mlflow_callback.MlflowLogger", + "langchain_community.callbacks.mlflow_callback.MlflowLogger" + ], + [ + "langchain.callbacks.mlflow_callback.analyze_text", + "langchain_community.callbacks.mlflow_callback.analyze_text" + ], + [ + "langchain.callbacks.mlflow_callback.construct_html_from_prompt_and_generation", + "langchain_community.callbacks.mlflow_callback.construct_html_from_prompt_and_generation" + ], + [ + "langchain.callbacks.openai_info.OpenAICallbackHandler", + "langchain_community.callbacks.openai_info.OpenAICallbackHandler" + ], + [ + "langchain.callbacks.promptlayer_callback.PromptLayerCallbackHandler", + "langchain_community.callbacks.promptlayer_callback.PromptLayerCallbackHandler" + ], + [ + "langchain.callbacks.sagemaker_callback.SageMakerCallbackHandler", + "langchain_community.callbacks.sagemaker_callback.SageMakerCallbackHandler" + ], + [ + "langchain.callbacks.trubrics_callback.TrubricsCallbackHandler", + "langchain_community.callbacks.trubrics_callback.TrubricsCallbackHandler" + ], + [ + "langchain.callbacks.utils.BaseMetadataCallbackHandler", + "langchain_community.callbacks.utils.BaseMetadataCallbackHandler" + ], + [ + "langchain.callbacks.utils._flatten_dict", + "langchain_community.callbacks.utils._flatten_dict" + ], + [ + "langchain.callbacks.utils.flatten_dict", + "langchain_community.callbacks.utils.flatten_dict" + ], + [ + "langchain.callbacks.utils.hash_string", + "langchain_community.callbacks.utils.hash_string" + ], + [ + "langchain.callbacks.utils.import_pandas", + "langchain_community.callbacks.utils.import_pandas" + ], + [ + "langchain.callbacks.utils.import_spacy", + "langchain_community.callbacks.utils.import_spacy" + ], + [ + "langchain.callbacks.utils.import_textstat", + "langchain_community.callbacks.utils.import_textstat" + ], + [ + "langchain.callbacks.utils.load_json", + "langchain_community.callbacks.utils.load_json" + ], + [ + "langchain.callbacks.wandb_callback.WandbCallbackHandler", + "langchain_community.callbacks.wandb_callback.WandbCallbackHandler" + ], + [ + "langchain.callbacks.wandb_tracing_enabled", + "langchain_community.callbacks.wandb_tracing_enabled" + ], + [ + "langchain.callbacks.whylabs_callback.WhyLabsCallbackHandler", + "langchain_community.callbacks.whylabs_callback.WhyLabsCallbackHandler" + ], + [ + "langchain.chains.llm_requests.TextRequestsWrapper", + "langchain_community.utilities.requests.TextRequestsWrapper" + ], + [ + "langchain.chains.loading.load_llm", + "langchain_community.llms.loading.load_llm" + ], + [ + "langchain.chains.loading.load_llm_from_config", + "langchain_community.llms.loading.load_llm_from_config" + ], + [ + "langchain.chat_loaders.base.BaseChatLoader", + "langchain_community.chat_loaders.base.BaseChatLoader" + ], + [ + "langchain.chat_loaders.gmail.GMailLoader", + "langchain_community.chat_loaders.gmail.GMailLoader" + ], + [ + "langchain.chat_loaders.imessage.IMessageChatLoader", + "langchain_community.chat_loaders.imessage.IMessageChatLoader" + ], + [ + "langchain.chat_loaders.langsmith.LangSmithDatasetChatLoader", + "langchain_community.chat_loaders.langsmith.LangSmithDatasetChatLoader" + ], + [ + "langchain.chat_loaders.langsmith.LangSmithRunChatLoader", + "langchain_community.chat_loaders.langsmith.LangSmithRunChatLoader" + ], + [ + "langchain.chat_loaders.slack.SlackChatLoader", + "langchain_community.chat_loaders.slack.SlackChatLoader" + ], + [ + "langchain.chat_loaders.telegram.TelegramChatLoader", + "langchain_community.chat_loaders.telegram.TelegramChatLoader" + ], + [ + "langchain.chat_loaders.utils.map_ai_messages", + "langchain_community.chat_loaders.utils.map_ai_messages" + ], + [ + "langchain.chat_loaders.utils.map_ai_messages_in_session", + "langchain_community.chat_loaders.utils.map_ai_messages_in_session" + ], + [ + "langchain.chat_loaders.utils.merge_chat_runs", + "langchain_community.chat_loaders.utils.merge_chat_runs" + ], + [ + "langchain.chat_loaders.utils.merge_chat_runs_in_session", + "langchain_community.chat_loaders.utils.merge_chat_runs_in_session" + ], + [ + "langchain.chat_loaders.whatsapp.WhatsAppChatLoader", + "langchain_community.chat_loaders.whatsapp.WhatsAppChatLoader" + ], + [ + "langchain.chat_models.AzureChatOpenAI", + "langchain_community.chat_models.AzureChatOpenAI" + ], + [ + "langchain.chat_models.BedrockChat", + "langchain_community.chat_models.BedrockChat" + ], + [ + "langchain.chat_models.ChatAnthropic", + "langchain_community.chat_models.ChatAnthropic" + ], + [ + "langchain.chat_models.ChatAnyscale", + "langchain_community.chat_models.ChatAnyscale" + ], + [ + "langchain.chat_models.ChatBaichuan", + "langchain_community.chat_models.ChatBaichuan" + ], + [ + "langchain.chat_models.ChatCohere", + "langchain_community.chat_models.ChatCohere" + ], + [ + "langchain.chat_models.ChatDatabricks", + "langchain_community.chat_models.ChatDatabricks" + ], + [ + "langchain.chat_models.ChatEverlyAI", + "langchain_community.chat_models.ChatEverlyAI" + ], + [ + "langchain.chat_models.ChatFireworks", + "langchain_community.chat_models.ChatFireworks" + ], + [ + "langchain.chat_models.ChatGooglePalm", + "langchain_community.chat_models.ChatGooglePalm" + ], + [ + "langchain.chat_models.ChatHunyuan", + "langchain_community.chat_models.ChatHunyuan" + ], + [ + "langchain.chat_models.ChatJavelinAIGateway", + "langchain_community.chat_models.ChatJavelinAIGateway" + ], + [ + "langchain.chat_models.ChatKonko", + "langchain_community.chat_models.ChatKonko" + ], + [ + "langchain.chat_models.ChatLiteLLM", + "langchain_community.chat_models.ChatLiteLLM" + ], + [ + "langchain.chat_models.ChatMLflowAIGateway", + "langchain_community.chat_models.ChatMLflowAIGateway" + ], + [ + "langchain.chat_models.ChatMlflow", + "langchain_community.chat_models.ChatMlflow" + ], + [ + "langchain.chat_models.ChatOllama", + "langchain_community.chat_models.ChatOllama" + ], + [ + "langchain.chat_models.ChatOpenAI", + "langchain_community.chat_models.ChatOpenAI" + ], + [ + "langchain.chat_models.ChatVertexAI", + "langchain_community.chat_models.ChatVertexAI" + ], + [ + "langchain.chat_models.ChatYandexGPT", + "langchain_community.chat_models.ChatYandexGPT" + ], + [ + "langchain.chat_models.ErnieBotChat", + "langchain_community.chat_models.ErnieBotChat" + ], + [ + "langchain.chat_models.FakeListChatModel", + "langchain_community.chat_models.FakeListChatModel" + ], + [ + "langchain.chat_models.GigaChat", + "langchain_community.chat_models.GigaChat" + ], + [ + "langchain.chat_models.HumanInputChatModel", + "langchain_community.chat_models.HumanInputChatModel" + ], + [ + "langchain.chat_models.JinaChat", + "langchain_community.chat_models.JinaChat" + ], + [ + "langchain.chat_models.MiniMaxChat", + "langchain_community.chat_models.MiniMaxChat" + ], + [ + "langchain.chat_models.PaiEasChatEndpoint", + "langchain_community.chat_models.PaiEasChatEndpoint" + ], + [ + "langchain.chat_models.PromptLayerChatOpenAI", + "langchain_community.chat_models.PromptLayerChatOpenAI" + ], + [ + "langchain.chat_models.QianfanChatEndpoint", + "langchain_community.chat_models.QianfanChatEndpoint" + ], + [ + "langchain.chat_models.VolcEngineMaasChat", + "langchain_community.chat_models.VolcEngineMaasChat" + ], + [ + "langchain.chat_models.anthropic.ChatAnthropic", + "langchain_community.chat_models.anthropic.ChatAnthropic" + ], + [ + "langchain.chat_models.anthropic.convert_messages_to_prompt_anthropic", + "langchain_community.chat_models.anthropic.convert_messages_to_prompt_anthropic" + ], + [ + "langchain.chat_models.anyscale.ChatAnyscale", + "langchain_community.chat_models.anyscale.ChatAnyscale" + ], + [ + "langchain.chat_models.azure_openai.AzureChatOpenAI", + "langchain_community.chat_models.azure_openai.AzureChatOpenAI" + ], + [ + "langchain.chat_models.azureml_endpoint.AzureMLChatOnlineEndpoint", + "langchain_community.chat_models.azureml_endpoint.AzureMLChatOnlineEndpoint" + ], + [ + "langchain.chat_models.azureml_endpoint.LlamaContentFormatter", + "langchain_community.chat_models.azureml_endpoint.LlamaContentFormatter" + ], + [ + "langchain.chat_models.baichuan.ChatBaichuan", + "langchain_community.chat_models.baichuan.ChatBaichuan" + ], + [ + "langchain.chat_models.baidu_qianfan_endpoint.QianfanChatEndpoint", + "langchain_community.chat_models.baidu_qianfan_endpoint.QianfanChatEndpoint" + ], + [ + "langchain.chat_models.bedrock.BedrockChat", + "langchain_community.chat_models.bedrock.BedrockChat" + ], + [ + "langchain.chat_models.bedrock.ChatPromptAdapter", + "langchain_community.chat_models.bedrock.ChatPromptAdapter" + ], + [ + "langchain.chat_models.cohere.ChatCohere", + "langchain_community.chat_models.cohere.ChatCohere" + ], + [ + "langchain.chat_models.databricks.ChatDatabricks", + "langchain_community.chat_models.databricks.ChatDatabricks" + ], + [ + "langchain.chat_models.ernie.ErnieBotChat", + "langchain_community.chat_models.ernie.ErnieBotChat" + ], + [ + "langchain.chat_models.everlyai.ChatEverlyAI", + "langchain_community.chat_models.everlyai.ChatEverlyAI" + ], + [ + "langchain.chat_models.fake.FakeListChatModel", + "langchain_community.chat_models.fake.FakeListChatModel" + ], + [ + "langchain.chat_models.fake.FakeMessagesListChatModel", + "langchain_community.chat_models.fake.FakeMessagesListChatModel" + ], + [ + "langchain.chat_models.fireworks.ChatFireworks", + "langchain_community.chat_models.fireworks.ChatFireworks" + ], + [ + "langchain.chat_models.gigachat.GigaChat", + "langchain_community.chat_models.gigachat.GigaChat" + ], + [ + "langchain.chat_models.google_palm.ChatGooglePalm", + "langchain_community.chat_models.google_palm.ChatGooglePalm" + ], + [ + "langchain.chat_models.google_palm.ChatGooglePalmError", + "langchain_community.chat_models.google_palm.ChatGooglePalmError" + ], + [ + "langchain.chat_models.human.HumanInputChatModel", + "langchain_community.chat_models.human.HumanInputChatModel" + ], + [ + "langchain.chat_models.hunyuan.ChatHunyuan", + "langchain_community.chat_models.hunyuan.ChatHunyuan" + ], + [ + "langchain.chat_models.javelin_ai_gateway.ChatJavelinAIGateway", + "langchain_community.chat_models.javelin_ai_gateway.ChatJavelinAIGateway" + ], + [ + "langchain.chat_models.javelin_ai_gateway.ChatParams", + "langchain_community.chat_models.javelin_ai_gateway.ChatParams" + ], + [ + "langchain.chat_models.jinachat.JinaChat", + "langchain_community.chat_models.jinachat.JinaChat" + ], + [ + "langchain.chat_models.konko.ChatKonko", + "langchain_community.chat_models.konko.ChatKonko" + ], + [ + "langchain.chat_models.litellm.ChatLiteLLM", + "langchain_community.chat_models.litellm.ChatLiteLLM" + ], + [ + "langchain.chat_models.litellm.ChatLiteLLMException", + "langchain_community.chat_models.litellm.ChatLiteLLMException" + ], + [ + "langchain.chat_models.meta.convert_messages_to_prompt_llama", + "langchain_community.chat_models.meta.convert_messages_to_prompt_llama" + ], + [ + "langchain.chat_models.minimax.MiniMaxChat", + "langchain_community.chat_models.minimax.MiniMaxChat" + ], + [ + "langchain.chat_models.mlflow.ChatMlflow", + "langchain_community.chat_models.mlflow.ChatMlflow" + ], + [ + "langchain.chat_models.mlflow_ai_gateway.ChatMLflowAIGateway", + "langchain_community.chat_models.mlflow_ai_gateway.ChatMLflowAIGateway" + ], + [ + "langchain.chat_models.mlflow_ai_gateway.ChatParams", + "langchain_community.chat_models.mlflow_ai_gateway.ChatParams" + ], + [ + "langchain.chat_models.ollama.ChatOllama", + "langchain_community.chat_models.ollama.ChatOllama" + ], + [ + "langchain.chat_models.openai.ChatOpenAI", + "langchain_community.chat_models.openai.ChatOpenAI" + ], + [ + "langchain.chat_models.pai_eas_endpoint.PaiEasChatEndpoint", + "langchain_community.chat_models.pai_eas_endpoint.PaiEasChatEndpoint" + ], + [ + "langchain.chat_models.promptlayer_openai.PromptLayerChatOpenAI", + "langchain_community.chat_models.promptlayer_openai.PromptLayerChatOpenAI" + ], + [ + "langchain.chat_models.tongyi.ChatTongyi", + "langchain_community.chat_models.tongyi.ChatTongyi" + ], + [ + "langchain.chat_models.vertexai.ChatVertexAI", + "langchain_community.chat_models.vertexai.ChatVertexAI" + ], + [ + "langchain.chat_models.volcengine_maas.VolcEngineMaasChat", + "langchain_community.chat_models.volcengine_maas.VolcEngineMaasChat" + ], + [ + "langchain.chat_models.volcengine_maas.convert_dict_to_message", + "langchain_community.chat_models.volcengine_maas.convert_dict_to_message" + ], + [ + "langchain.chat_models.yandex.ChatYandexGPT", + "langchain_community.chat_models.yandex.ChatYandexGPT" + ], + [ + "langchain.docstore.DocstoreFn", + "langchain_community.docstore.DocstoreFn" + ], + [ + "langchain.docstore.InMemoryDocstore", + "langchain_community.docstore.InMemoryDocstore" + ], + [ + "langchain.docstore.Wikipedia", + "langchain_community.docstore.Wikipedia" + ], + [ + "langchain.docstore.arbitrary_fn.DocstoreFn", + "langchain_community.docstore.arbitrary_fn.DocstoreFn" + ], + [ + "langchain.docstore.base.AddableMixin", + "langchain_community.docstore.base.AddableMixin" + ], + [ + "langchain.docstore.base.Docstore", + "langchain_community.docstore.base.Docstore" + ], + [ + "langchain.docstore.in_memory.InMemoryDocstore", + "langchain_community.docstore.in_memory.InMemoryDocstore" + ], + [ + "langchain.docstore.wikipedia.Wikipedia", + "langchain_community.docstore.wikipedia.Wikipedia" + ], + [ + "langchain.document_loaders.AZLyricsLoader", + "langchain_community.document_loaders.AZLyricsLoader" + ], + [ + "langchain.document_loaders.AcreomLoader", + "langchain_community.document_loaders.AcreomLoader" + ], + [ + "langchain.document_loaders.AirbyteCDKLoader", + "langchain_community.document_loaders.AirbyteCDKLoader" + ], + [ + "langchain.document_loaders.AirbyteGongLoader", + "langchain_community.document_loaders.AirbyteGongLoader" + ], + [ + "langchain.document_loaders.AirbyteHubspotLoader", + "langchain_community.document_loaders.AirbyteHubspotLoader" + ], + [ + "langchain.document_loaders.AirbyteJSONLoader", + "langchain_community.document_loaders.AirbyteJSONLoader" + ], + [ + "langchain.document_loaders.AirbyteSalesforceLoader", + "langchain_community.document_loaders.AirbyteSalesforceLoader" + ], + [ + "langchain.document_loaders.AirbyteShopifyLoader", + "langchain_community.document_loaders.AirbyteShopifyLoader" + ], + [ + "langchain.document_loaders.AirbyteStripeLoader", + "langchain_community.document_loaders.AirbyteStripeLoader" + ], + [ + "langchain.document_loaders.AirbyteTypeformLoader", + "langchain_community.document_loaders.AirbyteTypeformLoader" + ], + [ + "langchain.document_loaders.AirbyteZendeskSupportLoader", + "langchain_community.document_loaders.AirbyteZendeskSupportLoader" + ], + [ + "langchain.document_loaders.AirtableLoader", + "langchain_community.document_loaders.AirtableLoader" + ], + [ + "langchain.document_loaders.AmazonTextractPDFLoader", + "langchain_community.document_loaders.AmazonTextractPDFLoader" + ], + [ + "langchain.document_loaders.ApifyDatasetLoader", + "langchain_community.document_loaders.ApifyDatasetLoader" + ], + [ + "langchain.document_loaders.ArcGISLoader", + "langchain_community.document_loaders.ArcGISLoader" + ], + [ + "langchain.document_loaders.ArxivLoader", + "langchain_community.document_loaders.ArxivLoader" + ], + [ + "langchain.document_loaders.AssemblyAIAudioTranscriptLoader", + "langchain_community.document_loaders.AssemblyAIAudioTranscriptLoader" + ], + [ + "langchain.document_loaders.AsyncChromiumLoader", + "langchain_community.document_loaders.AsyncChromiumLoader" + ], + [ + "langchain.document_loaders.AsyncHtmlLoader", + "langchain_community.document_loaders.AsyncHtmlLoader" + ], + [ + "langchain.document_loaders.AzureAIDataLoader", + "langchain_community.document_loaders.AzureAIDataLoader" + ], + [ + "langchain.document_loaders.AzureBlobStorageContainerLoader", + "langchain_community.document_loaders.AzureBlobStorageContainerLoader" + ], + [ + "langchain.document_loaders.AzureBlobStorageFileLoader", + "langchain_community.document_loaders.AzureBlobStorageFileLoader" + ], + [ + "langchain.document_loaders.BSHTMLLoader", + "langchain_community.document_loaders.BSHTMLLoader" + ], + [ + "langchain.document_loaders.BibtexLoader", + "langchain_community.document_loaders.BibtexLoader" + ], + [ + "langchain.document_loaders.BigQueryLoader", + "langchain_community.document_loaders.BigQueryLoader" + ], + [ + "langchain.document_loaders.BiliBiliLoader", + "langchain_community.document_loaders.BiliBiliLoader" + ], + [ + "langchain.document_loaders.BlackboardLoader", + "langchain_community.document_loaders.BlackboardLoader" + ], + [ + "langchain.document_loaders.Blob", + "langchain_community.document_loaders.Blob" + ], + [ + "langchain.document_loaders.BlobLoader", + "langchain_community.document_loaders.BlobLoader" + ], + [ + "langchain.document_loaders.BlockchainDocumentLoader", + "langchain_community.document_loaders.BlockchainDocumentLoader" + ], + [ + "langchain.document_loaders.BraveSearchLoader", + "langchain_community.document_loaders.BraveSearchLoader" + ], + [ + "langchain.document_loaders.BrowserlessLoader", + "langchain_community.document_loaders.BrowserlessLoader" + ], + [ + "langchain.document_loaders.CSVLoader", + "langchain_community.document_loaders.CSVLoader" + ], + [ + "langchain.document_loaders.ChatGPTLoader", + "langchain_community.document_loaders.ChatGPTLoader" + ], + [ + "langchain.document_loaders.CoNLLULoader", + "langchain_community.document_loaders.CoNLLULoader" + ], + [ + "langchain.document_loaders.CollegeConfidentialLoader", + "langchain_community.document_loaders.CollegeConfidentialLoader" + ], + [ + "langchain.document_loaders.ConcurrentLoader", + "langchain_community.document_loaders.ConcurrentLoader" + ], + [ + "langchain.document_loaders.ConfluenceLoader", + "langchain_community.document_loaders.ConfluenceLoader" + ], + [ + "langchain.document_loaders.CouchbaseLoader", + "langchain_community.document_loaders.CouchbaseLoader" + ], + [ + "langchain.document_loaders.CubeSemanticLoader", + "langchain_community.document_loaders.CubeSemanticLoader" + ], + [ + "langchain.document_loaders.DataFrameLoader", + "langchain_community.document_loaders.DataFrameLoader" + ], + [ + "langchain.document_loaders.DatadogLogsLoader", + "langchain_community.document_loaders.DatadogLogsLoader" + ], + [ + "langchain.document_loaders.DiffbotLoader", + "langchain_community.document_loaders.DiffbotLoader" + ], + [ + "langchain.document_loaders.DirectoryLoader", + "langchain_community.document_loaders.DirectoryLoader" + ], + [ + "langchain.document_loaders.DiscordChatLoader", + "langchain_community.document_loaders.DiscordChatLoader" + ], + [ + "langchain.document_loaders.DocugamiLoader", + "langchain_community.document_loaders.DocugamiLoader" + ], + [ + "langchain.document_loaders.DocusaurusLoader", + "langchain_community.document_loaders.DocusaurusLoader" + ], + [ + "langchain.document_loaders.Docx2txtLoader", + "langchain_community.document_loaders.Docx2txtLoader" + ], + [ + "langchain.document_loaders.DropboxLoader", + "langchain_community.document_loaders.DropboxLoader" + ], + [ + "langchain.document_loaders.DuckDBLoader", + "langchain_community.document_loaders.DuckDBLoader" + ], + [ + "langchain.document_loaders.EtherscanLoader", + "langchain_community.document_loaders.EtherscanLoader" + ], + [ + "langchain.document_loaders.EverNoteLoader", + "langchain_community.document_loaders.EverNoteLoader" + ], + [ + "langchain.document_loaders.FacebookChatLoader", + "langchain_community.document_loaders.FacebookChatLoader" + ], + [ + "langchain.document_loaders.FaunaLoader", + "langchain_community.document_loaders.FaunaLoader" + ], + [ + "langchain.document_loaders.FigmaFileLoader", + "langchain_community.document_loaders.FigmaFileLoader" + ], + [ + "langchain.document_loaders.FileSystemBlobLoader", + "langchain_community.document_loaders.FileSystemBlobLoader" + ], + [ + "langchain.document_loaders.GCSDirectoryLoader", + "langchain_community.document_loaders.GCSDirectoryLoader" + ], + [ + "langchain.document_loaders.GCSFileLoader", + "langchain_community.document_loaders.GCSFileLoader" + ], + [ + "langchain.document_loaders.GeoDataFrameLoader", + "langchain_community.document_loaders.GeoDataFrameLoader" + ], + [ + "langchain.document_loaders.GitHubIssuesLoader", + "langchain_community.document_loaders.GitHubIssuesLoader" + ], + [ + "langchain.document_loaders.GitLoader", + "langchain_community.document_loaders.GitLoader" + ], + [ + "langchain.document_loaders.GitbookLoader", + "langchain_community.document_loaders.GitbookLoader" + ], + [ + "langchain.document_loaders.GoogleApiClient", + "langchain_community.document_loaders.GoogleApiClient" + ], + [ + "langchain.document_loaders.GoogleApiYoutubeLoader", + "langchain_community.document_loaders.GoogleApiYoutubeLoader" + ], + [ + "langchain.document_loaders.GoogleDriveLoader", + "langchain_community.document_loaders.GoogleDriveLoader" + ], + [ + "langchain.document_loaders.GoogleSpeechToTextLoader", + "langchain_community.document_loaders.GoogleSpeechToTextLoader" + ], + [ + "langchain.document_loaders.GutenbergLoader", + "langchain_community.document_loaders.GutenbergLoader" + ], + [ + "langchain.document_loaders.HNLoader", + "langchain_community.document_loaders.HNLoader" + ], + [ + "langchain.document_loaders.HuggingFaceDatasetLoader", + "langchain_community.document_loaders.HuggingFaceDatasetLoader" + ], + [ + "langchain.document_loaders.IFixitLoader", + "langchain_community.document_loaders.IFixitLoader" + ], + [ + "langchain.document_loaders.IMSDbLoader", + "langchain_community.document_loaders.IMSDbLoader" + ], + [ + "langchain.document_loaders.ImageCaptionLoader", + "langchain_community.document_loaders.ImageCaptionLoader" + ], + [ + "langchain.document_loaders.IuguLoader", + "langchain_community.document_loaders.IuguLoader" + ], + [ + "langchain.document_loaders.JSONLoader", + "langchain_community.document_loaders.JSONLoader" + ], + [ + "langchain.document_loaders.JoplinLoader", + "langchain_community.document_loaders.JoplinLoader" + ], + [ + "langchain.document_loaders.LakeFSLoader", + "langchain_community.document_loaders.LakeFSLoader" + ], + [ + "langchain.document_loaders.LarkSuiteDocLoader", + "langchain_community.document_loaders.LarkSuiteDocLoader" + ], + [ + "langchain.document_loaders.MHTMLLoader", + "langchain_community.document_loaders.MHTMLLoader" + ], + [ + "langchain.document_loaders.MWDumpLoader", + "langchain_community.document_loaders.MWDumpLoader" + ], + [ + "langchain.document_loaders.MastodonTootsLoader", + "langchain_community.document_loaders.MastodonTootsLoader" + ], + [ + "langchain.document_loaders.MathpixPDFLoader", + "langchain_community.document_loaders.MathpixPDFLoader" + ], + [ + "langchain.document_loaders.MaxComputeLoader", + "langchain_community.document_loaders.MaxComputeLoader" + ], + [ + "langchain.document_loaders.MergedDataLoader", + "langchain_community.document_loaders.MergedDataLoader" + ], + [ + "langchain.document_loaders.ModernTreasuryLoader", + "langchain_community.document_loaders.ModernTreasuryLoader" + ], + [ + "langchain.document_loaders.MongodbLoader", + "langchain_community.document_loaders.MongodbLoader" + ], + [ + "langchain.document_loaders.NewsURLLoader", + "langchain_community.document_loaders.NewsURLLoader" + ], + [ + "langchain.document_loaders.NotebookLoader", + "langchain_community.document_loaders.NotebookLoader" + ], + [ + "langchain.document_loaders.NotionDBLoader", + "langchain_community.document_loaders.NotionDBLoader" + ], + [ + "langchain.document_loaders.NotionDirectoryLoader", + "langchain_community.document_loaders.NotionDirectoryLoader" + ], + [ + "langchain.document_loaders.OBSDirectoryLoader", + "langchain_community.document_loaders.OBSDirectoryLoader" + ], + [ + "langchain.document_loaders.OBSFileLoader", + "langchain_community.document_loaders.OBSFileLoader" + ], + [ + "langchain.document_loaders.ObsidianLoader", + "langchain_community.document_loaders.ObsidianLoader" + ], + [ + "langchain.document_loaders.OneDriveFileLoader", + "langchain_community.document_loaders.OneDriveFileLoader" + ], + [ + "langchain.document_loaders.OneDriveLoader", + "langchain_community.document_loaders.OneDriveLoader" + ], + [ + "langchain.document_loaders.OnlinePDFLoader", + "langchain_community.document_loaders.OnlinePDFLoader" + ], + [ + "langchain.document_loaders.OpenCityDataLoader", + "langchain_community.document_loaders.OpenCityDataLoader" + ], + [ + "langchain.document_loaders.OutlookMessageLoader", + "langchain_community.document_loaders.OutlookMessageLoader" + ], + [ + "langchain.document_loaders.PDFMinerLoader", + "langchain_community.document_loaders.PDFMinerLoader" + ], + [ + "langchain.document_loaders.PDFMinerPDFasHTMLLoader", + "langchain_community.document_loaders.PDFMinerPDFasHTMLLoader" + ], + [ + "langchain.document_loaders.PDFPlumberLoader", + "langchain_community.document_loaders.PDFPlumberLoader" + ], + [ + "langchain.document_loaders.PagedPDFSplitter", + "langchain_community.document_loaders.PagedPDFSplitter" + ], + [ + "langchain.document_loaders.PlaywrightURLLoader", + "langchain_community.document_loaders.PlaywrightURLLoader" + ], + [ + "langchain.document_loaders.PolarsDataFrameLoader", + "langchain_community.document_loaders.PolarsDataFrameLoader" + ], + [ + "langchain.document_loaders.PsychicLoader", + "langchain_community.document_loaders.PsychicLoader" + ], + [ + "langchain.document_loaders.PubMedLoader", + "langchain_community.document_loaders.PubMedLoader" + ], + [ + "langchain.document_loaders.PyMuPDFLoader", + "langchain_community.document_loaders.PyMuPDFLoader" + ], + [ + "langchain.document_loaders.PyPDFDirectoryLoader", + "langchain_community.document_loaders.PyPDFDirectoryLoader" + ], + [ + "langchain.document_loaders.PyPDFLoader", + "langchain_community.document_loaders.PyPDFLoader" + ], + [ + "langchain.document_loaders.PyPDFium2Loader", + "langchain_community.document_loaders.PyPDFium2Loader" + ], + [ + "langchain.document_loaders.PySparkDataFrameLoader", + "langchain_community.document_loaders.PySparkDataFrameLoader" + ], + [ + "langchain.document_loaders.PythonLoader", + "langchain_community.document_loaders.PythonLoader" + ], + [ + "langchain.document_loaders.RSSFeedLoader", + "langchain_community.document_loaders.RSSFeedLoader" + ], + [ + "langchain.document_loaders.ReadTheDocsLoader", + "langchain_community.document_loaders.ReadTheDocsLoader" + ], + [ + "langchain.document_loaders.RecursiveUrlLoader", + "langchain_community.document_loaders.RecursiveUrlLoader" + ], + [ + "langchain.document_loaders.RedditPostsLoader", + "langchain_community.document_loaders.RedditPostsLoader" + ], + [ + "langchain.document_loaders.RoamLoader", + "langchain_community.document_loaders.RoamLoader" + ], + [ + "langchain.document_loaders.RocksetLoader", + "langchain_community.document_loaders.RocksetLoader" + ], + [ + "langchain.document_loaders.S3DirectoryLoader", + "langchain_community.document_loaders.S3DirectoryLoader" + ], + [ + "langchain.document_loaders.S3FileLoader", + "langchain_community.document_loaders.S3FileLoader" + ], + [ + "langchain.document_loaders.SRTLoader", + "langchain_community.document_loaders.SRTLoader" + ], + [ + "langchain.document_loaders.SeleniumURLLoader", + "langchain_community.document_loaders.SeleniumURLLoader" + ], + [ + "langchain.document_loaders.SharePointLoader", + "langchain_community.document_loaders.SharePointLoader" + ], + [ + "langchain.document_loaders.SitemapLoader", + "langchain_community.document_loaders.SitemapLoader" + ], + [ + "langchain.document_loaders.SlackDirectoryLoader", + "langchain_community.document_loaders.SlackDirectoryLoader" + ], + [ + "langchain.document_loaders.SnowflakeLoader", + "langchain_community.document_loaders.SnowflakeLoader" + ], + [ + "langchain.document_loaders.SpreedlyLoader", + "langchain_community.document_loaders.SpreedlyLoader" + ], + [ + "langchain.document_loaders.StripeLoader", + "langchain_community.document_loaders.StripeLoader" + ], + [ + "langchain.document_loaders.TelegramChatApiLoader", + "langchain_community.document_loaders.TelegramChatApiLoader" + ], + [ + "langchain.document_loaders.TelegramChatFileLoader", + "langchain_community.document_loaders.TelegramChatFileLoader" + ], + [ + "langchain.document_loaders.TelegramChatLoader", + "langchain_community.document_loaders.TelegramChatLoader" + ], + [ + "langchain.document_loaders.TencentCOSDirectoryLoader", + "langchain_community.document_loaders.TencentCOSDirectoryLoader" + ], + [ + "langchain.document_loaders.TencentCOSFileLoader", + "langchain_community.document_loaders.TencentCOSFileLoader" + ], + [ + "langchain.document_loaders.TensorflowDatasetLoader", + "langchain_community.document_loaders.TensorflowDatasetLoader" + ], + [ + "langchain.document_loaders.TextLoader", + "langchain_community.document_loaders.TextLoader" + ], + [ + "langchain.document_loaders.ToMarkdownLoader", + "langchain_community.document_loaders.ToMarkdownLoader" + ], + [ + "langchain.document_loaders.TomlLoader", + "langchain_community.document_loaders.TomlLoader" + ], + [ + "langchain.document_loaders.TrelloLoader", + "langchain_community.document_loaders.TrelloLoader" + ], + [ + "langchain.document_loaders.TwitterTweetLoader", + "langchain_community.document_loaders.TwitterTweetLoader" + ], + [ + "langchain.document_loaders.UnstructuredAPIFileIOLoader", + "langchain_community.document_loaders.UnstructuredAPIFileIOLoader" + ], + [ + "langchain.document_loaders.UnstructuredAPIFileLoader", + "langchain_community.document_loaders.UnstructuredAPIFileLoader" + ], + [ + "langchain.document_loaders.UnstructuredCSVLoader", + "langchain_community.document_loaders.UnstructuredCSVLoader" + ], + [ + "langchain.document_loaders.UnstructuredEPubLoader", + "langchain_community.document_loaders.UnstructuredEPubLoader" + ], + [ + "langchain.document_loaders.UnstructuredEmailLoader", + "langchain_community.document_loaders.UnstructuredEmailLoader" + ], + [ + "langchain.document_loaders.UnstructuredExcelLoader", + "langchain_community.document_loaders.UnstructuredExcelLoader" + ], + [ + "langchain.document_loaders.UnstructuredFileIOLoader", + "langchain_community.document_loaders.UnstructuredFileIOLoader" + ], + [ + "langchain.document_loaders.UnstructuredFileLoader", + "langchain_community.document_loaders.UnstructuredFileLoader" + ], + [ + "langchain.document_loaders.UnstructuredHTMLLoader", + "langchain_community.document_loaders.UnstructuredHTMLLoader" + ], + [ + "langchain.document_loaders.UnstructuredImageLoader", + "langchain_community.document_loaders.UnstructuredImageLoader" + ], + [ + "langchain.document_loaders.UnstructuredMarkdownLoader", + "langchain_community.document_loaders.UnstructuredMarkdownLoader" + ], + [ + "langchain.document_loaders.UnstructuredODTLoader", + "langchain_community.document_loaders.UnstructuredODTLoader" + ], + [ + "langchain.document_loaders.UnstructuredOrgModeLoader", + "langchain_community.document_loaders.UnstructuredOrgModeLoader" + ], + [ + "langchain.document_loaders.UnstructuredPDFLoader", + "langchain_community.document_loaders.UnstructuredPDFLoader" + ], + [ + "langchain.document_loaders.UnstructuredPowerPointLoader", + "langchain_community.document_loaders.UnstructuredPowerPointLoader" + ], + [ + "langchain.document_loaders.UnstructuredRSTLoader", + "langchain_community.document_loaders.UnstructuredRSTLoader" + ], + [ + "langchain.document_loaders.UnstructuredRTFLoader", + "langchain_community.document_loaders.UnstructuredRTFLoader" + ], + [ + "langchain.document_loaders.UnstructuredTSVLoader", + "langchain_community.document_loaders.UnstructuredTSVLoader" + ], + [ + "langchain.document_loaders.UnstructuredURLLoader", + "langchain_community.document_loaders.UnstructuredURLLoader" + ], + [ + "langchain.document_loaders.UnstructuredWordDocumentLoader", + "langchain_community.document_loaders.UnstructuredWordDocumentLoader" + ], + [ + "langchain.document_loaders.UnstructuredXMLLoader", + "langchain_community.document_loaders.UnstructuredXMLLoader" + ], + [ + "langchain.document_loaders.WeatherDataLoader", + "langchain_community.document_loaders.WeatherDataLoader" + ], + [ + "langchain.document_loaders.WebBaseLoader", + "langchain_community.document_loaders.WebBaseLoader" + ], + [ + "langchain.document_loaders.WhatsAppChatLoader", + "langchain_community.document_loaders.WhatsAppChatLoader" + ], + [ + "langchain.document_loaders.WikipediaLoader", + "langchain_community.document_loaders.WikipediaLoader" + ], + [ + "langchain.document_loaders.XorbitsLoader", + "langchain_community.document_loaders.XorbitsLoader" + ], + [ + "langchain.document_loaders.YoutubeAudioLoader", + "langchain_community.document_loaders.YoutubeAudioLoader" + ], + [ + "langchain.document_loaders.YoutubeLoader", + "langchain_community.document_loaders.YoutubeLoader" + ], + [ + "langchain.document_loaders.YuqueLoader", + "langchain_community.document_loaders.YuqueLoader" + ], + [ + "langchain.document_loaders.acreom.AcreomLoader", + "langchain_community.document_loaders.acreom.AcreomLoader" + ], + [ + "langchain.document_loaders.airbyte.AirbyteCDKLoader", + "langchain_community.document_loaders.airbyte.AirbyteCDKLoader" + ], + [ + "langchain.document_loaders.airbyte.AirbyteGongLoader", + "langchain_community.document_loaders.airbyte.AirbyteGongLoader" + ], + [ + "langchain.document_loaders.airbyte.AirbyteHubspotLoader", + "langchain_community.document_loaders.airbyte.AirbyteHubspotLoader" + ], + [ + "langchain.document_loaders.airbyte.AirbyteSalesforceLoader", + "langchain_community.document_loaders.airbyte.AirbyteSalesforceLoader" + ], + [ + "langchain.document_loaders.airbyte.AirbyteShopifyLoader", + "langchain_community.document_loaders.airbyte.AirbyteShopifyLoader" + ], + [ + "langchain.document_loaders.airbyte.AirbyteStripeLoader", + "langchain_community.document_loaders.airbyte.AirbyteStripeLoader" + ], + [ + "langchain.document_loaders.airbyte.AirbyteTypeformLoader", + "langchain_community.document_loaders.airbyte.AirbyteTypeformLoader" + ], + [ + "langchain.document_loaders.airbyte.AirbyteZendeskSupportLoader", + "langchain_community.document_loaders.airbyte.AirbyteZendeskSupportLoader" + ], + [ + "langchain.document_loaders.airbyte.RecordHandler", + "langchain_community.document_loaders.airbyte.RecordHandler" + ], + [ + "langchain.document_loaders.airbyte_json.AirbyteJSONLoader", + "langchain_community.document_loaders.airbyte_json.AirbyteJSONLoader" + ], + [ + "langchain.document_loaders.airtable.AirtableLoader", + "langchain_community.document_loaders.airtable.AirtableLoader" + ], + [ + "langchain.document_loaders.apify_dataset.ApifyDatasetLoader", + "langchain_community.document_loaders.apify_dataset.ApifyDatasetLoader" + ], + [ + "langchain.document_loaders.arcgis_loader.ArcGISLoader", + "langchain_community.document_loaders.arcgis_loader.ArcGISLoader" + ], + [ + "langchain.document_loaders.arxiv.ArxivLoader", + "langchain_community.document_loaders.arxiv.ArxivLoader" + ], + [ + "langchain.document_loaders.assemblyai.AssemblyAIAudioTranscriptLoader", + "langchain_community.document_loaders.assemblyai.AssemblyAIAudioTranscriptLoader" + ], + [ + "langchain.document_loaders.assemblyai.TranscriptFormat", + "langchain_community.document_loaders.assemblyai.TranscriptFormat" + ], + [ + "langchain.document_loaders.async_html.AsyncHtmlLoader", + "langchain_community.document_loaders.async_html.AsyncHtmlLoader" + ], + [ + "langchain.document_loaders.azlyrics.AZLyricsLoader", + "langchain_community.document_loaders.azlyrics.AZLyricsLoader" + ], + [ + "langchain.document_loaders.azure_ai_data.AzureAIDataLoader", + "langchain_community.document_loaders.azure_ai_data.AzureAIDataLoader" + ], + [ + "langchain.document_loaders.azure_blob_storage_container.AzureBlobStorageContainerLoader", + "langchain_community.document_loaders.azure_blob_storage_container.AzureBlobStorageContainerLoader" + ], + [ + "langchain.document_loaders.azure_blob_storage_file.AzureBlobStorageFileLoader", + "langchain_community.document_loaders.azure_blob_storage_file.AzureBlobStorageFileLoader" + ], + [ + "langchain.document_loaders.baiducloud_bos_directory.BaiduBOSDirectoryLoader", + "langchain_community.document_loaders.baiducloud_bos_directory.BaiduBOSDirectoryLoader" + ], + [ + "langchain.document_loaders.baiducloud_bos_file.BaiduBOSFileLoader", + "langchain_community.document_loaders.baiducloud_bos_file.BaiduBOSFileLoader" + ], + [ + "langchain.document_loaders.base.BaseBlobParser", + "langchain_community.document_loaders.base.BaseBlobParser" + ], + [ + "langchain.document_loaders.base.BaseLoader", + "langchain_community.document_loaders.base.BaseLoader" + ], + [ + "langchain.document_loaders.base_o365.O365BaseLoader", + "langchain_community.document_loaders.base_o365.O365BaseLoader" + ], + [ + "langchain.document_loaders.bibtex.BibtexLoader", + "langchain_community.document_loaders.bibtex.BibtexLoader" + ], + [ + "langchain.document_loaders.bigquery.BigQueryLoader", + "langchain_community.document_loaders.bigquery.BigQueryLoader" + ], + [ + "langchain.document_loaders.bilibili.BiliBiliLoader", + "langchain_community.document_loaders.bilibili.BiliBiliLoader" + ], + [ + "langchain.document_loaders.blackboard.BlackboardLoader", + "langchain_community.document_loaders.blackboard.BlackboardLoader" + ], + [ + "langchain.document_loaders.blockchain.BlockchainDocumentLoader", + "langchain_community.document_loaders.blockchain.BlockchainDocumentLoader" + ], + [ + "langchain.document_loaders.blockchain.BlockchainType", + "langchain_community.document_loaders.blockchain.BlockchainType" + ], + [ + "langchain.document_loaders.brave_search.BraveSearchLoader", + "langchain_community.document_loaders.brave_search.BraveSearchLoader" + ], + [ + "langchain.document_loaders.browserless.BrowserlessLoader", + "langchain_community.document_loaders.browserless.BrowserlessLoader" + ], + [ + "langchain.document_loaders.chatgpt.ChatGPTLoader", + "langchain_community.document_loaders.chatgpt.ChatGPTLoader" + ], + [ + "langchain.document_loaders.chatgpt.concatenate_rows", + "langchain_community.document_loaders.chatgpt.concatenate_rows" + ], + [ + "langchain.document_loaders.chromium.AsyncChromiumLoader", + "langchain_community.document_loaders.chromium.AsyncChromiumLoader" + ], + [ + "langchain.document_loaders.college_confidential.CollegeConfidentialLoader", + "langchain_community.document_loaders.college_confidential.CollegeConfidentialLoader" + ], + [ + "langchain.document_loaders.concurrent.ConcurrentLoader", + "langchain_community.document_loaders.concurrent.ConcurrentLoader" + ], + [ + "langchain.document_loaders.confluence.ConfluenceLoader", + "langchain_community.document_loaders.confluence.ConfluenceLoader" + ], + [ + "langchain.document_loaders.confluence.ContentFormat", + "langchain_community.document_loaders.confluence.ContentFormat" + ], + [ + "langchain.document_loaders.conllu.CoNLLULoader", + "langchain_community.document_loaders.conllu.CoNLLULoader" + ], + [ + "langchain.document_loaders.couchbase.CouchbaseLoader", + "langchain_community.document_loaders.couchbase.CouchbaseLoader" + ], + [ + "langchain.document_loaders.csv_loader.CSVLoader", + "langchain_community.document_loaders.csv_loader.CSVLoader" + ], + [ + "langchain.document_loaders.csv_loader.UnstructuredCSVLoader", + "langchain_community.document_loaders.csv_loader.UnstructuredCSVLoader" + ], + [ + "langchain.document_loaders.cube_semantic.CubeSemanticLoader", + "langchain_community.document_loaders.cube_semantic.CubeSemanticLoader" + ], + [ + "langchain.document_loaders.datadog_logs.DatadogLogsLoader", + "langchain_community.document_loaders.datadog_logs.DatadogLogsLoader" + ], + [ + "langchain.document_loaders.dataframe.BaseDataFrameLoader", + "langchain_community.document_loaders.dataframe.BaseDataFrameLoader" + ], + [ + "langchain.document_loaders.dataframe.DataFrameLoader", + "langchain_community.document_loaders.dataframe.DataFrameLoader" + ], + [ + "langchain.document_loaders.diffbot.DiffbotLoader", + "langchain_community.document_loaders.diffbot.DiffbotLoader" + ], + [ + "langchain.document_loaders.directory.DirectoryLoader", + "langchain_community.document_loaders.directory.DirectoryLoader" + ], + [ + "langchain.document_loaders.discord.DiscordChatLoader", + "langchain_community.document_loaders.discord.DiscordChatLoader" + ], + [ + "langchain.document_loaders.docugami.DocugamiLoader", + "langchain_community.document_loaders.docugami.DocugamiLoader" + ], + [ + "langchain.document_loaders.docusaurus.DocusaurusLoader", + "langchain_community.document_loaders.docusaurus.DocusaurusLoader" + ], + [ + "langchain.document_loaders.dropbox.DropboxLoader", + "langchain_community.document_loaders.dropbox.DropboxLoader" + ], + [ + "langchain.document_loaders.duckdb_loader.DuckDBLoader", + "langchain_community.document_loaders.duckdb_loader.DuckDBLoader" + ], + [ + "langchain.document_loaders.email.OutlookMessageLoader", + "langchain_community.document_loaders.email.OutlookMessageLoader" + ], + [ + "langchain.document_loaders.email.UnstructuredEmailLoader", + "langchain_community.document_loaders.email.UnstructuredEmailLoader" + ], + [ + "langchain.document_loaders.epub.UnstructuredEPubLoader", + "langchain_community.document_loaders.epub.UnstructuredEPubLoader" + ], + [ + "langchain.document_loaders.etherscan.EtherscanLoader", + "langchain_community.document_loaders.etherscan.EtherscanLoader" + ], + [ + "langchain.document_loaders.evernote.EverNoteLoader", + "langchain_community.document_loaders.evernote.EverNoteLoader" + ], + [ + "langchain.document_loaders.excel.UnstructuredExcelLoader", + "langchain_community.document_loaders.excel.UnstructuredExcelLoader" + ], + [ + "langchain.document_loaders.facebook_chat.FacebookChatLoader", + "langchain_community.document_loaders.facebook_chat.FacebookChatLoader" + ], + [ + "langchain.document_loaders.facebook_chat.concatenate_rows", + "langchain_community.document_loaders.facebook_chat.concatenate_rows" + ], + [ + "langchain.document_loaders.fauna.FaunaLoader", + "langchain_community.document_loaders.fauna.FaunaLoader" + ], + [ + "langchain.document_loaders.figma.FigmaFileLoader", + "langchain_community.document_loaders.figma.FigmaFileLoader" + ], + [ + "langchain.document_loaders.gcs_directory.GCSDirectoryLoader", + "langchain_community.document_loaders.gcs_directory.GCSDirectoryLoader" + ], + [ + "langchain.document_loaders.gcs_file.GCSFileLoader", + "langchain_community.document_loaders.gcs_file.GCSFileLoader" + ], + [ + "langchain.document_loaders.generic.GenericLoader", + "langchain_community.document_loaders.generic.GenericLoader" + ], + [ + "langchain.document_loaders.geodataframe.GeoDataFrameLoader", + "langchain_community.document_loaders.geodataframe.GeoDataFrameLoader" + ], + [ + "langchain.document_loaders.git.GitLoader", + "langchain_community.document_loaders.git.GitLoader" + ], + [ + "langchain.document_loaders.gitbook.GitbookLoader", + "langchain_community.document_loaders.gitbook.GitbookLoader" + ], + [ + "langchain.document_loaders.github.BaseGitHubLoader", + "langchain_community.document_loaders.github.BaseGitHubLoader" + ], + [ + "langchain.document_loaders.github.GitHubIssuesLoader", + "langchain_community.document_loaders.github.GitHubIssuesLoader" + ], + [ + "langchain.document_loaders.google_speech_to_text.GoogleSpeechToTextLoader", + "langchain_community.document_loaders.google_speech_to_text.GoogleSpeechToTextLoader" + ], + [ + "langchain.document_loaders.googledrive.GoogleDriveLoader", + "langchain_community.document_loaders.googledrive.GoogleDriveLoader" + ], + [ + "langchain.document_loaders.gutenberg.GutenbergLoader", + "langchain_community.document_loaders.gutenberg.GutenbergLoader" + ], + [ + "langchain.document_loaders.helpers.FileEncoding", + "langchain_community.document_loaders.helpers.FileEncoding" + ], + [ + "langchain.document_loaders.helpers.detect_file_encodings", + "langchain_community.document_loaders.helpers.detect_file_encodings" + ], + [ + "langchain.document_loaders.hn.HNLoader", + "langchain_community.document_loaders.hn.HNLoader" + ], + [ + "langchain.document_loaders.html.UnstructuredHTMLLoader", + "langchain_community.document_loaders.html.UnstructuredHTMLLoader" + ], + [ + "langchain.document_loaders.html_bs.BSHTMLLoader", + "langchain_community.document_loaders.html_bs.BSHTMLLoader" + ], + [ + "langchain.document_loaders.hugging_face_dataset.HuggingFaceDatasetLoader", + "langchain_community.document_loaders.hugging_face_dataset.HuggingFaceDatasetLoader" + ], + [ + "langchain.document_loaders.ifixit.IFixitLoader", + "langchain_community.document_loaders.ifixit.IFixitLoader" + ], + [ + "langchain.document_loaders.image.UnstructuredImageLoader", + "langchain_community.document_loaders.image.UnstructuredImageLoader" + ], + [ + "langchain.document_loaders.image_captions.ImageCaptionLoader", + "langchain_community.document_loaders.image_captions.ImageCaptionLoader" + ], + [ + "langchain.document_loaders.imsdb.IMSDbLoader", + "langchain_community.document_loaders.imsdb.IMSDbLoader" + ], + [ + "langchain.document_loaders.iugu.IuguLoader", + "langchain_community.document_loaders.iugu.IuguLoader" + ], + [ + "langchain.document_loaders.joplin.JoplinLoader", + "langchain_community.document_loaders.joplin.JoplinLoader" + ], + [ + "langchain.document_loaders.json_loader.JSONLoader", + "langchain_community.document_loaders.json_loader.JSONLoader" + ], + [ + "langchain.document_loaders.lakefs.LakeFSClient", + "langchain_community.document_loaders.lakefs.LakeFSClient" + ], + [ + "langchain.document_loaders.lakefs.LakeFSLoader", + "langchain_community.document_loaders.lakefs.LakeFSLoader" + ], + [ + "langchain.document_loaders.lakefs.UnstructuredLakeFSLoader", + "langchain_community.document_loaders.lakefs.UnstructuredLakeFSLoader" + ], + [ + "langchain.document_loaders.larksuite.LarkSuiteDocLoader", + "langchain_community.document_loaders.larksuite.LarkSuiteDocLoader" + ], + [ + "langchain.document_loaders.markdown.UnstructuredMarkdownLoader", + "langchain_community.document_loaders.markdown.UnstructuredMarkdownLoader" + ], + [ + "langchain.document_loaders.mastodon.MastodonTootsLoader", + "langchain_community.document_loaders.mastodon.MastodonTootsLoader" + ], + [ + "langchain.document_loaders.max_compute.MaxComputeLoader", + "langchain_community.document_loaders.max_compute.MaxComputeLoader" + ], + [ + "langchain.document_loaders.mediawikidump.MWDumpLoader", + "langchain_community.document_loaders.mediawikidump.MWDumpLoader" + ], + [ + "langchain.document_loaders.merge.MergedDataLoader", + "langchain_community.document_loaders.merge.MergedDataLoader" + ], + [ + "langchain.document_loaders.mhtml.MHTMLLoader", + "langchain_community.document_loaders.mhtml.MHTMLLoader" + ], + [ + "langchain.document_loaders.modern_treasury.ModernTreasuryLoader", + "langchain_community.document_loaders.modern_treasury.ModernTreasuryLoader" + ], + [ + "langchain.document_loaders.mongodb.MongodbLoader", + "langchain_community.document_loaders.mongodb.MongodbLoader" + ], + [ + "langchain.document_loaders.news.NewsURLLoader", + "langchain_community.document_loaders.news.NewsURLLoader" + ], + [ + "langchain.document_loaders.notebook.NotebookLoader", + "langchain_community.document_loaders.notebook.NotebookLoader" + ], + [ + "langchain.document_loaders.notebook.concatenate_cells", + "langchain_community.document_loaders.notebook.concatenate_cells" + ], + [ + "langchain.document_loaders.notebook.remove_newlines", + "langchain_community.document_loaders.notebook.remove_newlines" + ], + [ + "langchain.document_loaders.notion.NotionDirectoryLoader", + "langchain_community.document_loaders.notion.NotionDirectoryLoader" + ], + [ + "langchain.document_loaders.notiondb.NotionDBLoader", + "langchain_community.document_loaders.notiondb.NotionDBLoader" + ], + [ + "langchain.document_loaders.nuclia.NucliaLoader", + "langchain_community.document_loaders.nuclia.NucliaLoader" + ], + [ + "langchain.document_loaders.obs_directory.OBSDirectoryLoader", + "langchain_community.document_loaders.obs_directory.OBSDirectoryLoader" + ], + [ + "langchain.document_loaders.obs_file.OBSFileLoader", + "langchain_community.document_loaders.obs_file.OBSFileLoader" + ], + [ + "langchain.document_loaders.obsidian.ObsidianLoader", + "langchain_community.document_loaders.obsidian.ObsidianLoader" + ], + [ + "langchain.document_loaders.odt.UnstructuredODTLoader", + "langchain_community.document_loaders.odt.UnstructuredODTLoader" + ], + [ + "langchain.document_loaders.onedrive.OneDriveLoader", + "langchain_community.document_loaders.onedrive.OneDriveLoader" + ], + [ + "langchain.document_loaders.onedrive_file.OneDriveFileLoader", + "langchain_community.document_loaders.onedrive_file.OneDriveFileLoader" + ], + [ + "langchain.document_loaders.onenote.OneNoteLoader", + "langchain_community.document_loaders.onenote.OneNoteLoader" + ], + [ + "langchain.document_loaders.open_city_data.OpenCityDataLoader", + "langchain_community.document_loaders.open_city_data.OpenCityDataLoader" + ], + [ + "langchain.document_loaders.org_mode.UnstructuredOrgModeLoader", + "langchain_community.document_loaders.org_mode.UnstructuredOrgModeLoader" + ], + [ + "langchain.document_loaders.pdf.AmazonTextractPDFLoader", + "langchain_community.document_loaders.pdf.AmazonTextractPDFLoader" + ], + [ + "langchain.document_loaders.pdf.BasePDFLoader", + "langchain_community.document_loaders.pdf.BasePDFLoader" + ], + [ + "langchain.document_loaders.pdf.DocumentIntelligenceLoader", + "langchain_community.document_loaders.pdf.DocumentIntelligenceLoader" + ], + [ + "langchain.document_loaders.pdf.MathpixPDFLoader", + "langchain_community.document_loaders.pdf.MathpixPDFLoader" + ], + [ + "langchain.document_loaders.pdf.OnlinePDFLoader", + "langchain_community.document_loaders.pdf.OnlinePDFLoader" + ], + [ + "langchain.document_loaders.pdf.PDFMinerLoader", + "langchain_community.document_loaders.pdf.PDFMinerLoader" + ], + [ + "langchain.document_loaders.pdf.PDFMinerPDFasHTMLLoader", + "langchain_community.document_loaders.pdf.PDFMinerPDFasHTMLLoader" + ], + [ + "langchain.document_loaders.pdf.PDFPlumberLoader", + "langchain_community.document_loaders.pdf.PDFPlumberLoader" + ], + [ + "langchain.document_loaders.pdf.PyMuPDFLoader", + "langchain_community.document_loaders.pdf.PyMuPDFLoader" + ], + [ + "langchain.document_loaders.pdf.PyPDFDirectoryLoader", + "langchain_community.document_loaders.pdf.PyPDFDirectoryLoader" + ], + [ + "langchain.document_loaders.pdf.PyPDFLoader", + "langchain_community.document_loaders.pdf.PyPDFLoader" + ], + [ + "langchain.document_loaders.pdf.PyPDFium2Loader", + "langchain_community.document_loaders.pdf.PyPDFium2Loader" + ], + [ + "langchain.document_loaders.pdf.UnstructuredPDFLoader", + "langchain_community.document_loaders.pdf.UnstructuredPDFLoader" + ], + [ + "langchain.document_loaders.polars_dataframe.PolarsDataFrameLoader", + "langchain_community.document_loaders.polars_dataframe.PolarsDataFrameLoader" + ], + [ + "langchain.document_loaders.powerpoint.UnstructuredPowerPointLoader", + "langchain_community.document_loaders.powerpoint.UnstructuredPowerPointLoader" + ], + [ + "langchain.document_loaders.psychic.PsychicLoader", + "langchain_community.document_loaders.psychic.PsychicLoader" + ], + [ + "langchain.document_loaders.pubmed.PubMedLoader", + "langchain_community.document_loaders.pubmed.PubMedLoader" + ], + [ + "langchain.document_loaders.pyspark_dataframe.PySparkDataFrameLoader", + "langchain_community.document_loaders.pyspark_dataframe.PySparkDataFrameLoader" + ], + [ + "langchain.document_loaders.python.PythonLoader", + "langchain_community.document_loaders.python.PythonLoader" + ], + [ + "langchain.document_loaders.quip.QuipLoader", + "langchain_community.document_loaders.quip.QuipLoader" + ], + [ + "langchain.document_loaders.readthedocs.ReadTheDocsLoader", + "langchain_community.document_loaders.readthedocs.ReadTheDocsLoader" + ], + [ + "langchain.document_loaders.recursive_url_loader.RecursiveUrlLoader", + "langchain_community.document_loaders.recursive_url_loader.RecursiveUrlLoader" + ], + [ + "langchain.document_loaders.reddit.RedditPostsLoader", + "langchain_community.document_loaders.reddit.RedditPostsLoader" + ], + [ + "langchain.document_loaders.roam.RoamLoader", + "langchain_community.document_loaders.roam.RoamLoader" + ], + [ + "langchain.document_loaders.rocksetdb.RocksetLoader", + "langchain_community.document_loaders.rocksetdb.RocksetLoader" + ], + [ + "langchain.document_loaders.rspace.RSpaceLoader", + "langchain_community.document_loaders.rspace.RSpaceLoader" + ], + [ + "langchain.document_loaders.rss.RSSFeedLoader", + "langchain_community.document_loaders.rss.RSSFeedLoader" + ], + [ + "langchain.document_loaders.rst.UnstructuredRSTLoader", + "langchain_community.document_loaders.rst.UnstructuredRSTLoader" + ], + [ + "langchain.document_loaders.rtf.UnstructuredRTFLoader", + "langchain_community.document_loaders.rtf.UnstructuredRTFLoader" + ], + [ + "langchain.document_loaders.s3_directory.S3DirectoryLoader", + "langchain_community.document_loaders.s3_directory.S3DirectoryLoader" + ], + [ + "langchain.document_loaders.s3_file.S3FileLoader", + "langchain_community.document_loaders.s3_file.S3FileLoader" + ], + [ + "langchain.document_loaders.sharepoint.SharePointLoader", + "langchain_community.document_loaders.sharepoint.SharePointLoader" + ], + [ + "langchain.document_loaders.sitemap.SitemapLoader", + "langchain_community.document_loaders.sitemap.SitemapLoader" + ], + [ + "langchain.document_loaders.slack_directory.SlackDirectoryLoader", + "langchain_community.document_loaders.slack_directory.SlackDirectoryLoader" + ], + [ + "langchain.document_loaders.snowflake_loader.SnowflakeLoader", + "langchain_community.document_loaders.snowflake_loader.SnowflakeLoader" + ], + [ + "langchain.document_loaders.spreedly.SpreedlyLoader", + "langchain_community.document_loaders.spreedly.SpreedlyLoader" + ], + [ + "langchain.document_loaders.srt.SRTLoader", + "langchain_community.document_loaders.srt.SRTLoader" + ], + [ + "langchain.document_loaders.stripe.StripeLoader", + "langchain_community.document_loaders.stripe.StripeLoader" + ], + [ + "langchain.document_loaders.telegram.TelegramChatApiLoader", + "langchain_community.document_loaders.telegram.TelegramChatApiLoader" + ], + [ + "langchain.document_loaders.telegram.TelegramChatFileLoader", + "langchain_community.document_loaders.telegram.TelegramChatFileLoader" + ], + [ + "langchain.document_loaders.telegram.concatenate_rows", + "langchain_community.document_loaders.telegram.concatenate_rows" + ], + [ + "langchain.document_loaders.telegram.text_to_docs", + "langchain_community.document_loaders.telegram.text_to_docs" + ], + [ + "langchain.document_loaders.tencent_cos_directory.TencentCOSDirectoryLoader", + "langchain_community.document_loaders.tencent_cos_directory.TencentCOSDirectoryLoader" + ], + [ + "langchain.document_loaders.tencent_cos_file.TencentCOSFileLoader", + "langchain_community.document_loaders.tencent_cos_file.TencentCOSFileLoader" + ], + [ + "langchain.document_loaders.tensorflow_datasets.TensorflowDatasetLoader", + "langchain_community.document_loaders.tensorflow_datasets.TensorflowDatasetLoader" + ], + [ + "langchain.document_loaders.text.TextLoader", + "langchain_community.document_loaders.text.TextLoader" + ], + [ + "langchain.document_loaders.tomarkdown.ToMarkdownLoader", + "langchain_community.document_loaders.tomarkdown.ToMarkdownLoader" + ], + [ + "langchain.document_loaders.toml.TomlLoader", + "langchain_community.document_loaders.toml.TomlLoader" + ], + [ + "langchain.document_loaders.trello.TrelloLoader", + "langchain_community.document_loaders.trello.TrelloLoader" + ], + [ + "langchain.document_loaders.tsv.UnstructuredTSVLoader", + "langchain_community.document_loaders.tsv.UnstructuredTSVLoader" + ], + [ + "langchain.document_loaders.twitter.TwitterTweetLoader", + "langchain_community.document_loaders.twitter.TwitterTweetLoader" + ], + [ + "langchain.document_loaders.unstructured.UnstructuredAPIFileIOLoader", + "langchain_community.document_loaders.unstructured.UnstructuredAPIFileIOLoader" + ], + [ + "langchain.document_loaders.unstructured.UnstructuredAPIFileLoader", + "langchain_community.document_loaders.unstructured.UnstructuredAPIFileLoader" + ], + [ + "langchain.document_loaders.unstructured.UnstructuredBaseLoader", + "langchain_community.document_loaders.unstructured.UnstructuredBaseLoader" + ], + [ + "langchain.document_loaders.unstructured.UnstructuredFileIOLoader", + "langchain_community.document_loaders.unstructured.UnstructuredFileIOLoader" + ], + [ + "langchain.document_loaders.unstructured.UnstructuredFileLoader", + "langchain_community.document_loaders.unstructured.UnstructuredFileLoader" + ], + [ + "langchain.document_loaders.unstructured.get_elements_from_api", + "langchain_community.document_loaders.unstructured.get_elements_from_api" + ], + [ + "langchain.document_loaders.unstructured.satisfies_min_unstructured_version", + "langchain_community.document_loaders.unstructured.satisfies_min_unstructured_version" + ], + [ + "langchain.document_loaders.unstructured.validate_unstructured_version", + "langchain_community.document_loaders.unstructured.validate_unstructured_version" + ], + [ + "langchain.document_loaders.url.UnstructuredURLLoader", + "langchain_community.document_loaders.url.UnstructuredURLLoader" + ], + [ + "langchain.document_loaders.url_playwright.PlaywrightEvaluator", + "langchain_community.document_loaders.url_playwright.PlaywrightEvaluator" + ], + [ + "langchain.document_loaders.url_playwright.PlaywrightURLLoader", + "langchain_community.document_loaders.url_playwright.PlaywrightURLLoader" + ], + [ + "langchain.document_loaders.url_playwright.UnstructuredHtmlEvaluator", + "langchain_community.document_loaders.url_playwright.UnstructuredHtmlEvaluator" + ], + [ + "langchain.document_loaders.url_selenium.SeleniumURLLoader", + "langchain_community.document_loaders.url_selenium.SeleniumURLLoader" + ], + [ + "langchain.document_loaders.weather.WeatherDataLoader", + "langchain_community.document_loaders.weather.WeatherDataLoader" + ], + [ + "langchain.document_loaders.web_base.WebBaseLoader", + "langchain_community.document_loaders.web_base.WebBaseLoader" + ], + [ + "langchain.document_loaders.whatsapp_chat.WhatsAppChatLoader", + "langchain_community.document_loaders.whatsapp_chat.WhatsAppChatLoader" + ], + [ + "langchain.document_loaders.whatsapp_chat.concatenate_rows", + "langchain_community.document_loaders.whatsapp_chat.concatenate_rows" + ], + [ + "langchain.document_loaders.wikipedia.WikipediaLoader", + "langchain_community.document_loaders.wikipedia.WikipediaLoader" + ], + [ + "langchain.document_loaders.word_document.Docx2txtLoader", + "langchain_community.document_loaders.word_document.Docx2txtLoader" + ], + [ + "langchain.document_loaders.word_document.UnstructuredWordDocumentLoader", + "langchain_community.document_loaders.word_document.UnstructuredWordDocumentLoader" + ], + [ + "langchain.document_loaders.xml.UnstructuredXMLLoader", + "langchain_community.document_loaders.xml.UnstructuredXMLLoader" + ], + [ + "langchain.document_loaders.xorbits.XorbitsLoader", + "langchain_community.document_loaders.xorbits.XorbitsLoader" + ], + [ + "langchain.document_loaders.youtube.GoogleApiClient", + "langchain_community.document_loaders.youtube.GoogleApiClient" + ], + [ + "langchain.document_loaders.youtube.GoogleApiYoutubeLoader", + "langchain_community.document_loaders.youtube.GoogleApiYoutubeLoader" + ], + [ + "langchain.document_loaders.youtube.YoutubeLoader", + "langchain_community.document_loaders.youtube.YoutubeLoader" + ], + [ + "langchain.document_transformers.BeautifulSoupTransformer", + "langchain_community.document_transformers.BeautifulSoupTransformer" + ], + [ + "langchain.document_transformers.DoctranPropertyExtractor", + "langchain_community.document_transformers.DoctranPropertyExtractor" + ], + [ + "langchain.document_transformers.DoctranQATransformer", + "langchain_community.document_transformers.DoctranQATransformer" + ], + [ + "langchain.document_transformers.DoctranTextTranslator", + "langchain_community.document_transformers.DoctranTextTranslator" + ], + [ + "langchain.document_transformers.EmbeddingsClusteringFilter", + "langchain_community.document_transformers.EmbeddingsClusteringFilter" + ], + [ + "langchain.document_transformers.EmbeddingsRedundantFilter", + "langchain_community.document_transformers.EmbeddingsRedundantFilter" + ], + [ + "langchain.document_transformers.GoogleTranslateTransformer", + "langchain_community.document_transformers.GoogleTranslateTransformer" + ], + [ + "langchain.document_transformers.Html2TextTransformer", + "langchain_community.document_transformers.Html2TextTransformer" + ], + [ + "langchain.document_transformers.LongContextReorder", + "langchain_community.document_transformers.LongContextReorder" + ], + [ + "langchain.document_transformers.NucliaTextTransformer", + "langchain_community.document_transformers.NucliaTextTransformer" + ], + [ + "langchain.document_transformers.OpenAIMetadataTagger", + "langchain_community.document_transformers.OpenAIMetadataTagger" + ], + [ + "langchain.document_transformers.beautiful_soup_transformer.BeautifulSoupTransformer", + "langchain_community.document_transformers.beautiful_soup_transformer.BeautifulSoupTransformer" + ], + [ + "langchain.document_transformers.doctran_text_extract.DoctranPropertyExtractor", + "langchain_community.document_transformers.doctran_text_extract.DoctranPropertyExtractor" + ], + [ + "langchain.document_transformers.doctran_text_qa.DoctranQATransformer", + "langchain_community.document_transformers.doctran_text_qa.DoctranQATransformer" + ], + [ + "langchain.document_transformers.doctran_text_translate.DoctranTextTranslator", + "langchain_community.document_transformers.doctran_text_translate.DoctranTextTranslator" + ], + [ + "langchain.document_transformers.embeddings_redundant_filter.EmbeddingsClusteringFilter", + "langchain_community.document_transformers.embeddings_redundant_filter.EmbeddingsClusteringFilter" + ], + [ + "langchain.document_transformers.embeddings_redundant_filter.EmbeddingsRedundantFilter", + "langchain_community.document_transformers.embeddings_redundant_filter.EmbeddingsRedundantFilter" + ], + [ + "langchain.document_transformers.embeddings_redundant_filter._DocumentWithState", + "langchain_community.document_transformers.embeddings_redundant_filter._DocumentWithState" + ], + [ + "langchain.document_transformers.embeddings_redundant_filter._filter_similar_embeddings", + "langchain_community.document_transformers.embeddings_redundant_filter._filter_similar_embeddings" + ], + [ + "langchain.document_transformers.embeddings_redundant_filter._get_embeddings_from_stateful_docs", + "langchain_community.document_transformers.embeddings_redundant_filter._get_embeddings_from_stateful_docs" + ], + [ + "langchain.document_transformers.embeddings_redundant_filter.get_stateful_documents", + "langchain_community.document_transformers.embeddings_redundant_filter.get_stateful_documents" + ], + [ + "langchain.document_transformers.get_stateful_documents", + "langchain_community.document_transformers.get_stateful_documents" + ], + [ + "langchain.document_transformers.google_translate.GoogleTranslateTransformer", + "langchain_community.document_transformers.google_translate.GoogleTranslateTransformer" + ], + [ + "langchain.document_transformers.html2text.Html2TextTransformer", + "langchain_community.document_transformers.html2text.Html2TextTransformer" + ], + [ + "langchain.document_transformers.long_context_reorder.LongContextReorder", + "langchain_community.document_transformers.long_context_reorder.LongContextReorder" + ], + [ + "langchain.document_transformers.nuclia_text_transform.NucliaTextTransformer", + "langchain_community.document_transformers.nuclia_text_transform.NucliaTextTransformer" + ], + [ + "langchain.document_transformers.openai_functions.OpenAIMetadataTagger", + "langchain_community.document_transformers.openai_functions.OpenAIMetadataTagger" + ], + [ + "langchain.document_transformers.openai_functions.create_metadata_tagger", + "langchain_community.document_transformers.openai_functions.create_metadata_tagger" + ], + [ + "langchain.embeddings.AlephAlphaAsymmetricSemanticEmbedding", + "langchain_community.embeddings.AlephAlphaAsymmetricSemanticEmbedding" + ], + [ + "langchain.embeddings.AlephAlphaSymmetricSemanticEmbedding", + "langchain_community.embeddings.AlephAlphaSymmetricSemanticEmbedding" + ], + [ + "langchain.embeddings.AwaEmbeddings", + "langchain_community.embeddings.AwaEmbeddings" + ], + [ + "langchain.embeddings.AzureOpenAIEmbeddings", + "langchain_community.embeddings.AzureOpenAIEmbeddings" + ], + [ + "langchain.embeddings.BedrockEmbeddings", + "langchain_community.embeddings.BedrockEmbeddings" + ], + [ + "langchain.embeddings.BookendEmbeddings", + "langchain_community.embeddings.BookendEmbeddings" + ], + [ + "langchain.embeddings.ClarifaiEmbeddings", + "langchain_community.embeddings.ClarifaiEmbeddings" + ], + [ + "langchain.embeddings.CohereEmbeddings", + "langchain_community.embeddings.CohereEmbeddings" + ], + [ + "langchain.embeddings.DashScopeEmbeddings", + "langchain_community.embeddings.DashScopeEmbeddings" + ], + [ + "langchain.embeddings.DatabricksEmbeddings", + "langchain_community.embeddings.DatabricksEmbeddings" + ], + [ + "langchain.embeddings.DeepInfraEmbeddings", + "langchain_community.embeddings.DeepInfraEmbeddings" + ], + [ + "langchain.embeddings.DeterministicFakeEmbedding", + "langchain_community.embeddings.DeterministicFakeEmbedding" + ], + [ + "langchain.embeddings.EdenAiEmbeddings", + "langchain_community.embeddings.EdenAiEmbeddings" + ], + [ + "langchain.embeddings.ElasticsearchEmbeddings", + "langchain_community.embeddings.ElasticsearchEmbeddings" + ], + [ + "langchain.embeddings.EmbaasEmbeddings", + "langchain_community.embeddings.EmbaasEmbeddings" + ], + [ + "langchain.embeddings.ErnieEmbeddings", + "langchain_community.embeddings.ErnieEmbeddings" + ], + [ + "langchain.embeddings.FakeEmbeddings", + "langchain_community.embeddings.FakeEmbeddings" + ], + [ + "langchain.embeddings.FastEmbedEmbeddings", + "langchain_community.embeddings.FastEmbedEmbeddings" + ], + [ + "langchain.embeddings.GPT4AllEmbeddings", + "langchain_community.embeddings.GPT4AllEmbeddings" + ], + [ + "langchain.embeddings.GooglePalmEmbeddings", + "langchain_community.embeddings.GooglePalmEmbeddings" + ], + [ + "langchain.embeddings.GradientEmbeddings", + "langchain_community.embeddings.GradientEmbeddings" + ], + [ + "langchain.embeddings.HuggingFaceBgeEmbeddings", + "langchain_community.embeddings.HuggingFaceBgeEmbeddings" + ], + [ + "langchain.embeddings.HuggingFaceEmbeddings", + "langchain_community.embeddings.HuggingFaceEmbeddings" + ], + [ + "langchain.embeddings.HuggingFaceHubEmbeddings", + "langchain_community.embeddings.HuggingFaceHubEmbeddings" + ], + [ + "langchain.embeddings.HuggingFaceInferenceAPIEmbeddings", + "langchain_community.embeddings.HuggingFaceInferenceAPIEmbeddings" + ], + [ + "langchain.embeddings.HuggingFaceInstructEmbeddings", + "langchain_community.embeddings.HuggingFaceInstructEmbeddings" + ], + [ + "langchain.embeddings.InfinityEmbeddings", + "langchain_community.embeddings.InfinityEmbeddings" + ], + [ + "langchain.embeddings.JavelinAIGatewayEmbeddings", + "langchain_community.embeddings.JavelinAIGatewayEmbeddings" + ], + [ + "langchain.embeddings.JinaEmbeddings", + "langchain_community.embeddings.JinaEmbeddings" + ], + [ + "langchain.embeddings.JohnSnowLabsEmbeddings", + "langchain_community.embeddings.JohnSnowLabsEmbeddings" + ], + [ + "langchain.embeddings.LlamaCppEmbeddings", + "langchain_community.embeddings.LlamaCppEmbeddings" + ], + [ + "langchain.embeddings.LocalAIEmbeddings", + "langchain_community.embeddings.LocalAIEmbeddings" + ], + [ + "langchain.embeddings.MiniMaxEmbeddings", + "langchain_community.embeddings.MiniMaxEmbeddings" + ], + [ + "langchain.embeddings.MlflowAIGatewayEmbeddings", + "langchain_community.embeddings.MlflowAIGatewayEmbeddings" + ], + [ + "langchain.embeddings.MlflowEmbeddings", + "langchain_community.embeddings.MlflowEmbeddings" + ], + [ + "langchain.embeddings.ModelScopeEmbeddings", + "langchain_community.embeddings.ModelScopeEmbeddings" + ], + [ + "langchain.embeddings.MosaicMLInstructorEmbeddings", + "langchain_community.embeddings.MosaicMLInstructorEmbeddings" + ], + [ + "langchain.embeddings.NLPCloudEmbeddings", + "langchain_community.embeddings.NLPCloudEmbeddings" + ], + [ + "langchain.embeddings.OctoAIEmbeddings", + "langchain_community.embeddings.OctoAIEmbeddings" + ], + [ + "langchain.embeddings.OllamaEmbeddings", + "langchain_community.embeddings.OllamaEmbeddings" + ], + [ + "langchain.embeddings.OpenAIEmbeddings", + "langchain_community.embeddings.OpenAIEmbeddings" + ], + [ + "langchain.embeddings.QianfanEmbeddingsEndpoint", + "langchain_community.embeddings.QianfanEmbeddingsEndpoint" + ], + [ + "langchain.embeddings.SagemakerEndpointEmbeddings", + "langchain_community.embeddings.SagemakerEndpointEmbeddings" + ], + [ + "langchain.embeddings.SelfHostedEmbeddings", + "langchain_community.embeddings.SelfHostedEmbeddings" + ], + [ + "langchain.embeddings.SelfHostedHuggingFaceEmbeddings", + "langchain_community.embeddings.SelfHostedHuggingFaceEmbeddings" + ], + [ + "langchain.embeddings.SelfHostedHuggingFaceInstructEmbeddings", + "langchain_community.embeddings.SelfHostedHuggingFaceInstructEmbeddings" + ], + [ + "langchain.embeddings.SentenceTransformerEmbeddings", + "langchain_community.embeddings.SentenceTransformerEmbeddings" + ], + [ + "langchain.embeddings.SpacyEmbeddings", + "langchain_community.embeddings.SpacyEmbeddings" + ], + [ + "langchain.embeddings.TensorflowHubEmbeddings", + "langchain_community.embeddings.TensorflowHubEmbeddings" + ], + [ + "langchain.embeddings.VertexAIEmbeddings", + "langchain_community.embeddings.VertexAIEmbeddings" + ], + [ + "langchain.embeddings.VoyageEmbeddings", + "langchain_community.embeddings.VoyageEmbeddings" + ], + [ + "langchain.embeddings.XinferenceEmbeddings", + "langchain_community.embeddings.XinferenceEmbeddings" + ], + [ + "langchain.embeddings.aleph_alpha.AlephAlphaAsymmetricSemanticEmbedding", + "langchain_community.embeddings.aleph_alpha.AlephAlphaAsymmetricSemanticEmbedding" + ], + [ + "langchain.embeddings.aleph_alpha.AlephAlphaSymmetricSemanticEmbedding", + "langchain_community.embeddings.aleph_alpha.AlephAlphaSymmetricSemanticEmbedding" + ], + [ + "langchain.embeddings.awa.AwaEmbeddings", + "langchain_community.embeddings.awa.AwaEmbeddings" + ], + [ + "langchain.embeddings.azure_openai.AzureOpenAIEmbeddings", + "langchain_community.embeddings.azure_openai.AzureOpenAIEmbeddings" + ], + [ + "langchain.embeddings.baidu_qianfan_endpoint.QianfanEmbeddingsEndpoint", + "langchain_community.embeddings.baidu_qianfan_endpoint.QianfanEmbeddingsEndpoint" + ], + [ + "langchain.embeddings.bedrock.BedrockEmbeddings", + "langchain_community.embeddings.bedrock.BedrockEmbeddings" + ], + [ + "langchain.embeddings.bookend.BookendEmbeddings", + "langchain_community.embeddings.bookend.BookendEmbeddings" + ], + [ + "langchain.embeddings.clarifai.ClarifaiEmbeddings", + "langchain_community.embeddings.clarifai.ClarifaiEmbeddings" + ], + [ + "langchain.embeddings.cloudflare_workersai.CloudflareWorkersAIEmbeddings", + "langchain_community.embeddings.cloudflare_workersai.CloudflareWorkersAIEmbeddings" + ], + [ + "langchain.embeddings.cohere.CohereEmbeddings", + "langchain_community.embeddings.cohere.CohereEmbeddings" + ], + [ + "langchain.embeddings.dashscope.DashScopeEmbeddings", + "langchain_community.embeddings.dashscope.DashScopeEmbeddings" + ], + [ + "langchain.embeddings.databricks.DatabricksEmbeddings", + "langchain_community.embeddings.databricks.DatabricksEmbeddings" + ], + [ + "langchain.embeddings.deepinfra.DeepInfraEmbeddings", + "langchain_community.embeddings.deepinfra.DeepInfraEmbeddings" + ], + [ + "langchain.embeddings.edenai.EdenAiEmbeddings", + "langchain_community.embeddings.edenai.EdenAiEmbeddings" + ], + [ + "langchain.embeddings.elasticsearch.ElasticsearchEmbeddings", + "langchain_community.embeddings.elasticsearch.ElasticsearchEmbeddings" + ], + [ + "langchain.embeddings.embaas.EmbaasEmbeddings", + "langchain_community.embeddings.embaas.EmbaasEmbeddings" + ], + [ + "langchain.embeddings.ernie.ErnieEmbeddings", + "langchain_community.embeddings.ernie.ErnieEmbeddings" + ], + [ + "langchain.embeddings.fake.DeterministicFakeEmbedding", + "langchain_community.embeddings.fake.DeterministicFakeEmbedding" + ], + [ + "langchain.embeddings.fake.FakeEmbeddings", + "langchain_community.embeddings.fake.FakeEmbeddings" + ], + [ + "langchain.embeddings.fastembed.FastEmbedEmbeddings", + "langchain_community.embeddings.fastembed.FastEmbedEmbeddings" + ], + [ + "langchain.embeddings.google_palm.GooglePalmEmbeddings", + "langchain_community.embeddings.google_palm.GooglePalmEmbeddings" + ], + [ + "langchain.embeddings.gpt4all.GPT4AllEmbeddings", + "langchain_community.embeddings.gpt4all.GPT4AllEmbeddings" + ], + [ + "langchain.embeddings.gradient_ai.GradientEmbeddings", + "langchain_community.embeddings.gradient_ai.GradientEmbeddings" + ], + [ + "langchain.embeddings.huggingface.HuggingFaceBgeEmbeddings", + "langchain_community.embeddings.huggingface.HuggingFaceBgeEmbeddings" + ], + [ + "langchain.embeddings.huggingface.HuggingFaceEmbeddings", + "langchain_community.embeddings.huggingface.HuggingFaceEmbeddings" + ], + [ + "langchain.embeddings.huggingface.HuggingFaceInferenceAPIEmbeddings", + "langchain_community.embeddings.huggingface.HuggingFaceInferenceAPIEmbeddings" + ], + [ + "langchain.embeddings.huggingface.HuggingFaceInstructEmbeddings", + "langchain_community.embeddings.huggingface.HuggingFaceInstructEmbeddings" + ], + [ + "langchain.embeddings.huggingface_hub.HuggingFaceHubEmbeddings", + "langchain_community.embeddings.huggingface_hub.HuggingFaceHubEmbeddings" + ], + [ + "langchain.embeddings.infinity.InfinityEmbeddings", + "langchain_community.embeddings.infinity.InfinityEmbeddings" + ], + [ + "langchain.embeddings.infinity.TinyAsyncOpenAIInfinityEmbeddingClient", + "langchain_community.embeddings.infinity.TinyAsyncOpenAIInfinityEmbeddingClient" + ], + [ + "langchain.embeddings.javelin_ai_gateway.JavelinAIGatewayEmbeddings", + "langchain_community.embeddings.javelin_ai_gateway.JavelinAIGatewayEmbeddings" + ], + [ + "langchain.embeddings.jina.JinaEmbeddings", + "langchain_community.embeddings.jina.JinaEmbeddings" + ], + [ + "langchain.embeddings.johnsnowlabs.JohnSnowLabsEmbeddings", + "langchain_community.embeddings.johnsnowlabs.JohnSnowLabsEmbeddings" + ], + [ + "langchain.embeddings.llamacpp.LlamaCppEmbeddings", + "langchain_community.embeddings.llamacpp.LlamaCppEmbeddings" + ], + [ + "langchain.embeddings.llm_rails.LLMRailsEmbeddings", + "langchain_community.embeddings.llm_rails.LLMRailsEmbeddings" + ], + [ + "langchain.embeddings.localai.LocalAIEmbeddings", + "langchain_community.embeddings.localai.LocalAIEmbeddings" + ], + [ + "langchain.embeddings.minimax.MiniMaxEmbeddings", + "langchain_community.embeddings.minimax.MiniMaxEmbeddings" + ], + [ + "langchain.embeddings.mlflow.MlflowEmbeddings", + "langchain_community.embeddings.mlflow.MlflowEmbeddings" + ], + [ + "langchain.embeddings.mlflow_gateway.MlflowAIGatewayEmbeddings", + "langchain_community.embeddings.mlflow_gateway.MlflowAIGatewayEmbeddings" + ], + [ + "langchain.embeddings.modelscope_hub.ModelScopeEmbeddings", + "langchain_community.embeddings.modelscope_hub.ModelScopeEmbeddings" + ], + [ + "langchain.embeddings.mosaicml.MosaicMLInstructorEmbeddings", + "langchain_community.embeddings.mosaicml.MosaicMLInstructorEmbeddings" + ], + [ + "langchain.embeddings.nlpcloud.NLPCloudEmbeddings", + "langchain_community.embeddings.nlpcloud.NLPCloudEmbeddings" + ], + [ + "langchain.embeddings.octoai_embeddings.OctoAIEmbeddings", + "langchain_community.embeddings.octoai_embeddings.OctoAIEmbeddings" + ], + [ + "langchain.embeddings.ollama.OllamaEmbeddings", + "langchain_community.embeddings.ollama.OllamaEmbeddings" + ], + [ + "langchain.embeddings.openai.OpenAIEmbeddings", + "langchain_community.embeddings.openai.OpenAIEmbeddings" + ], + [ + "langchain.embeddings.sagemaker_endpoint.EmbeddingsContentHandler", + "langchain_community.embeddings.sagemaker_endpoint.EmbeddingsContentHandler" + ], + [ + "langchain.embeddings.sagemaker_endpoint.SagemakerEndpointEmbeddings", + "langchain_community.embeddings.sagemaker_endpoint.SagemakerEndpointEmbeddings" + ], + [ + "langchain.embeddings.self_hosted.SelfHostedEmbeddings", + "langchain_community.embeddings.self_hosted.SelfHostedEmbeddings" + ], + [ + "langchain.embeddings.self_hosted_hugging_face.SelfHostedHuggingFaceEmbeddings", + "langchain_community.embeddings.self_hosted_hugging_face.SelfHostedHuggingFaceEmbeddings" + ], + [ + "langchain.embeddings.self_hosted_hugging_face.SelfHostedHuggingFaceInstructEmbeddings", + "langchain_community.embeddings.self_hosted_hugging_face.SelfHostedHuggingFaceInstructEmbeddings" + ], + [ + "langchain.embeddings.sentence_transformer.SentenceTransformerEmbeddings", + "langchain_community.embeddings.sentence_transformer.SentenceTransformerEmbeddings" + ], + [ + "langchain.embeddings.spacy_embeddings.SpacyEmbeddings", + "langchain_community.embeddings.spacy_embeddings.SpacyEmbeddings" + ], + [ + "langchain.embeddings.tensorflow_hub.TensorflowHubEmbeddings", + "langchain_community.embeddings.tensorflow_hub.TensorflowHubEmbeddings" + ], + [ + "langchain.embeddings.vertexai.VertexAIEmbeddings", + "langchain_community.embeddings.vertexai.VertexAIEmbeddings" + ], + [ + "langchain.embeddings.voyageai.VoyageEmbeddings", + "langchain_community.embeddings.voyageai.VoyageEmbeddings" + ], + [ + "langchain.embeddings.xinference.XinferenceEmbeddings", + "langchain_community.embeddings.xinference.XinferenceEmbeddings" + ], + [ + "langchain.graphs.arangodb_graph.ArangoGraph", + "langchain_community.graphs.arangodb_graph.ArangoGraph" + ], + [ + "langchain.graphs.arangodb_graph.get_arangodb_client", + "langchain_community.graphs.arangodb_graph.get_arangodb_client" + ], + [ + "langchain.graphs.falkordb_graph.FalkorDBGraph", + "langchain_community.graphs.falkordb_graph.FalkorDBGraph" + ], + [ + "langchain.graphs.graph_document.GraphDocument", + "langchain_community.graphs.graph_document.GraphDocument" + ], + [ + "langchain.graphs.graph_document.Node", + "langchain_community.graphs.graph_document.Node" + ], + [ + "langchain.graphs.graph_document.Relationship", + "langchain_community.graphs.graph_document.Relationship" + ], + [ + "langchain.graphs.graph_store.GraphStore", + "langchain_community.graphs.graph_store.GraphStore" + ], + [ + "langchain.graphs.hugegraph.HugeGraph", + "langchain_community.graphs.hugegraph.HugeGraph" + ], + [ + "langchain.graphs.kuzu_graph.KuzuGraph", + "langchain_community.graphs.kuzu_graph.KuzuGraph" + ], + [ + "langchain.graphs.memgraph_graph.MemgraphGraph", + "langchain_community.graphs.memgraph_graph.MemgraphGraph" + ], + [ + "langchain.graphs.nebula_graph.NebulaGraph", + "langchain_community.graphs.nebula_graph.NebulaGraph" + ], + [ + "langchain.graphs.neo4j_graph.Neo4jGraph", + "langchain_community.graphs.neo4j_graph.Neo4jGraph" + ], + [ + "langchain.graphs.neptune_graph.NeptuneGraph", + "langchain_community.graphs.neptune_graph.NeptuneGraph" + ], + [ + "langchain.graphs.networkx_graph.KG_TRIPLE_DELIMITER", + "langchain_community.graphs.networkx_graph.KG_TRIPLE_DELIMITER" + ], + [ + "langchain.graphs.networkx_graph.KnowledgeTriple", + "langchain_community.graphs.networkx_graph.KnowledgeTriple" + ], + [ + "langchain.graphs.networkx_graph.NetworkxEntityGraph", + "langchain_community.graphs.networkx_graph.NetworkxEntityGraph" + ], + [ + "langchain.graphs.networkx_graph.get_entities", + "langchain_community.graphs.networkx_graph.get_entities" + ], + [ + "langchain.graphs.networkx_graph.parse_triples", + "langchain_community.graphs.networkx_graph.parse_triples" + ], + [ + "langchain.graphs.rdf_graph.RdfGraph", + "langchain_community.graphs.rdf_graph.RdfGraph" + ], + [ + "langchain.indexes.graph.NetworkxEntityGraph", + "langchain_community.graphs.networkx_graph.NetworkxEntityGraph" + ], + [ + "langchain.indexes.graph.parse_triples", + "langchain_community.graphs.networkx_graph.parse_triples" + ], + [ + "langchain.indexes.vectorstore.BaseLoader", + "langchain_community.document_loaders.base.BaseLoader" + ], + [ + "langchain.indexes.vectorstore.InMemoryVectorStore", + "langchain_community.vectorstores.inmemory.InMemoryVectorStore" + ], + [ + "langchain.llms.AI21", + "langchain_community.llms.AI21" + ], + [ + "langchain.llms.AlephAlpha", + "langchain_community.llms.AlephAlpha" + ], + [ + "langchain.llms.AmazonAPIGateway", + "langchain_community.llms.AmazonAPIGateway" + ], + [ + "langchain.llms.Anthropic", + "langchain_community.llms.Anthropic" + ], + [ + "langchain.llms.Anyscale", + "langchain_community.llms.Anyscale" + ], + [ + "langchain.llms.Arcee", + "langchain_community.llms.Arcee" + ], + [ + "langchain.llms.Aviary", + "langchain_community.llms.Aviary" + ], + [ + "langchain.llms.AzureMLOnlineEndpoint", + "langchain_community.llms.AzureMLOnlineEndpoint" + ], + [ + "langchain.llms.AzureOpenAI", + "langchain_community.llms.AzureOpenAI" + ], + [ + "langchain.llms.Banana", + "langchain_community.llms.Banana" + ], + [ + "langchain.llms.Baseten", + "langchain_community.llms.Baseten" + ], + [ + "langchain.llms.Beam", + "langchain_community.llms.Beam" + ], + [ + "langchain.llms.Bedrock", + "langchain_community.llms.Bedrock" + ], + [ + "langchain.llms.CTransformers", + "langchain_community.llms.CTransformers" + ], + [ + "langchain.llms.CTranslate2", + "langchain_community.llms.CTranslate2" + ], + [ + "langchain.llms.CerebriumAI", + "langchain_community.llms.CerebriumAI" + ], + [ + "langchain.llms.ChatGLM", + "langchain_community.llms.ChatGLM" + ], + [ + "langchain.llms.Clarifai", + "langchain_community.llms.Clarifai" + ], + [ + "langchain.llms.Cohere", + "langchain_community.llms.Cohere" + ], + [ + "langchain.llms.Databricks", + "langchain_community.llms.Databricks" + ], + [ + "langchain.llms.DeepInfra", + "langchain_community.llms.DeepInfra" + ], + [ + "langchain.llms.DeepSparse", + "langchain_community.llms.DeepSparse" + ], + [ + "langchain.llms.EdenAI", + "langchain_community.llms.EdenAI" + ], + [ + "langchain.llms.FakeListLLM", + "langchain_community.llms.FakeListLLM" + ], + [ + "langchain.llms.Fireworks", + "langchain_community.llms.Fireworks" + ], + [ + "langchain.llms.ForefrontAI", + "langchain_community.llms.ForefrontAI" + ], + [ + "langchain.llms.GPT4All", + "langchain_community.llms.GPT4All" + ], + [ + "langchain.llms.GigaChat", + "langchain_community.llms.GigaChat" + ], + [ + "langchain.llms.GooglePalm", + "langchain_community.llms.GooglePalm" + ], + [ + "langchain.llms.GooseAI", + "langchain_community.llms.GooseAI" + ], + [ + "langchain.llms.GradientLLM", + "langchain_community.llms.GradientLLM" + ], + [ + "langchain.llms.HuggingFaceEndpoint", + "langchain_community.llms.HuggingFaceEndpoint" + ], + [ + "langchain.llms.HuggingFaceHub", + "langchain_community.llms.HuggingFaceHub" + ], + [ + "langchain.llms.HuggingFacePipeline", + "langchain_community.llms.HuggingFacePipeline" + ], + [ + "langchain.llms.HuggingFaceTextGenInference", + "langchain_community.llms.HuggingFaceTextGenInference" + ], + [ + "langchain.llms.HumanInputLLM", + "langchain_community.llms.HumanInputLLM" + ], + [ + "langchain.llms.JavelinAIGateway", + "langchain_community.llms.JavelinAIGateway" + ], + [ + "langchain.llms.KoboldApiLLM", + "langchain_community.llms.KoboldApiLLM" + ], + [ + "langchain.llms.LlamaCpp", + "langchain_community.llms.LlamaCpp" + ], + [ + "langchain.llms.ManifestWrapper", + "langchain_community.llms.ManifestWrapper" + ], + [ + "langchain.llms.Minimax", + "langchain_community.llms.Minimax" + ], + [ + "langchain.llms.MlflowAIGateway", + "langchain_community.llms.MlflowAIGateway" + ], + [ + "langchain.llms.Modal", + "langchain_community.llms.Modal" + ], + [ + "langchain.llms.MosaicML", + "langchain_community.llms.MosaicML" + ], + [ + "langchain.llms.NIBittensorLLM", + "langchain_community.llms.NIBittensorLLM" + ], + [ + "langchain.llms.NLPCloud", + "langchain_community.llms.NLPCloud" + ], + [ + "langchain.llms.Nebula", + "langchain_community.llms.Nebula" + ], + [ + "langchain.llms.OctoAIEndpoint", + "langchain_community.llms.OctoAIEndpoint" + ], + [ + "langchain.llms.Ollama", + "langchain_community.llms.Ollama" + ], + [ + "langchain.llms.OpaquePrompts", + "langchain_community.llms.OpaquePrompts" + ], + [ + "langchain.llms.OpenAI", + "langchain_community.llms.OpenAI" + ], + [ + "langchain.llms.OpenAIChat", + "langchain_community.llms.OpenAIChat" + ], + [ + "langchain.llms.OpenLLM", + "langchain_community.llms.OpenLLM" + ], + [ + "langchain.llms.OpenLM", + "langchain_community.llms.OpenLM" + ], + [ + "langchain.llms.PaiEasEndpoint", + "langchain_community.llms.PaiEasEndpoint" + ], + [ + "langchain.llms.Petals", + "langchain_community.llms.Petals" + ], + [ + "langchain.llms.PipelineAI", + "langchain_community.llms.PipelineAI" + ], + [ + "langchain.llms.Predibase", + "langchain_community.llms.Predibase" + ], + [ + "langchain.llms.PredictionGuard", + "langchain_community.llms.PredictionGuard" + ], + [ + "langchain.llms.PromptLayerOpenAI", + "langchain_community.llms.PromptLayerOpenAI" + ], + [ + "langchain.llms.PromptLayerOpenAIChat", + "langchain_community.llms.PromptLayerOpenAIChat" + ], + [ + "langchain.llms.QianfanLLMEndpoint", + "langchain_community.llms.QianfanLLMEndpoint" + ], + [ + "langchain.llms.RWKV", + "langchain_community.llms.RWKV" + ], + [ + "langchain.llms.Replicate", + "langchain_community.llms.Replicate" + ], + [ + "langchain.llms.SagemakerEndpoint", + "langchain_community.llms.SagemakerEndpoint" + ], + [ + "langchain.llms.SelfHostedHuggingFaceLLM", + "langchain_community.llms.SelfHostedHuggingFaceLLM" + ], + [ + "langchain.llms.SelfHostedPipeline", + "langchain_community.llms.SelfHostedPipeline" + ], + [ + "langchain.llms.StochasticAI", + "langchain_community.llms.StochasticAI" + ], + [ + "langchain.llms.TextGen", + "langchain_community.llms.TextGen" + ], + [ + "langchain.llms.TitanTakeoff", + "langchain_community.llms.TitanTakeoff" + ], + [ + "langchain.llms.TitanTakeoffPro", + "langchain_community.llms.TitanTakeoffPro" + ], + [ + "langchain.llms.Tongyi", + "langchain_community.llms.Tongyi" + ], + [ + "langchain.llms.VLLM", + "langchain_community.llms.VLLM" + ], + [ + "langchain.llms.VLLMOpenAI", + "langchain_community.llms.VLLMOpenAI" + ], + [ + "langchain.llms.VertexAI", + "langchain_community.llms.VertexAI" + ], + [ + "langchain.llms.VertexAIModelGarden", + "langchain_community.llms.VertexAIModelGarden" + ], + [ + "langchain.llms.VolcEngineMaasLLM", + "langchain_community.llms.VolcEngineMaasLLM" + ], + [ + "langchain.llms.WatsonxLLM", + "langchain_community.llms.WatsonxLLM" + ], + [ + "langchain.llms.Writer", + "langchain_community.llms.Writer" + ], + [ + "langchain.llms.Xinference", + "langchain_community.llms.Xinference" + ], + [ + "langchain.llms.YandexGPT", + "langchain_community.llms.YandexGPT" + ], + [ + "langchain.llms.ai21.AI21", + "langchain_community.llms.ai21.AI21" + ], + [ + "langchain.llms.ai21.AI21PenaltyData", + "langchain_community.llms.ai21.AI21PenaltyData" + ], + [ + "langchain.llms.aleph_alpha.AlephAlpha", + "langchain_community.llms.aleph_alpha.AlephAlpha" + ], + [ + "langchain.llms.amazon_api_gateway.AmazonAPIGateway", + "langchain_community.llms.amazon_api_gateway.AmazonAPIGateway" + ], + [ + "langchain.llms.anthropic.Anthropic", + "langchain_community.llms.anthropic.Anthropic" + ], + [ + "langchain.llms.anyscale.Anyscale", + "langchain_community.llms.anyscale.Anyscale" + ], + [ + "langchain.llms.arcee.Arcee", + "langchain_community.llms.arcee.Arcee" + ], + [ + "langchain.llms.aviary.Aviary", + "langchain_community.llms.aviary.Aviary" + ], + [ + "langchain.llms.azureml_endpoint.AzureMLEndpointClient", + "langchain_community.llms.azureml_endpoint.AzureMLEndpointClient" + ], + [ + "langchain.llms.azureml_endpoint.AzureMLOnlineEndpoint", + "langchain_community.llms.azureml_endpoint.AzureMLOnlineEndpoint" + ], + [ + "langchain.llms.azureml_endpoint.ContentFormatterBase", + "langchain_community.llms.azureml_endpoint.ContentFormatterBase" + ], + [ + "langchain.llms.azureml_endpoint.CustomOpenAIContentFormatter", + "langchain_community.llms.azureml_endpoint.CustomOpenAIContentFormatter" + ], + [ + "langchain.llms.azureml_endpoint.DollyContentFormatter", + "langchain_community.llms.azureml_endpoint.DollyContentFormatter" + ], + [ + "langchain.llms.azureml_endpoint.GPT2ContentFormatter", + "langchain_community.llms.azureml_endpoint.GPT2ContentFormatter" + ], + [ + "langchain.llms.azureml_endpoint.HFContentFormatter", + "langchain_community.llms.azureml_endpoint.HFContentFormatter" + ], + [ + "langchain.llms.azureml_endpoint.OSSContentFormatter", + "langchain_community.llms.azureml_endpoint.OSSContentFormatter" + ], + [ + "langchain.llms.baidu_qianfan_endpoint.QianfanLLMEndpoint", + "langchain_community.llms.baidu_qianfan_endpoint.QianfanLLMEndpoint" + ], + [ + "langchain.llms.bananadev.Banana", + "langchain_community.llms.bananadev.Banana" + ], + [ + "langchain.llms.baseten.Baseten", + "langchain_community.llms.baseten.Baseten" + ], + [ + "langchain.llms.beam.Beam", + "langchain_community.llms.beam.Beam" + ], + [ + "langchain.llms.bedrock.Bedrock", + "langchain_community.llms.bedrock.Bedrock" + ], + [ + "langchain.llms.bedrock.BedrockBase", + "langchain_community.llms.bedrock.BedrockBase" + ], + [ + "langchain.llms.bittensor.NIBittensorLLM", + "langchain_community.llms.bittensor.NIBittensorLLM" + ], + [ + "langchain.llms.cerebriumai.CerebriumAI", + "langchain_community.llms.cerebriumai.CerebriumAI" + ], + [ + "langchain.llms.chatglm.ChatGLM", + "langchain_community.llms.chatglm.ChatGLM" + ], + [ + "langchain.llms.clarifai.Clarifai", + "langchain_community.llms.clarifai.Clarifai" + ], + [ + "langchain.llms.cloudflare_workersai.CloudflareWorkersAI", + "langchain_community.llms.cloudflare_workersai.CloudflareWorkersAI" + ], + [ + "langchain.llms.cohere.Cohere", + "langchain_community.llms.cohere.Cohere" + ], + [ + "langchain.llms.ctransformers.CTransformers", + "langchain_community.llms.ctransformers.CTransformers" + ], + [ + "langchain.llms.ctranslate2.CTranslate2", + "langchain_community.llms.ctranslate2.CTranslate2" + ], + [ + "langchain.llms.databricks.Databricks", + "langchain_community.llms.databricks.Databricks" + ], + [ + "langchain.llms.deepinfra.DeepInfra", + "langchain_community.llms.deepinfra.DeepInfra" + ], + [ + "langchain.llms.deepsparse.DeepSparse", + "langchain_community.llms.deepsparse.DeepSparse" + ], + [ + "langchain.llms.edenai.EdenAI", + "langchain_community.llms.edenai.EdenAI" + ], + [ + "langchain.llms.fake.FakeListLLM", + "langchain_community.llms.fake.FakeListLLM" + ], + [ + "langchain.llms.fake.FakeStreamingListLLM", + "langchain_community.llms.fake.FakeStreamingListLLM" + ], + [ + "langchain.llms.fireworks.Fireworks", + "langchain_community.llms.fireworks.Fireworks" + ], + [ + "langchain.llms.forefrontai.ForefrontAI", + "langchain_community.llms.forefrontai.ForefrontAI" + ], + [ + "langchain.llms.gigachat.GigaChat", + "langchain_community.llms.gigachat.GigaChat" + ], + [ + "langchain.llms.google_palm.GooglePalm", + "langchain_community.llms.google_palm.GooglePalm" + ], + [ + "langchain.llms.gooseai.GooseAI", + "langchain_community.llms.gooseai.GooseAI" + ], + [ + "langchain.llms.gpt4all.GPT4All", + "langchain_community.llms.gpt4all.GPT4All" + ], + [ + "langchain.llms.gradient_ai.GradientLLM", + "langchain_community.llms.gradient_ai.GradientLLM" + ], + [ + "langchain.llms.gradient_ai.TrainResult", + "langchain_community.llms.gradient_ai.TrainResult" + ], + [ + "langchain.llms.huggingface_endpoint.HuggingFaceEndpoint", + "langchain_community.llms.huggingface_endpoint.HuggingFaceEndpoint" + ], + [ + "langchain.llms.huggingface_hub.HuggingFaceHub", + "langchain_community.llms.huggingface_hub.HuggingFaceHub" + ], + [ + "langchain.llms.huggingface_pipeline.HuggingFacePipeline", + "langchain_community.llms.huggingface_pipeline.HuggingFacePipeline" + ], + [ + "langchain.llms.huggingface_text_gen_inference.HuggingFaceTextGenInference", + "langchain_community.llms.huggingface_text_gen_inference.HuggingFaceTextGenInference" + ], + [ + "langchain.llms.human.HumanInputLLM", + "langchain_community.llms.human.HumanInputLLM" + ], + [ + "langchain.llms.javelin_ai_gateway.JavelinAIGateway", + "langchain_community.llms.javelin_ai_gateway.JavelinAIGateway" + ], + [ + "langchain.llms.javelin_ai_gateway.Params", + "langchain_community.llms.javelin_ai_gateway.Params" + ], + [ + "langchain.llms.koboldai.KoboldApiLLM", + "langchain_community.llms.koboldai.KoboldApiLLM" + ], + [ + "langchain.llms.llamacpp.LlamaCpp", + "langchain_community.llms.llamacpp.LlamaCpp" + ], + [ + "langchain.llms.loading.load_llm", + "langchain_community.llms.loading.load_llm" + ], + [ + "langchain.llms.loading.load_llm_from_config", + "langchain_community.llms.loading.load_llm_from_config" + ], + [ + "langchain.llms.manifest.ManifestWrapper", + "langchain_community.llms.manifest.ManifestWrapper" + ], + [ + "langchain.llms.minimax.Minimax", + "langchain_community.llms.minimax.Minimax" + ], + [ + "langchain.llms.mlflow.Mlflow", + "langchain_community.llms.mlflow.Mlflow" + ], + [ + "langchain.llms.mlflow_ai_gateway.MlflowAIGateway", + "langchain_community.llms.mlflow_ai_gateway.MlflowAIGateway" + ], + [ + "langchain.llms.modal.Modal", + "langchain_community.llms.modal.Modal" + ], + [ + "langchain.llms.mosaicml.MosaicML", + "langchain_community.llms.mosaicml.MosaicML" + ], + [ + "langchain.llms.nlpcloud.NLPCloud", + "langchain_community.llms.nlpcloud.NLPCloud" + ], + [ + "langchain.llms.octoai_endpoint.OctoAIEndpoint", + "langchain_community.llms.octoai_endpoint.OctoAIEndpoint" + ], + [ + "langchain.llms.ollama.Ollama", + "langchain_community.llms.ollama.Ollama" + ], + [ + "langchain.llms.opaqueprompts.OpaquePrompts", + "langchain_community.llms.opaqueprompts.OpaquePrompts" + ], + [ + "langchain.llms.openai.AzureOpenAI", + "langchain_community.llms.openai.AzureOpenAI" + ], + [ + "langchain.llms.openai.BaseOpenAI", + "langchain_community.llms.openai.BaseOpenAI" + ], + [ + "langchain.llms.openai.OpenAI", + "langchain_community.llms.openai.OpenAI" + ], + [ + "langchain.llms.openai.OpenAIChat", + "langchain_community.llms.openai.OpenAIChat" + ], + [ + "langchain.llms.openllm.OpenLLM", + "langchain_community.llms.openllm.OpenLLM" + ], + [ + "langchain.llms.openlm.OpenLM", + "langchain_community.llms.openlm.OpenLM" + ], + [ + "langchain.llms.pai_eas_endpoint.PaiEasEndpoint", + "langchain_community.llms.pai_eas_endpoint.PaiEasEndpoint" + ], + [ + "langchain.llms.petals.Petals", + "langchain_community.llms.petals.Petals" + ], + [ + "langchain.llms.pipelineai.PipelineAI", + "langchain_community.llms.pipelineai.PipelineAI" + ], + [ + "langchain.llms.predibase.Predibase", + "langchain_community.llms.predibase.Predibase" + ], + [ + "langchain.llms.predictionguard.PredictionGuard", + "langchain_community.llms.predictionguard.PredictionGuard" + ], + [ + "langchain.llms.promptlayer_openai.PromptLayerOpenAI", + "langchain_community.llms.promptlayer_openai.PromptLayerOpenAI" + ], + [ + "langchain.llms.promptlayer_openai.PromptLayerOpenAIChat", + "langchain_community.llms.promptlayer_openai.PromptLayerOpenAIChat" + ], + [ + "langchain.llms.replicate.Replicate", + "langchain_community.llms.replicate.Replicate" + ], + [ + "langchain.llms.rwkv.RWKV", + "langchain_community.llms.rwkv.RWKV" + ], + [ + "langchain.llms.sagemaker_endpoint.LLMContentHandler", + "langchain_community.llms.sagemaker_endpoint.LLMContentHandler" + ], + [ + "langchain.llms.sagemaker_endpoint.SagemakerEndpoint", + "langchain_community.llms.sagemaker_endpoint.SagemakerEndpoint" + ], + [ + "langchain.llms.self_hosted.SelfHostedPipeline", + "langchain_community.llms.self_hosted.SelfHostedPipeline" + ], + [ + "langchain.llms.self_hosted_hugging_face.SelfHostedHuggingFaceLLM", + "langchain_community.llms.self_hosted_hugging_face.SelfHostedHuggingFaceLLM" + ], + [ + "langchain.llms.stochasticai.StochasticAI", + "langchain_community.llms.stochasticai.StochasticAI" + ], + [ + "langchain.llms.symblai_nebula.Nebula", + "langchain_community.llms.symblai_nebula.Nebula" + ], + [ + "langchain.llms.textgen.TextGen", + "langchain_community.llms.textgen.TextGen" + ], + [ + "langchain.llms.titan_takeoff.TitanTakeoff", + "langchain_community.llms.titan_takeoff.TitanTakeoff" + ], + [ + "langchain.llms.titan_takeoff_pro.TitanTakeoffPro", + "langchain_community.llms.titan_takeoff.TitanTakeoff" + ], + [ + "langchain.llms.together.Together", + "langchain_community.llms.together.Together" + ], + [ + "langchain.llms.tongyi.Tongyi", + "langchain_community.llms.tongyi.Tongyi" + ], + [ + "langchain.llms.utils.enforce_stop_tokens", + "langchain_community.llms.utils.enforce_stop_tokens" + ], + [ + "langchain.llms.vertexai.VertexAI", + "langchain_community.llms.vertexai.VertexAI" + ], + [ + "langchain.llms.vertexai.VertexAIModelGarden", + "langchain_community.llms.vertexai.VertexAIModelGarden" + ], + [ + "langchain.llms.vllm.VLLM", + "langchain_community.llms.vllm.VLLM" + ], + [ + "langchain.llms.vllm.VLLMOpenAI", + "langchain_community.llms.vllm.VLLMOpenAI" + ], + [ + "langchain.llms.volcengine_maas.VolcEngineMaasBase", + "langchain_community.llms.volcengine_maas.VolcEngineMaasBase" + ], + [ + "langchain.llms.volcengine_maas.VolcEngineMaasLLM", + "langchain_community.llms.volcengine_maas.VolcEngineMaasLLM" + ], + [ + "langchain.llms.watsonxllm.WatsonxLLM", + "langchain_community.llms.watsonxllm.WatsonxLLM" + ], + [ + "langchain.llms.writer.Writer", + "langchain_community.llms.writer.Writer" + ], + [ + "langchain.llms.xinference.Xinference", + "langchain_community.llms.xinference.Xinference" + ], + [ + "langchain.llms.yandex.YandexGPT", + "langchain_community.llms.yandex.YandexGPT" + ], + [ + "langchain.memory.AstraDBChatMessageHistory", + "langchain_community.chat_message_histories.AstraDBChatMessageHistory" + ], + [ + "langchain.memory.CassandraChatMessageHistory", + "langchain_community.chat_message_histories.CassandraChatMessageHistory" + ], + [ + "langchain.memory.ChatMessageHistory", + "langchain_community.chat_message_histories.ChatMessageHistory" + ], + [ + "langchain.memory.CosmosDBChatMessageHistory", + "langchain_community.chat_message_histories.CosmosDBChatMessageHistory" + ], + [ + "langchain.memory.DynamoDBChatMessageHistory", + "langchain_community.chat_message_histories.DynamoDBChatMessageHistory" + ], + [ + "langchain.memory.ElasticsearchChatMessageHistory", + "langchain_community.chat_message_histories.ElasticsearchChatMessageHistory" + ], + [ + "langchain.memory.FileChatMessageHistory", + "langchain_community.chat_message_histories.FileChatMessageHistory" + ], + [ + "langchain.memory.MomentoChatMessageHistory", + "langchain_community.chat_message_histories.MomentoChatMessageHistory" + ], + [ + "langchain.memory.MongoDBChatMessageHistory", + "langchain_community.chat_message_histories.MongoDBChatMessageHistory" + ], + [ + "langchain.memory.PostgresChatMessageHistory", + "langchain_community.chat_message_histories.PostgresChatMessageHistory" + ], + [ + "langchain.memory.RedisChatMessageHistory", + "langchain_community.chat_message_histories.RedisChatMessageHistory" + ], + [ + "langchain.memory.SQLChatMessageHistory", + "langchain_community.chat_message_histories.SQLChatMessageHistory" + ], + [ + "langchain.memory.SingleStoreDBChatMessageHistory", + "langchain_community.chat_message_histories.SingleStoreDBChatMessageHistory" + ], + [ + "langchain.memory.StreamlitChatMessageHistory", + "langchain_community.chat_message_histories.StreamlitChatMessageHistory" + ], + [ + "langchain.memory.UpstashRedisChatMessageHistory", + "langchain_community.chat_message_histories.UpstashRedisChatMessageHistory" + ], + [ + "langchain.memory.XataChatMessageHistory", + "langchain_community.chat_message_histories.XataChatMessageHistory" + ], + [ + "langchain.memory.ZepChatMessageHistory", + "langchain_community.chat_message_histories.ZepChatMessageHistory" + ], + [ + "langchain.memory.entity.get_client", + "langchain_community.utilities.redis.get_client" + ], + [ + "langchain.memory.kg.KnowledgeTriple", + "langchain_community.graphs.networkx_graph.KnowledgeTriple" + ], + [ + "langchain.memory.kg.NetworkxEntityGraph", + "langchain_community.graphs.NetworkxEntityGraph" + ], + [ + "langchain.memory.kg.get_entities", + "langchain_community.graphs.networkx_graph.get_entities" + ], + [ + "langchain.memory.kg.parse_triples", + "langchain_community.graphs.networkx_graph.parse_triples" + ], + [ + "langchain.memory.zep_memory.ZepChatMessageHistory", + "langchain_community.chat_message_histories.ZepChatMessageHistory" + ], + [ + "langchain.output_parsers.ernie_functions.JsonKeyOutputFunctionsParser", + "langchain_community.output_parsers.ernie_functions.JsonKeyOutputFunctionsParser" + ], + [ + "langchain.output_parsers.ernie_functions.JsonOutputFunctionsParser", + "langchain_community.output_parsers.ernie_functions.JsonOutputFunctionsParser" + ], + [ + "langchain.output_parsers.ernie_functions.OutputFunctionsParser", + "langchain_community.output_parsers.ernie_functions.OutputFunctionsParser" + ], + [ + "langchain.output_parsers.ernie_functions.PydanticAttrOutputFunctionsParser", + "langchain_community.output_parsers.ernie_functions.PydanticAttrOutputFunctionsParser" + ], + [ + "langchain.output_parsers.ernie_functions.PydanticOutputFunctionsParser", + "langchain_community.output_parsers.ernie_functions.PydanticOutputFunctionsParser" + ], + [ + "langchain.output_parsers.rail_parser.GuardrailsOutputParser", + "langchain_community.output_parsers.rail_parser.GuardrailsOutputParser" + ], + [ + "langchain.prompts.NGramOverlapExampleSelector", + "langchain_community.example_selectors.ngram_overlap.NGramOverlapExampleSelector" + ], + [ + "langchain.retrievers.arcee.ArceeRetriever", + "langchain_community.retrievers.arcee.ArceeRetriever" + ], + [ + "langchain.retrievers.arxiv.ArxivRetriever", + "langchain_community.retrievers.arxiv.ArxivRetriever" + ], + [ + "langchain.retrievers.azure_ai_search.AzureAISearchRetriever", + "langchain_community.retrievers.azure_ai_search.AzureAISearchRetriever" + ], + [ + "langchain.retrievers.azure_ai_search.AzureCognitiveSearchRetriever", + "langchain_community.retrievers.azure_ai_search.AzureCognitiveSearchRetriever" + ], + [ + "langchain.retrievers.bedrock.AmazonKnowledgeBasesRetriever", + "langchain_community.retrievers.bedrock.AmazonKnowledgeBasesRetriever" + ], + [ + "langchain.retrievers.bedrock.RetrievalConfig", + "langchain_community.retrievers.bedrock.RetrievalConfig" + ], + [ + "langchain.retrievers.bedrock.VectorSearchConfig", + "langchain_community.retrievers.bedrock.VectorSearchConfig" + ], + [ + "langchain.retrievers.bm25.BM25Retriever", + "langchain_community.retrievers.bm25.BM25Retriever" + ], + [ + "langchain.retrievers.bm25.default_preprocessing_func", + "langchain_community.retrievers.bm25.default_preprocessing_func" + ], + [ + "langchain.retrievers.chaindesk.ChaindeskRetriever", + "langchain_community.retrievers.chaindesk.ChaindeskRetriever" + ], + [ + "langchain.retrievers.chatgpt_plugin_retriever.ChatGPTPluginRetriever", + "langchain_community.retrievers.chatgpt_plugin_retriever.ChatGPTPluginRetriever" + ], + [ + "langchain.retrievers.cohere_rag_retriever.CohereRagRetriever", + "langchain_community.retrievers.cohere_rag_retriever.CohereRagRetriever" + ], + [ + "langchain.retrievers.databerry.DataberryRetriever", + "langchain_community.retrievers.databerry.DataberryRetriever" + ], + [ + "langchain.retrievers.docarray.DocArrayRetriever", + "langchain_community.retrievers.docarray.DocArrayRetriever" + ], + [ + "langchain.retrievers.docarray.SearchType", + "langchain_community.retrievers.docarray.SearchType" + ], + [ + "langchain.retrievers.elastic_search_bm25.ElasticSearchBM25Retriever", + "langchain_community.retrievers.elastic_search_bm25.ElasticSearchBM25Retriever" + ], + [ + "langchain.retrievers.embedchain.EmbedchainRetriever", + "langchain_community.retrievers.embedchain.EmbedchainRetriever" + ], + [ + "langchain.retrievers.google_cloud_documentai_warehouse.GoogleDocumentAIWarehouseRetriever", + "langchain_community.retrievers.google_cloud_documentai_warehouse.GoogleDocumentAIWarehouseRetriever" + ], + [ + "langchain.retrievers.google_vertex_ai_search.GoogleCloudEnterpriseSearchRetriever", + "langchain_community.retrievers.google_vertex_ai_search.GoogleCloudEnterpriseSearchRetriever" + ], + [ + "langchain.retrievers.google_vertex_ai_search.GoogleVertexAIMultiTurnSearchRetriever", + "langchain_community.retrievers.google_vertex_ai_search.GoogleVertexAIMultiTurnSearchRetriever" + ], + [ + "langchain.retrievers.google_vertex_ai_search.GoogleVertexAISearchRetriever", + "langchain_community.retrievers.google_vertex_ai_search.GoogleVertexAISearchRetriever" + ], + [ + "langchain.retrievers.kay.KayAiRetriever", + "langchain_community.retrievers.kay.KayAiRetriever" + ], + [ + "langchain.retrievers.kendra.AdditionalResultAttribute", + "langchain_community.retrievers.kendra.AdditionalResultAttribute" + ], + [ + "langchain.retrievers.kendra.AdditionalResultAttributeValue", + "langchain_community.retrievers.kendra.AdditionalResultAttributeValue" + ], + [ + "langchain.retrievers.kendra.AmazonKendraRetriever", + "langchain_community.retrievers.kendra.AmazonKendraRetriever" + ], + [ + "langchain.retrievers.kendra.DocumentAttribute", + "langchain_community.retrievers.kendra.DocumentAttribute" + ], + [ + "langchain.retrievers.kendra.DocumentAttributeValue", + "langchain_community.retrievers.kendra.DocumentAttributeValue" + ], + [ + "langchain.retrievers.kendra.DocumentAttributeValueType", + "langchain_community.retrievers.kendra.DocumentAttributeValueType" + ], + [ + "langchain.retrievers.kendra.Highlight", + "langchain_community.retrievers.kendra.Highlight" + ], + [ + "langchain.retrievers.kendra.QueryResult", + "langchain_community.retrievers.kendra.QueryResult" + ], + [ + "langchain.retrievers.kendra.QueryResultItem", + "langchain_community.retrievers.kendra.QueryResultItem" + ], + [ + "langchain.retrievers.kendra.ResultItem", + "langchain_community.retrievers.kendra.ResultItem" + ], + [ + "langchain.retrievers.kendra.RetrieveResult", + "langchain_community.retrievers.kendra.RetrieveResult" + ], + [ + "langchain.retrievers.kendra.RetrieveResultItem", + "langchain_community.retrievers.kendra.RetrieveResultItem" + ], + [ + "langchain.retrievers.kendra.TextWithHighLights", + "langchain_community.retrievers.kendra.TextWithHighLights" + ], + [ + "langchain.retrievers.kendra.clean_excerpt", + "langchain_community.retrievers.kendra.clean_excerpt" + ], + [ + "langchain.retrievers.kendra.combined_text", + "langchain_community.retrievers.kendra.combined_text" + ], + [ + "langchain.retrievers.knn.KNNRetriever", + "langchain_community.retrievers.knn.KNNRetriever" + ], + [ + "langchain.retrievers.llama_index.LlamaIndexGraphRetriever", + "langchain_community.retrievers.llama_index.LlamaIndexGraphRetriever" + ], + [ + "langchain.retrievers.llama_index.LlamaIndexRetriever", + "langchain_community.retrievers.llama_index.LlamaIndexRetriever" + ], + [ + "langchain.retrievers.metal.MetalRetriever", + "langchain_community.retrievers.metal.MetalRetriever" + ], + [ + "langchain.retrievers.milvus.MilvusRetreiver", + "langchain_community.retrievers.milvus.MilvusRetreiver" + ], + [ + "langchain.retrievers.milvus.MilvusRetriever", + "langchain_community.retrievers.milvus.MilvusRetriever" + ], + [ + "langchain.retrievers.outline.OutlineRetriever", + "langchain_community.retrievers.outline.OutlineRetriever" + ], + [ + "langchain.retrievers.pinecone_hybrid_search.PineconeHybridSearchRetriever", + "langchain_community.retrievers.pinecone_hybrid_search.PineconeHybridSearchRetriever" + ], + [ + "langchain.retrievers.pubmed.PubMedRetriever", + "langchain_community.retrievers.pubmed.PubMedRetriever" + ], + [ + "langchain.retrievers.remote_retriever.RemoteLangChainRetriever", + "langchain_community.retrievers.remote_retriever.RemoteLangChainRetriever" + ], + [ + "langchain.retrievers.svm.SVMRetriever", + "langchain_community.retrievers.svm.SVMRetriever" + ], + [ + "langchain.retrievers.tavily_search_api.SearchDepth", + "langchain_community.retrievers.tavily_search_api.SearchDepth" + ], + [ + "langchain.retrievers.tavily_search_api.TavilySearchAPIRetriever", + "langchain_community.retrievers.tavily_search_api.TavilySearchAPIRetriever" + ], + [ + "langchain.retrievers.tfidf.TFIDFRetriever", + "langchain_community.retrievers.tfidf.TFIDFRetriever" + ], + [ + "langchain.retrievers.vespa_retriever.VespaRetriever", + "langchain_community.retrievers.vespa_retriever.VespaRetriever" + ], + [ + "langchain.retrievers.weaviate_hybrid_search.WeaviateHybridSearchRetriever", + "langchain_community.retrievers.weaviate_hybrid_search.WeaviateHybridSearchRetriever" + ], + [ + "langchain.retrievers.web_research.AsyncHtmlLoader", + "langchain_community.document_loaders.AsyncHtmlLoader" + ], + [ + "langchain.retrievers.web_research.GoogleSearchAPIWrapper", + "langchain_community.utilities.GoogleSearchAPIWrapper" + ], + [ + "langchain.retrievers.web_research.Html2TextTransformer", + "langchain_community.document_transformers.Html2TextTransformer" + ], + [ + "langchain.retrievers.web_research.LlamaCpp", + "langchain_community.llms.LlamaCpp" + ], + [ + "langchain.retrievers.wikipedia.WikipediaRetriever", + "langchain_community.retrievers.wikipedia.WikipediaRetriever" + ], + [ + "langchain.retrievers.you.YouRetriever", + "langchain_community.retrievers.you.YouRetriever" + ], + [ + "langchain.retrievers.zep.SearchScope", + "langchain_community.retrievers.zep.SearchScope" + ], + [ + "langchain.retrievers.zep.SearchType", + "langchain_community.retrievers.zep.SearchType" + ], + [ + "langchain.retrievers.zep.ZepRetriever", + "langchain_community.retrievers.zep.ZepRetriever" + ], + [ + "langchain.retrievers.zilliz.ZillizRetreiver", + "langchain_community.retrievers.zilliz.ZillizRetreiver" + ], + [ + "langchain.retrievers.zilliz.ZillizRetriever", + "langchain_community.retrievers.zilliz.ZillizRetriever" + ], + [ + "langchain.storage.RedisStore", + "langchain_community.storage.RedisStore" + ], + [ + "langchain.storage.UpstashRedisByteStore", + "langchain_community.storage.UpstashRedisByteStore" + ], + [ + "langchain.storage.UpstashRedisStore", + "langchain_community.storage.UpstashRedisStore" + ], + [ + "langchain.storage.exceptions.InvalidKeyException", + "langchain_community.storage.exceptions.InvalidKeyException" + ], + [ + "langchain.storage.redis.RedisStore", + "langchain_community.storage.redis.RedisStore" + ], + [ + "langchain.storage.upstash_redis.UpstashRedisByteStore", + "langchain_community.storage.upstash_redis.UpstashRedisByteStore" + ], + [ + "langchain.storage.upstash_redis.UpstashRedisStore", + "langchain_community.storage.upstash_redis.UpstashRedisStore" + ], + [ + "langchain.tools.ifttt.IFTTTWebhook", + "langchain_community.tools.ifttt.IFTTTWebhook" + ], + [ + "langchain.tools.plugin.AIPlugin", + "langchain_community.tools.plugin.AIPlugin" + ], + [ + "langchain.tools.plugin.AIPluginTool", + "langchain_community.tools.plugin.AIPluginTool" + ], + [ + "langchain.tools.plugin.AIPluginToolSchema", + "langchain_community.tools.plugin.AIPluginToolSchema" + ], + [ + "langchain.tools.plugin.ApiConfig", + "langchain_community.tools.plugin.ApiConfig" + ], + [ + "langchain.tools.yahoo_finance_news.YahooFinanceNewsTool", + "langchain_community.tools.yahoo_finance_news.YahooFinanceNewsTool" + ], + [ + "langchain.utilities.AlphaVantageAPIWrapper", + "langchain_community.utilities.AlphaVantageAPIWrapper" + ], + [ + "langchain.utilities.ApifyWrapper", + "langchain_community.utilities.ApifyWrapper" + ], + [ + "langchain.utilities.ArceeWrapper", + "langchain_community.utilities.ArceeWrapper" + ], + [ + "langchain.utilities.ArxivAPIWrapper", + "langchain_community.utilities.ArxivAPIWrapper" + ], + [ + "langchain.utilities.BibtexparserWrapper", + "langchain_community.utilities.BibtexparserWrapper" + ], + [ + "langchain.utilities.BingSearchAPIWrapper", + "langchain_community.utilities.BingSearchAPIWrapper" + ], + [ + "langchain.utilities.BraveSearchWrapper", + "langchain_community.utilities.BraveSearchWrapper" + ], + [ + "langchain.utilities.DuckDuckGoSearchAPIWrapper", + "langchain_community.utilities.DuckDuckGoSearchAPIWrapper" + ], + [ + "langchain.utilities.GoldenQueryAPIWrapper", + "langchain_community.utilities.GoldenQueryAPIWrapper" + ], + [ + "langchain.utilities.GoogleFinanceAPIWrapper", + "langchain_community.utilities.GoogleFinanceAPIWrapper" + ], + [ + "langchain.utilities.GoogleJobsAPIWrapper", + "langchain_community.utilities.GoogleJobsAPIWrapper" + ], + [ + "langchain.utilities.GoogleLensAPIWrapper", + "langchain_community.utilities.GoogleLensAPIWrapper" + ], + [ + "langchain.utilities.GooglePlacesAPIWrapper", + "langchain_community.utilities.GooglePlacesAPIWrapper" + ], + [ + "langchain.utilities.GoogleScholarAPIWrapper", + "langchain_community.utilities.GoogleScholarAPIWrapper" + ], + [ + "langchain.utilities.GoogleSearchAPIWrapper", + "langchain_community.utilities.GoogleSearchAPIWrapper" + ], + [ + "langchain.utilities.GoogleSerperAPIWrapper", + "langchain_community.utilities.GoogleSerperAPIWrapper" + ], + [ + "langchain.utilities.GoogleTrendsAPIWrapper", + "langchain_community.utilities.GoogleTrendsAPIWrapper" + ], + [ + "langchain.utilities.GraphQLAPIWrapper", + "langchain_community.utilities.GraphQLAPIWrapper" + ], + [ + "langchain.utilities.JiraAPIWrapper", + "langchain_community.utilities.JiraAPIWrapper" + ], + [ + "langchain.utilities.LambdaWrapper", + "langchain_community.utilities.LambdaWrapper" + ], + [ + "langchain.utilities.MaxComputeAPIWrapper", + "langchain_community.utilities.MaxComputeAPIWrapper" + ], + [ + "langchain.utilities.MerriamWebsterAPIWrapper", + "langchain_community.utilities.MerriamWebsterAPIWrapper" + ], + [ + "langchain.utilities.MetaphorSearchAPIWrapper", + "langchain_community.utilities.MetaphorSearchAPIWrapper" + ], + [ + "langchain.utilities.NasaAPIWrapper", + "langchain_community.utilities.NasaAPIWrapper" + ], + [ + "langchain.utilities.OpenWeatherMapAPIWrapper", + "langchain_community.utilities.OpenWeatherMapAPIWrapper" + ], + [ + "langchain.utilities.OutlineAPIWrapper", + "langchain_community.utilities.OutlineAPIWrapper" + ], + [ + "langchain.utilities.Portkey", + "langchain_community.utilities.Portkey" + ], + [ + "langchain.utilities.PowerBIDataset", + "langchain_community.utilities.PowerBIDataset" + ], + [ + "langchain.utilities.PubMedAPIWrapper", + "langchain_community.utilities.PubMedAPIWrapper" + ], + [ + "langchain.utilities.PythonREPL", + "langchain_community.utilities.PythonREPL" + ], + [ + "langchain.utilities.Requests", + "langchain_community.utilities.requests.Requests" + ], + [ + "langchain.utilities.RequestsWrapper", + "langchain_community.utilities.requests.RequestsWrapper" + ], + [ + "langchain.utilities.SQLDatabase", + "langchain_community.utilities.SQLDatabase" + ], + [ + "langchain.utilities.SceneXplainAPIWrapper", + "langchain_community.utilities.SceneXplainAPIWrapper" + ], + [ + "langchain.utilities.SearchApiAPIWrapper", + "langchain_community.utilities.SearchApiAPIWrapper" + ], + [ + "langchain.utilities.SearxSearchWrapper", + "langchain_community.utilities.SearxSearchWrapper" + ], + [ + "langchain.utilities.SerpAPIWrapper", + "langchain_community.utilities.SerpAPIWrapper" + ], + [ + "langchain.utilities.SparkSQL", + "langchain_community.utilities.SparkSQL" + ], + [ + "langchain.utilities.StackExchangeAPIWrapper", + "langchain_community.utilities.StackExchangeAPIWrapper" + ], + [ + "langchain.utilities.SteamWebAPIWrapper", + "langchain_community.utilities.SteamWebAPIWrapper" + ], + [ + "langchain.utilities.TensorflowDatasets", + "langchain_community.utilities.TensorflowDatasets" + ], + [ + "langchain.utilities.TextRequestsWrapper", + "langchain_community.utilities.requests.TextRequestsWrapper" + ], + [ + "langchain.utilities.TwilioAPIWrapper", + "langchain_community.utilities.TwilioAPIWrapper" + ], + [ + "langchain.utilities.WikipediaAPIWrapper", + "langchain_community.utilities.WikipediaAPIWrapper" + ], + [ + "langchain.utilities.WolframAlphaAPIWrapper", + "langchain_community.utilities.WolframAlphaAPIWrapper" + ], + [ + "langchain.utilities.ZapierNLAWrapper", + "langchain_community.utilities.ZapierNLAWrapper" + ], + [ + "langchain.utilities.alpha_vantage.AlphaVantageAPIWrapper", + "langchain_community.utilities.alpha_vantage.AlphaVantageAPIWrapper" + ], + [ + "langchain.utilities.anthropic.get_num_tokens_anthropic", + "langchain_community.utilities.anthropic.get_num_tokens_anthropic" + ], + [ + "langchain.utilities.anthropic.get_token_ids_anthropic", + "langchain_community.utilities.anthropic.get_token_ids_anthropic" + ], + [ + "langchain.utilities.apify.ApifyWrapper", + "langchain_community.utilities.apify.ApifyWrapper" + ], + [ + "langchain.utilities.arcee.ArceeDocument", + "langchain_community.utilities.arcee.ArceeDocument" + ], + [ + "langchain.utilities.arcee.ArceeDocumentAdapter", + "langchain_community.utilities.arcee.ArceeDocumentAdapter" + ], + [ + "langchain.utilities.arcee.ArceeDocumentSource", + "langchain_community.utilities.arcee.ArceeDocumentSource" + ], + [ + "langchain.utilities.arcee.ArceeRoute", + "langchain_community.utilities.arcee.ArceeRoute" + ], + [ + "langchain.utilities.arcee.ArceeWrapper", + "langchain_community.utilities.arcee.ArceeWrapper" + ], + [ + "langchain.utilities.arcee.DALMFilter", + "langchain_community.utilities.arcee.DALMFilter" + ], + [ + "langchain.utilities.arcee.DALMFilterType", + "langchain_community.utilities.arcee.DALMFilterType" + ], + [ + "langchain.utilities.arxiv.ArxivAPIWrapper", + "langchain_community.utilities.arxiv.ArxivAPIWrapper" + ], + [ + "langchain.utilities.awslambda.LambdaWrapper", + "langchain_community.utilities.awslambda.LambdaWrapper" + ], + [ + "langchain.utilities.bibtex.BibtexparserWrapper", + "langchain_community.utilities.bibtex.BibtexparserWrapper" + ], + [ + "langchain.utilities.bing_search.BingSearchAPIWrapper", + "langchain_community.utilities.bing_search.BingSearchAPIWrapper" + ], + [ + "langchain.utilities.brave_search.BraveSearchWrapper", + "langchain_community.utilities.brave_search.BraveSearchWrapper" + ], + [ + "langchain.utilities.clickup.CUList", + "langchain_community.utilities.clickup.CUList" + ], + [ + "langchain.utilities.clickup.ClickupAPIWrapper", + "langchain_community.utilities.clickup.ClickupAPIWrapper" + ], + [ + "langchain.utilities.clickup.Component", + "langchain_community.utilities.clickup.Component" + ], + [ + "langchain.utilities.clickup.Member", + "langchain_community.utilities.clickup.Member" + ], + [ + "langchain.utilities.clickup.Space", + "langchain_community.utilities.clickup.Space" + ], + [ + "langchain.utilities.clickup.Task", + "langchain_community.utilities.clickup.Task" + ], + [ + "langchain.utilities.clickup.Team", + "langchain_community.utilities.clickup.Team" + ], + [ + "langchain.utilities.dalle_image_generator.DallEAPIWrapper", + "langchain_community.utilities.dalle_image_generator.DallEAPIWrapper" + ], + [ + "langchain.utilities.dataforseo_api_search.DataForSeoAPIWrapper", + "langchain_community.utilities.dataforseo_api_search.DataForSeoAPIWrapper" + ], + [ + "langchain.utilities.duckduckgo_search.DuckDuckGoSearchAPIWrapper", + "langchain_community.utilities.duckduckgo_search.DuckDuckGoSearchAPIWrapper" + ], + [ + "langchain.utilities.github.GitHubAPIWrapper", + "langchain_community.utilities.github.GitHubAPIWrapper" + ], + [ + "langchain.utilities.gitlab.GitLabAPIWrapper", + "langchain_community.utilities.gitlab.GitLabAPIWrapper" + ], + [ + "langchain.utilities.golden_query.GoldenQueryAPIWrapper", + "langchain_community.utilities.golden_query.GoldenQueryAPIWrapper" + ], + [ + "langchain.utilities.google_finance.GoogleFinanceAPIWrapper", + "langchain_community.utilities.google_finance.GoogleFinanceAPIWrapper" + ], + [ + "langchain.utilities.google_jobs.GoogleJobsAPIWrapper", + "langchain_community.utilities.google_jobs.GoogleJobsAPIWrapper" + ], + [ + "langchain.utilities.google_lens.GoogleLensAPIWrapper", + "langchain_community.utilities.google_lens.GoogleLensAPIWrapper" + ], + [ + "langchain.utilities.google_places_api.GooglePlacesAPIWrapper", + "langchain_community.utilities.google_places_api.GooglePlacesAPIWrapper" + ], + [ + "langchain.utilities.google_scholar.GoogleScholarAPIWrapper", + "langchain_community.utilities.google_scholar.GoogleScholarAPIWrapper" + ], + [ + "langchain.utilities.google_search.GoogleSearchAPIWrapper", + "langchain_community.utilities.google_search.GoogleSearchAPIWrapper" + ], + [ + "langchain.utilities.google_serper.GoogleSerperAPIWrapper", + "langchain_community.utilities.google_serper.GoogleSerperAPIWrapper" + ], + [ + "langchain.utilities.google_trends.GoogleTrendsAPIWrapper", + "langchain_community.utilities.google_trends.GoogleTrendsAPIWrapper" + ], + [ + "langchain.utilities.graphql.GraphQLAPIWrapper", + "langchain_community.utilities.graphql.GraphQLAPIWrapper" + ], + [ + "langchain.utilities.jira.JiraAPIWrapper", + "langchain_community.utilities.jira.JiraAPIWrapper" + ], + [ + "langchain.utilities.max_compute.MaxComputeAPIWrapper", + "langchain_community.utilities.max_compute.MaxComputeAPIWrapper" + ], + [ + "langchain.utilities.merriam_webster.MerriamWebsterAPIWrapper", + "langchain_community.utilities.merriam_webster.MerriamWebsterAPIWrapper" + ], + [ + "langchain.utilities.metaphor_search.MetaphorSearchAPIWrapper", + "langchain_community.utilities.metaphor_search.MetaphorSearchAPIWrapper" + ], + [ + "langchain.utilities.nasa.NasaAPIWrapper", + "langchain_community.utilities.nasa.NasaAPIWrapper" + ], + [ + "langchain.utilities.opaqueprompts.desanitize", + "langchain_community.utilities.opaqueprompts.desanitize" + ], + [ + "langchain.utilities.opaqueprompts.sanitize", + "langchain_community.utilities.opaqueprompts.sanitize" + ], + [ + "langchain.utilities.openapi.HTTPVerb", + "langchain_community.utilities.openapi.HTTPVerb" + ], + [ + "langchain.utilities.openapi.OpenAPISpec", + "langchain_community.utilities.openapi.OpenAPISpec" + ], + [ + "langchain.utilities.openweathermap.OpenWeatherMapAPIWrapper", + "langchain_community.utilities.openweathermap.OpenWeatherMapAPIWrapper" + ], + [ + "langchain.utilities.outline.OutlineAPIWrapper", + "langchain_community.utilities.outline.OutlineAPIWrapper" + ], + [ + "langchain.utilities.portkey.Portkey", + "langchain_community.utilities.portkey.Portkey" + ], + [ + "langchain.utilities.powerbi.PowerBIDataset", + "langchain_community.utilities.powerbi.PowerBIDataset" + ], + [ + "langchain.utilities.pubmed.PubMedAPIWrapper", + "langchain_community.utilities.pubmed.PubMedAPIWrapper" + ], + [ + "langchain.utilities.python.PythonREPL", + "langchain_community.utilities.python.PythonREPL" + ], + [ + "langchain.utilities.reddit_search.RedditSearchAPIWrapper", + "langchain_community.utilities.reddit_search.RedditSearchAPIWrapper" + ], + [ + "langchain.utilities.redis.TokenEscaper", + "langchain_community.utilities.redis.TokenEscaper" + ], + [ + "langchain.utilities.redis.check_redis_module_exist", + "langchain_community.utilities.redis.check_redis_module_exist" + ], + [ + "langchain.utilities.redis.get_client", + "langchain_community.utilities.redis.get_client" + ], + [ + "langchain.utilities.requests.Requests", + "langchain_community.utilities.requests.Requests" + ], + [ + "langchain.utilities.requests.RequestsWrapper", + "langchain_community.utilities.requests.RequestsWrapper" + ], + [ + "langchain.utilities.requests.TextRequestsWrapper", + "langchain_community.utilities.requests.TextRequestsWrapper" + ], + [ + "langchain.utilities.scenexplain.SceneXplainAPIWrapper", + "langchain_community.utilities.scenexplain.SceneXplainAPIWrapper" + ], + [ + "langchain.utilities.searchapi.SearchApiAPIWrapper", + "langchain_community.utilities.searchapi.SearchApiAPIWrapper" + ], + [ + "langchain.utilities.searx_search.SearxResults", + "langchain_community.utilities.searx_search.SearxResults" + ], + [ + "langchain.utilities.searx_search.SearxSearchWrapper", + "langchain_community.utilities.searx_search.SearxSearchWrapper" + ], + [ + "langchain.utilities.serpapi.HiddenPrints", + "langchain_community.utilities.serpapi.HiddenPrints" + ], + [ + "langchain.utilities.serpapi.SerpAPIWrapper", + "langchain_community.utilities.serpapi.SerpAPIWrapper" + ], + [ + "langchain.utilities.spark_sql.SparkSQL", + "langchain_community.utilities.spark_sql.SparkSQL" + ], + [ + "langchain.utilities.sql_database.SQLDatabase", + "langchain_community.utilities.sql_database.SQLDatabase" + ], + [ + "langchain.utilities.sql_database.truncate_word", + "langchain_community.utilities.sql_database.truncate_word" + ], + [ + "langchain.utilities.stackexchange.StackExchangeAPIWrapper", + "langchain_community.utilities.stackexchange.StackExchangeAPIWrapper" + ], + [ + "langchain.utilities.steam.SteamWebAPIWrapper", + "langchain_community.utilities.steam.SteamWebAPIWrapper" + ], + [ + "langchain.utilities.tavily_search.TavilySearchAPIWrapper", + "langchain_community.utilities.tavily_search.TavilySearchAPIWrapper" + ], + [ + "langchain.utilities.tensorflow_datasets.TensorflowDatasets", + "langchain_community.utilities.tensorflow_datasets.TensorflowDatasets" + ], + [ + "langchain.utilities.twilio.TwilioAPIWrapper", + "langchain_community.utilities.twilio.TwilioAPIWrapper" + ], + [ + "langchain.utilities.vertexai.create_retry_decorator", + "langchain_community.utilities.vertexai.create_retry_decorator" + ], + [ + "langchain.utilities.vertexai.get_client_info", + "langchain_community.utilities.vertexai.get_client_info" + ], + [ + "langchain.utilities.vertexai.init_vertexai", + "langchain_community.utilities.vertexai.init_vertexai" + ], + [ + "langchain.utilities.vertexai.raise_vertex_import_error", + "langchain_community.utilities.vertexai.raise_vertex_import_error" + ], + [ + "langchain.utilities.wikipedia.WikipediaAPIWrapper", + "langchain_community.utilities.wikipedia.WikipediaAPIWrapper" + ], + [ + "langchain.utilities.wolfram_alpha.WolframAlphaAPIWrapper", + "langchain_community.utilities.wolfram_alpha.WolframAlphaAPIWrapper" + ], + [ + "langchain.utilities.zapier.ZapierNLAWrapper", + "langchain_community.utilities.zapier.ZapierNLAWrapper" + ], + [ + "langchain.utils.ernie_functions.FunctionDescription", + "langchain_community.utils.ernie_functions.FunctionDescription" + ], + [ + "langchain.utils.ernie_functions.ToolDescription", + "langchain_community.utils.ernie_functions.ToolDescription" + ], + [ + "langchain.utils.ernie_functions.convert_pydantic_to_ernie_function", + "langchain_community.utils.ernie_functions.convert_pydantic_to_ernie_function" + ], + [ + "langchain.utils.ernie_functions.convert_pydantic_to_ernie_tool", + "langchain_community.utils.ernie_functions.convert_pydantic_to_ernie_tool" + ], + [ + "langchain.utils.math.Matrix", + "langchain_community.utils.math.Matrix" + ], + [ + "langchain.utils.math.cosine_similarity", + "langchain_community.utils.math.cosine_similarity" + ], + [ + "langchain.utils.math.cosine_similarity_top_k", + "langchain_community.utils.math.cosine_similarity_top_k" + ], + [ + "langchain.utils.openai.is_openai_v1", + "langchain_community.utils.openai.is_openai_v1" + ], + [ + "langchain.utils.openai_functions.FunctionDescription", + "langchain_community.utils.openai_functions.FunctionDescription" + ], + [ + "langchain.utils.openai_functions.ToolDescription", + "langchain_community.utils.openai_functions.ToolDescription" + ], + [ + "langchain.utils.openai_functions.convert_pydantic_to_openai_function", + "langchain_community.utils.openai_functions.convert_pydantic_to_openai_function" + ], + [ + "langchain.utils.openai_functions.convert_pydantic_to_openai_tool", + "langchain_community.utils.openai_functions.convert_pydantic_to_openai_tool" + ], + [ + "langchain.vectorstores.AlibabaCloudOpenSearch", + "langchain_community.vectorstores.AlibabaCloudOpenSearch" + ], + [ + "langchain.vectorstores.AlibabaCloudOpenSearchSettings", + "langchain_community.vectorstores.AlibabaCloudOpenSearchSettings" + ], + [ + "langchain.vectorstores.AnalyticDB", + "langchain_community.vectorstores.AnalyticDB" + ], + [ + "langchain.vectorstores.Annoy", + "langchain_community.vectorstores.Annoy" + ], + [ + "langchain.vectorstores.AstraDB", + "langchain_community.vectorstores.AstraDB" + ], + [ + "langchain.vectorstores.AtlasDB", + "langchain_community.vectorstores.AtlasDB" + ], + [ + "langchain.vectorstores.AwaDB", + "langchain_community.vectorstores.AwaDB" + ], + [ + "langchain.vectorstores.AzureCosmosDBVectorSearch", + "langchain_community.vectorstores.AzureCosmosDBVectorSearch" + ], + [ + "langchain.vectorstores.AzureSearch", + "langchain_community.vectorstores.AzureSearch" + ], + [ + "langchain.vectorstores.Bagel", + "langchain_community.vectorstores.Bagel" + ], + [ + "langchain.vectorstores.Cassandra", + "langchain_community.vectorstores.Cassandra" + ], + [ + "langchain.vectorstores.Chroma", + "langchain_community.vectorstores.Chroma" + ], + [ + "langchain.vectorstores.Clarifai", + "langchain_community.vectorstores.Clarifai" + ], + [ + "langchain.vectorstores.Clickhouse", + "langchain_community.vectorstores.Clickhouse" + ], + [ + "langchain.vectorstores.ClickhouseSettings", + "langchain_community.vectorstores.ClickhouseSettings" + ], + [ + "langchain.vectorstores.DashVector", + "langchain_community.vectorstores.DashVector" + ], + [ + "langchain.vectorstores.DatabricksVectorSearch", + "langchain_community.vectorstores.DatabricksVectorSearch" + ], + [ + "langchain.vectorstores.DeepLake", + "langchain_community.vectorstores.DeepLake" + ], + [ + "langchain.vectorstores.Dingo", + "langchain_community.vectorstores.Dingo" + ], + [ + "langchain.vectorstores.DocArrayHnswSearch", + "langchain_community.vectorstores.DocArrayHnswSearch" + ], + [ + "langchain.vectorstores.DocArrayInMemorySearch", + "langchain_community.vectorstores.DocArrayInMemorySearch" + ], + [ + "langchain.vectorstores.ElasticKnnSearch", + "langchain_community.vectorstores.ElasticKnnSearch" + ], + [ + "langchain.vectorstores.ElasticVectorSearch", + "langchain_community.vectorstores.ElasticVectorSearch" + ], + [ + "langchain.vectorstores.ElasticsearchStore", + "langchain_community.vectorstores.ElasticsearchStore" + ], + [ + "langchain.vectorstores.Epsilla", + "langchain_community.vectorstores.Epsilla" + ], + [ + "langchain.vectorstores.FAISS", + "langchain_community.vectorstores.FAISS" + ], + [ + "langchain.vectorstores.Hologres", + "langchain_community.vectorstores.Hologres" + ], + [ + "langchain.vectorstores.LLMRails", + "langchain_community.vectorstores.LLMRails" + ], + [ + "langchain.vectorstores.LanceDB", + "langchain_community.vectorstores.LanceDB" + ], + [ + "langchain.vectorstores.Marqo", + "langchain_community.vectorstores.Marqo" + ], + [ + "langchain.vectorstores.MatchingEngine", + "langchain_community.vectorstores.MatchingEngine" + ], + [ + "langchain.vectorstores.Meilisearch", + "langchain_community.vectorstores.Meilisearch" + ], + [ + "langchain.vectorstores.Milvus", + "langchain_community.vectorstores.Milvus" + ], + [ + "langchain.vectorstores.MomentoVectorIndex", + "langchain_community.vectorstores.MomentoVectorIndex" + ], + [ + "langchain.vectorstores.MongoDBAtlasVectorSearch", + "langchain_community.vectorstores.MongoDBAtlasVectorSearch" + ], + [ + "langchain.vectorstores.MyScale", + "langchain_community.vectorstores.MyScale" + ], + [ + "langchain.vectorstores.MyScaleSettings", + "langchain_community.vectorstores.MyScaleSettings" + ], + [ + "langchain.vectorstores.Neo4jVector", + "langchain_community.vectorstores.Neo4jVector" + ], + [ + "langchain.vectorstores.OpenSearchVectorSearch", + "langchain_community.vectorstores.OpenSearchVectorSearch" + ], + [ + "langchain.vectorstores.PGEmbedding", + "langchain_community.vectorstores.PGEmbedding" + ], + [ + "langchain.vectorstores.PGVector", + "langchain_community.vectorstores.PGVector" + ], + [ + "langchain.vectorstores.Pinecone", + "langchain_community.vectorstores.Pinecone" + ], + [ + "langchain.vectorstores.Qdrant", + "langchain_community.vectorstores.Qdrant" + ], + [ + "langchain.vectorstores.Redis", + "langchain_community.vectorstores.Redis" + ], + [ + "langchain.vectorstores.Rockset", + "langchain_community.vectorstores.Rockset" + ], + [ + "langchain.vectorstores.SKLearnVectorStore", + "langchain_community.vectorstores.SKLearnVectorStore" + ], + [ + "langchain.vectorstores.SQLiteVSS", + "langchain_community.vectorstores.SQLiteVSS" + ], + [ + "langchain.vectorstores.ScaNN", + "langchain_community.vectorstores.ScaNN" + ], + [ + "langchain.vectorstores.SemaDB", + "langchain_community.vectorstores.SemaDB" + ], + [ + "langchain.vectorstores.SingleStoreDB", + "langchain_community.vectorstores.SingleStoreDB" + ], + [ + "langchain.vectorstores.StarRocks", + "langchain_community.vectorstores.StarRocks" + ], + [ + "langchain.vectorstores.SupabaseVectorStore", + "langchain_community.vectorstores.SupabaseVectorStore" + ], + [ + "langchain.vectorstores.Tair", + "langchain_community.vectorstores.Tair" + ], + [ + "langchain.vectorstores.TencentVectorDB", + "langchain_community.vectorstores.TencentVectorDB" + ], + [ + "langchain.vectorstores.Tigris", + "langchain_community.vectorstores.Tigris" + ], + [ + "langchain.vectorstores.TileDB", + "langchain_community.vectorstores.TileDB" + ], + [ + "langchain.vectorstores.TimescaleVector", + "langchain_community.vectorstores.TimescaleVector" + ], + [ + "langchain.vectorstores.Typesense", + "langchain_community.vectorstores.Typesense" + ], + [ + "langchain.vectorstores.USearch", + "langchain_community.vectorstores.USearch" + ], + [ + "langchain.vectorstores.Vald", + "langchain_community.vectorstores.Vald" + ], + [ + "langchain.vectorstores.Vearch", + "langchain_community.vectorstores.Vearch" + ], + [ + "langchain.vectorstores.Vectara", + "langchain_community.vectorstores.Vectara" + ], + [ + "langchain.vectorstores.VespaStore", + "langchain_community.vectorstores.VespaStore" + ], + [ + "langchain.vectorstores.Weaviate", + "langchain_community.vectorstores.Weaviate" + ], + [ + "langchain.vectorstores.Yellowbrick", + "langchain_community.vectorstores.Yellowbrick" + ], + [ + "langchain.vectorstores.ZepVectorStore", + "langchain_community.vectorstores.ZepVectorStore" + ], + [ + "langchain.vectorstores.Zilliz", + "langchain_community.vectorstores.Zilliz" + ], + [ + "langchain.vectorstores.alibabacloud_opensearch.AlibabaCloudOpenSearch", + "langchain_community.vectorstores.alibabacloud_opensearch.AlibabaCloudOpenSearch" + ], + [ + "langchain.vectorstores.alibabacloud_opensearch.AlibabaCloudOpenSearchSettings", + "langchain_community.vectorstores.alibabacloud_opensearch.AlibabaCloudOpenSearchSettings" + ], + [ + "langchain.vectorstores.analyticdb.AnalyticDB", + "langchain_community.vectorstores.analyticdb.AnalyticDB" + ], + [ + "langchain.vectorstores.annoy.Annoy", + "langchain_community.vectorstores.annoy.Annoy" + ], + [ + "langchain.vectorstores.astradb.AstraDB", + "langchain_community.vectorstores.astradb.AstraDB" + ], + [ + "langchain.vectorstores.atlas.AtlasDB", + "langchain_community.vectorstores.atlas.AtlasDB" + ], + [ + "langchain.vectorstores.awadb.AwaDB", + "langchain_community.vectorstores.awadb.AwaDB" + ], + [ + "langchain.vectorstores.azure_cosmos_db.AzureCosmosDBVectorSearch", + "langchain_community.vectorstores.azure_cosmos_db.AzureCosmosDBVectorSearch" + ], + [ + "langchain.vectorstores.azure_cosmos_db.CosmosDBDocumentType", + "langchain_community.vectorstores.azure_cosmos_db.CosmosDBDocumentType" + ], + [ + "langchain.vectorstores.azure_cosmos_db.CosmosDBSimilarityType", + "langchain_community.vectorstores.azure_cosmos_db.CosmosDBSimilarityType" + ], + [ + "langchain.vectorstores.azuresearch.AzureSearch", + "langchain_community.vectorstores.azuresearch.AzureSearch" + ], + [ + "langchain.vectorstores.azuresearch.AzureSearchVectorStoreRetriever", + "langchain_community.vectorstores.azuresearch.AzureSearchVectorStoreRetriever" + ], + [ + "langchain.vectorstores.bageldb.Bagel", + "langchain_community.vectorstores.bageldb.Bagel" + ], + [ + "langchain.vectorstores.baiducloud_vector_search.BESVectorStore", + "langchain_community.vectorstores.baiducloud_vector_search.BESVectorStore" + ], + [ + "langchain.vectorstores.cassandra.CVST", + "langchain_community.vectorstores.cassandra.CVST" + ], + [ + "langchain.vectorstores.cassandra.Cassandra", + "langchain_community.vectorstores.cassandra.Cassandra" + ], + [ + "langchain.vectorstores.chroma.Chroma", + "langchain_community.vectorstores.chroma.Chroma" + ], + [ + "langchain.vectorstores.clarifai.Clarifai", + "langchain_community.vectorstores.clarifai.Clarifai" + ], + [ + "langchain.vectorstores.clickhouse.Clickhouse", + "langchain_community.vectorstores.clickhouse.Clickhouse" + ], + [ + "langchain.vectorstores.clickhouse.ClickhouseSettings", + "langchain_community.vectorstores.clickhouse.ClickhouseSettings" + ], + [ + "langchain.vectorstores.dashvector.DashVector", + "langchain_community.vectorstores.dashvector.DashVector" + ], + [ + "langchain.vectorstores.databricks_vector_search.DatabricksVectorSearch", + "langchain_community.vectorstores.databricks_vector_search.DatabricksVectorSearch" + ], + [ + "langchain.vectorstores.deeplake.DeepLake", + "langchain_community.vectorstores.deeplake.DeepLake" + ], + [ + "langchain.vectorstores.dingo.Dingo", + "langchain_community.vectorstores.dingo.Dingo" + ], + [ + "langchain.vectorstores.elastic_vector_search.ElasticKnnSearch", + "langchain_community.vectorstores.elastic_vector_search.ElasticKnnSearch" + ], + [ + "langchain.vectorstores.elastic_vector_search.ElasticVectorSearch", + "langchain_community.vectorstores.elastic_vector_search.ElasticVectorSearch" + ], + [ + "langchain.vectorstores.elasticsearch.ApproxRetrievalStrategy", + "langchain_community.vectorstores.elasticsearch.ApproxRetrievalStrategy" + ], + [ + "langchain.vectorstores.elasticsearch.BaseRetrievalStrategy", + "langchain_community.vectorstores.elasticsearch.BaseRetrievalStrategy" + ], + [ + "langchain.vectorstores.elasticsearch.ElasticsearchStore", + "langchain_community.vectorstores.elasticsearch.ElasticsearchStore" + ], + [ + "langchain.vectorstores.elasticsearch.ExactRetrievalStrategy", + "langchain_community.vectorstores.elasticsearch.ExactRetrievalStrategy" + ], + [ + "langchain.vectorstores.elasticsearch.SparseRetrievalStrategy", + "langchain_community.vectorstores.elasticsearch.SparseRetrievalStrategy" + ], + [ + "langchain.vectorstores.epsilla.Epsilla", + "langchain_community.vectorstores.epsilla.Epsilla" + ], + [ + "langchain.vectorstores.faiss.FAISS", + "langchain_community.vectorstores.faiss.FAISS" + ], + [ + "langchain.vectorstores.hippo.Hippo", + "langchain_community.vectorstores.hippo.Hippo" + ], + [ + "langchain.vectorstores.hologres.Hologres", + "langchain_community.vectorstores.hologres.Hologres" + ], + [ + "langchain.vectorstores.lancedb.LanceDB", + "langchain_community.vectorstores.lancedb.LanceDB" + ], + [ + "langchain.vectorstores.llm_rails.LLMRails", + "langchain_community.vectorstores.llm_rails.LLMRails" + ], + [ + "langchain.vectorstores.llm_rails.LLMRailsRetriever", + "langchain_community.vectorstores.llm_rails.LLMRailsRetriever" + ], + [ + "langchain.vectorstores.marqo.Marqo", + "langchain_community.vectorstores.marqo.Marqo" + ], + [ + "langchain.vectorstores.matching_engine.MatchingEngine", + "langchain_community.vectorstores.matching_engine.MatchingEngine" + ], + [ + "langchain.vectorstores.meilisearch.Meilisearch", + "langchain_community.vectorstores.meilisearch.Meilisearch" + ], + [ + "langchain.vectorstores.milvus.Milvus", + "langchain_community.vectorstores.milvus.Milvus" + ], + [ + "langchain.vectorstores.momento_vector_index.MomentoVectorIndex", + "langchain_community.vectorstores.momento_vector_index.MomentoVectorIndex" + ], + [ + "langchain.vectorstores.mongodb_atlas.MongoDBAtlasVectorSearch", + "langchain_community.vectorstores.mongodb_atlas.MongoDBAtlasVectorSearch" + ], + [ + "langchain.vectorstores.mongodb_atlas.MongoDBDocumentType", + "langchain_community.vectorstores.mongodb_atlas.MongoDBDocumentType" + ], + [ + "langchain.vectorstores.myscale.MyScale", + "langchain_community.vectorstores.myscale.MyScale" + ], + [ + "langchain.vectorstores.myscale.MyScaleSettings", + "langchain_community.vectorstores.myscale.MyScaleSettings" + ], + [ + "langchain.vectorstores.myscale.MyScaleWithoutJSON", + "langchain_community.vectorstores.myscale.MyScaleWithoutJSON" + ], + [ + "langchain.vectorstores.neo4j_vector.Neo4jVector", + "langchain_community.vectorstores.neo4j_vector.Neo4jVector" + ], + [ + "langchain.vectorstores.neo4j_vector.SearchType", + "langchain_community.vectorstores.neo4j_vector.SearchType" + ], + [ + "langchain.vectorstores.nucliadb.NucliaDB", + "langchain_community.vectorstores.nucliadb.NucliaDB" + ], + [ + "langchain.vectorstores.opensearch_vector_search.OpenSearchVectorSearch", + "langchain_community.vectorstores.opensearch_vector_search.OpenSearchVectorSearch" + ], + [ + "langchain.vectorstores.pgembedding.CollectionStore", + "langchain_community.vectorstores.pgembedding.CollectionStore" + ], + [ + "langchain.vectorstores.pgembedding.EmbeddingStore", + "langchain_community.vectorstores.pgembedding.EmbeddingStore" + ], + [ + "langchain.vectorstores.pgembedding.PGEmbedding", + "langchain_community.vectorstores.pgembedding.PGEmbedding" + ], + [ + "langchain.vectorstores.pgembedding.QueryResult", + "langchain_community.vectorstores.pgembedding.QueryResult" + ], + [ + "langchain.vectorstores.pgvecto_rs.PGVecto_rs", + "langchain_community.vectorstores.pgvecto_rs.PGVecto_rs" + ], + [ + "langchain.vectorstores.pgvector.DistanceStrategy", + "langchain_community.vectorstores.pgvector.DistanceStrategy" + ], + [ + "langchain.vectorstores.pgvector.PGVector", + "langchain_community.vectorstores.pgvector.PGVector" + ], + [ + "langchain.vectorstores.pinecone.Pinecone", + "langchain_community.vectorstores.pinecone.Pinecone" + ], + [ + "langchain.vectorstores.qdrant.Qdrant", + "langchain_community.vectorstores.qdrant.Qdrant" + ], + [ + "langchain.vectorstores.qdrant.QdrantException", + "langchain_community.vectorstores.qdrant.QdrantException" + ], + [ + "langchain.vectorstores.rocksetdb.Rockset", + "langchain_community.vectorstores.rocksetdb.Rockset" + ], + [ + "langchain.vectorstores.scann.ScaNN", + "langchain_community.vectorstores.scann.ScaNN" + ], + [ + "langchain.vectorstores.semadb.SemaDB", + "langchain_community.vectorstores.semadb.SemaDB" + ], + [ + "langchain.vectorstores.singlestoredb.SingleStoreDB", + "langchain_community.vectorstores.singlestoredb.SingleStoreDB" + ], + [ + "langchain.vectorstores.singlestoredb.SingleStoreDBRetriever", + "langchain_community.vectorstores.singlestoredb.SingleStoreDBRetriever" + ], + [ + "langchain.vectorstores.sklearn.BaseSerializer", + "langchain_community.vectorstores.sklearn.BaseSerializer" + ], + [ + "langchain.vectorstores.sklearn.BsonSerializer", + "langchain_community.vectorstores.sklearn.BsonSerializer" + ], + [ + "langchain.vectorstores.sklearn.JsonSerializer", + "langchain_community.vectorstores.sklearn.JsonSerializer" + ], + [ + "langchain.vectorstores.sklearn.ParquetSerializer", + "langchain_community.vectorstores.sklearn.ParquetSerializer" + ], + [ + "langchain.vectorstores.sklearn.SKLearnVectorStore", + "langchain_community.vectorstores.sklearn.SKLearnVectorStore" + ], + [ + "langchain.vectorstores.sklearn.SKLearnVectorStoreException", + "langchain_community.vectorstores.sklearn.SKLearnVectorStoreException" + ], + [ + "langchain.vectorstores.sqlitevss.SQLiteVSS", + "langchain_community.vectorstores.sqlitevss.SQLiteVSS" + ], + [ + "langchain.vectorstores.starrocks.StarRocks", + "langchain_community.vectorstores.starrocks.StarRocks" + ], + [ + "langchain.vectorstores.starrocks.StarRocksSettings", + "langchain_community.vectorstores.starrocks.StarRocksSettings" + ], + [ + "langchain.vectorstores.supabase.SupabaseVectorStore", + "langchain_community.vectorstores.supabase.SupabaseVectorStore" + ], + [ + "langchain.vectorstores.tair.Tair", + "langchain_community.vectorstores.tair.Tair" + ], + [ + "langchain.vectorstores.tencentvectordb.ConnectionParams", + "langchain_community.vectorstores.tencentvectordb.ConnectionParams" + ], + [ + "langchain.vectorstores.tencentvectordb.IndexParams", + "langchain_community.vectorstores.tencentvectordb.IndexParams" + ], + [ + "langchain.vectorstores.tencentvectordb.TencentVectorDB", + "langchain_community.vectorstores.tencentvectordb.TencentVectorDB" + ], + [ + "langchain.vectorstores.tigris.Tigris", + "langchain_community.vectorstores.tigris.Tigris" + ], + [ + "langchain.vectorstores.tiledb.TileDB", + "langchain_community.vectorstores.tiledb.TileDB" + ], + [ + "langchain.vectorstores.timescalevector.TimescaleVector", + "langchain_community.vectorstores.timescalevector.TimescaleVector" + ], + [ + "langchain.vectorstores.typesense.Typesense", + "langchain_community.vectorstores.typesense.Typesense" + ], + [ + "langchain.vectorstores.usearch.USearch", + "langchain_community.vectorstores.usearch.USearch" + ], + [ + "langchain.vectorstores.utils.DistanceStrategy", + "langchain_community.vectorstores.utils.DistanceStrategy" + ], + [ + "langchain.vectorstores.utils.filter_complex_metadata", + "langchain_community.vectorstores.utils.filter_complex_metadata" + ], + [ + "langchain.vectorstores.utils.maximal_marginal_relevance", + "langchain_community.vectorstores.utils.maximal_marginal_relevance" + ], + [ + "langchain.vectorstores.vald.Vald", + "langchain_community.vectorstores.vald.Vald" + ], + [ + "langchain.vectorstores.vearch.Vearch", + "langchain_community.vectorstores.vearch.Vearch" + ], + [ + "langchain.vectorstores.vectara.Vectara", + "langchain_community.vectorstores.vectara.Vectara" + ], + [ + "langchain.vectorstores.vectara.VectaraRetriever", + "langchain_community.vectorstores.vectara.VectaraRetriever" + ], + [ + "langchain.vectorstores.vespa.VespaStore", + "langchain_community.vectorstores.vespa.VespaStore" + ], + [ + "langchain.vectorstores.weaviate.Weaviate", + "langchain_community.vectorstores.weaviate.Weaviate" + ], + [ + "langchain.vectorstores.xata.XataVectorStore", + "langchain_community.vectorstores.xata.XataVectorStore" + ], + [ + "langchain.vectorstores.yellowbrick.Yellowbrick", + "langchain_community.vectorstores.yellowbrick.Yellowbrick" + ], + [ + "langchain.vectorstores.zep.CollectionConfig", + "langchain_community.vectorstores.zep.CollectionConfig" + ], + [ + "langchain.vectorstores.zep.ZepVectorStore", + "langchain_community.vectorstores.zep.ZepVectorStore" + ], + [ + "langchain.vectorstores.zilliz.Zilliz", + "langchain_community.vectorstores.zilliz.Zilliz" + ] +] diff --git a/libs/cli/langchain_cli/namespaces/migrate/codemods/migrations_v0.2_partner.json b/libs/cli/langchain_cli/namespaces/migrate/codemods/migrations_v0.2_partner.json new file mode 100644 index 0000000000..6c96e6912e --- /dev/null +++ b/libs/cli/langchain_cli/namespaces/migrate/codemods/migrations_v0.2_partner.json @@ -0,0 +1,14 @@ +[ + [ + "langchain.chat_models.ChatOpenAI", + "langchain_openai.ChatOpenAI" + ], + [ + "langchain.chat_models.ChatOpenAI", + "langchain_openai.ChatOpenAI" + ], + [ + "langchain.chat_models.ChatAnthropic", + "langchain_anthropic.ChatAnthropic" + ] +] diff --git a/libs/cli/langchain_cli/namespaces/migrate/codemods/replace_imports.py b/libs/cli/langchain_cli/namespaces/migrate/codemods/replace_imports.py new file mode 100644 index 0000000000..ac51f27f3e --- /dev/null +++ b/libs/cli/langchain_cli/namespaces/migrate/codemods/replace_imports.py @@ -0,0 +1,205 @@ +""" +# Adapted from bump-pydantic +# https://github.com/pydantic/bump-pydantic + +This codemod deals with the following cases: + +1. `from pydantic import BaseSettings` +2. `from pydantic.settings import BaseSettings` +3. `from pydantic import BaseSettings as ` +4. `from pydantic.settings import BaseSettings as ` # TODO: This is not working. +5. `import pydantic` -> `pydantic.BaseSettings` +""" +from __future__ import annotations + +import json +import os +from dataclasses import dataclass +from typing import Callable, Dict, Iterable, List, Sequence, Tuple, TypeVar + +import libcst as cst +import libcst.matchers as m +from libcst.codemod import CodemodContext, VisitorBasedCodemodCommand +from libcst.codemod.visitors import AddImportsVisitor + +HERE = os.path.dirname(__file__) + + +def _load_migrations_by_file(path: str): + migrations_path = os.path.join(HERE, path) + with open(migrations_path, "r", encoding="utf-8") as f: + data = json.load(f) + return data + + +T = TypeVar("T") + + +def _deduplicate_in_order( + seq: Iterable[T], key: Callable[[T], str] = lambda x: x +) -> List[T]: + seen = set() + seen_add = seen.add + return [x for x in seq if not (key(x) in seen or seen_add(key(x)))] + + +def _load_migrations(): + """Load the migrations from the JSON file.""" + # Later earlier ones have higher precedence. + paths = [ + "migrations_v0.2_partner.json", + "migrations_v0.2.json", + ] + + data = [] + for path in paths: + data.extend(_load_migrations_by_file(path)) + + data = _deduplicate_in_order(data, key=lambda x: x[0]) + + imports: Dict[str, Tuple[str, str]] = {} + + for old_path, new_path in data: + # Parse the old parse which is of the format 'langchain.chat_models.ChatOpenAI' + # into the module and class name. + old_parts = old_path.split(".") + old_module = ".".join(old_parts[:-1]) + old_class = old_parts[-1] + old_path_str = f"{old_module}:{old_class}" + + # Parse the new parse which is of the format 'langchain.chat_models.ChatOpenAI' + # Into a 2-tuple of the module and class name. + new_parts = new_path.split(".") + new_module = ".".join(new_parts[:-1]) + new_class = new_parts[-1] + new_path_str = (new_module, new_class) + + imports[old_path_str] = new_path_str + + return imports + + +IMPORTS = _load_migrations() + + +def resolve_module_parts(module_parts: list[str]) -> m.Attribute | m.Name: + """Converts a list of module parts to a `Name` or `Attribute` node.""" + if len(module_parts) == 1: + return m.Name(module_parts[0]) + if len(module_parts) == 2: + first, last = module_parts + return m.Attribute(value=m.Name(first), attr=m.Name(last)) + last_name = module_parts.pop() + attr = resolve_module_parts(module_parts) + return m.Attribute(value=attr, attr=m.Name(last_name)) + + +def get_import_from_from_str(import_str: str) -> m.ImportFrom: + """Converts a string like `pydantic:BaseSettings` to Examples: + >>> get_import_from_from_str("pydantic:BaseSettings") + ImportFrom( + module=Name("pydantic"), + names=[ImportAlias(name=Name("BaseSettings"))], + ) + >>> get_import_from_from_str("pydantic.settings:BaseSettings") + ImportFrom( + module=Attribute(value=Name("pydantic"), attr=Name("settings")), + names=[ImportAlias(name=Name("BaseSettings"))], + ) + >>> get_import_from_from_str("a.b.c:d") + ImportFrom( + module=Attribute( + value=Attribute(value=Name("a"), attr=Name("b")), attr=Name("c") + ), + names=[ImportAlias(name=Name("d"))], + ) + """ + module, name = import_str.split(":") + module_parts = module.split(".") + module_node = resolve_module_parts(module_parts) + return m.ImportFrom( + module=module_node, + names=[m.ZeroOrMore(), m.ImportAlias(name=m.Name(value=name)), m.ZeroOrMore()], + ) + + +@dataclass +class ImportInfo: + import_from: m.ImportFrom + import_str: str + to_import_str: tuple[str, str] + + +IMPORT_INFOS = [ + ImportInfo( + import_from=get_import_from_from_str(import_str), + import_str=import_str, + to_import_str=to_import_str, + ) + for import_str, to_import_str in IMPORTS.items() +] +IMPORT_MATCH = m.OneOf(*[info.import_from for info in IMPORT_INFOS]) + + +class ReplaceImportsCodemod(VisitorBasedCodemodCommand): + @m.leave(IMPORT_MATCH) + def leave_replace_import( + self, _: cst.ImportFrom, updated_node: cst.ImportFrom + ) -> cst.ImportFrom: + for import_info in IMPORT_INFOS: + if m.matches(updated_node, import_info.import_from): + aliases: Sequence[cst.ImportAlias] = updated_node.names # type: ignore + # If multiple objects are imported in a single import statement, + # we need to remove only the one we're replacing. + AddImportsVisitor.add_needed_import( + self.context, *import_info.to_import_str + ) + if len(updated_node.names) > 1: # type: ignore + names = [ + alias + for alias in aliases + if alias.name.value != import_info.to_import_str[-1] + ] + names[-1] = names[-1].with_changes(comma=cst.MaybeSentinel.DEFAULT) + updated_node = updated_node.with_changes(names=names) + else: + return cst.RemoveFromParent() # type: ignore[return-value] + return updated_node + + +if __name__ == "__main__": + import textwrap + + from rich.console import Console + + console = Console() + + source = textwrap.dedent( + """ + from pydantic.settings import BaseSettings + from pydantic.color import Color + from pydantic.payment import PaymentCardNumber, PaymentCardBrand + from pydantic import Color + from pydantic import Color as Potato + + + class Potato(BaseSettings): + color: Color + payment: PaymentCardNumber + brand: PaymentCardBrand + potato: Potato + """ + ) + console.print(source) + console.print("=" * 80) + + mod = cst.parse_module(source) + context = CodemodContext(filename="main.py") + wrapper = cst.MetadataWrapper(mod) + command = ReplaceImportsCodemod(context=context) + + mod = wrapper.visit(command) + wrapper = cst.MetadataWrapper(mod) + command = AddImportsVisitor(context=context) # type: ignore[assignment] + mod = wrapper.visit(command) + console.print(mod.code) diff --git a/libs/cli/langchain_cli/namespaces/migrate/glob_helpers.py b/libs/cli/langchain_cli/namespaces/migrate/glob_helpers.py new file mode 100644 index 0000000000..a4fbd24c04 --- /dev/null +++ b/libs/cli/langchain_cli/namespaces/migrate/glob_helpers.py @@ -0,0 +1,52 @@ +# Adapted from bump-pydantic +# https://github.com/pydantic/bump-pydantic +import fnmatch +import re +from pathlib import Path +from typing import List + +MATCH_SEP = r"(?:/|\\)" +MATCH_SEP_OR_END = r"(?:/|\\|\Z)" +MATCH_NON_RECURSIVE = r"[^/\\]*" +MATCH_RECURSIVE = r"(?:.*)" + + +def glob_to_re(pattern: str) -> str: + """Translate a glob pattern to a regular expression for matching.""" + fragments: List[str] = [] + for segment in re.split(r"/|\\", pattern): + if segment == "": + continue + if segment == "**": + # Remove previous separator match, so the recursive match c + # can match zero or more segments. + if fragments and fragments[-1] == MATCH_SEP: + fragments.pop() + fragments.append(MATCH_RECURSIVE) + elif "**" in segment: + raise ValueError( + "invalid pattern: '**' can only be an entire path component" + ) + else: + fragment = fnmatch.translate(segment) + fragment = fragment.replace(r"(?s:", r"(?:") + fragment = fragment.replace(r".*", MATCH_NON_RECURSIVE) + fragment = fragment.replace(r"\Z", r"") + fragments.append(fragment) + fragments.append(MATCH_SEP) + # Remove trailing MATCH_SEP, so it can be replaced with MATCH_SEP_OR_END. + if fragments and fragments[-1] == MATCH_SEP: + fragments.pop() + fragments.append(MATCH_SEP_OR_END) + return rf"(?s:{''.join(fragments)})" + + +def match_glob(path: Path, pattern: str) -> bool: + """Check if a path matches a glob pattern. + + If the pattern ends with a directory separator, the path must be a directory. + """ + match = bool(re.fullmatch(glob_to_re(pattern), str(path))) + if pattern.endswith("/") or pattern.endswith("\\"): + return match and path.is_dir() + return match diff --git a/libs/cli/langchain_cli/namespaces/migrate/main.py b/libs/cli/langchain_cli/namespaces/migrate/main.py new file mode 100644 index 0000000000..39dde55049 --- /dev/null +++ b/libs/cli/langchain_cli/namespaces/migrate/main.py @@ -0,0 +1,194 @@ +"""Migrate LangChain to the most recent version.""" +# Adapted from bump-pydantic +# https://github.com/pydantic/bump-pydantic +import difflib +import functools +import multiprocessing +import os +import time +import traceback +from pathlib import Path +from typing import Any, Dict, Iterable, List, Tuple, Type, TypeVar, Union + +import libcst as cst +import rich +import typer +from libcst.codemod import CodemodContext, ContextAwareTransformer +from libcst.helpers import calculate_module_and_package +from libcst.metadata import FullRepoManager, FullyQualifiedNameProvider, ScopeProvider +from rich.console import Console +from rich.progress import Progress +from typer import Argument, Exit, Option, Typer +from typing_extensions import ParamSpec + +from langchain_cli.namespaces.migrate.codemods import Rule, gather_codemods +from langchain_cli.namespaces.migrate.glob_helpers import match_glob + +app = Typer(invoke_without_command=True, add_completion=False) + +P = ParamSpec("P") +T = TypeVar("T") + +DEFAULT_IGNORES = [".venv/**"] + + +@app.callback() +def main( + path: Path = Argument(..., exists=True, dir_okay=True, allow_dash=False), + disable: List[Rule] = Option(default=[], help="Disable a rule."), + diff: bool = Option(False, help="Show diff instead of applying changes."), + ignore: List[str] = Option( + default=DEFAULT_IGNORES, help="Ignore a path glob pattern." + ), + log_file: Path = Option("log.txt", help="Log errors to this file."), +): + """Migrate langchain to the most recent version.""" + if not diff: + rich.print("[bold red]Alert![/ bold red] langchain-cli migrate", end=": ") + if not typer.confirm( + "The migration process will modify your files. " + "The migration is a `best-effort` process and is not expected to " + "be perfect. " + "Do you want to continue?" + ): + raise Exit() + console = Console(log_time=True) + console.log("Start langchain-cli migrate") + # NOTE: LIBCST_PARSER_TYPE=native is required according to https://github.com/Instagram/LibCST/issues/487. + os.environ["LIBCST_PARSER_TYPE"] = "native" + + if os.path.isfile(path): + package = path.parent + all_files = [path] + else: + package = path + all_files = sorted(package.glob("**/*.py")) + + filtered_files = [ + file + for file in all_files + if not any(match_glob(file, pattern) for pattern in ignore) + ] + files = [str(file.relative_to(".")) for file in filtered_files] + + if len(files) == 1: + console.log("Found 1 file to process.") + elif len(files) > 1: + console.log(f"Found {len(files)} files to process.") + else: + console.log("No files to process.") + raise Exit() + + providers = {FullyQualifiedNameProvider, ScopeProvider} + metadata_manager = FullRepoManager(".", files, providers=providers) # type: ignore[arg-type] + metadata_manager.resolve_cache() + + scratch: dict[str, Any] = {} + start_time = time.time() + + codemods = gather_codemods(disabled=disable) + + log_fp = log_file.open("a+", encoding="utf8") + partial_run_codemods = functools.partial( + run_codemods, codemods, metadata_manager, scratch, package, diff + ) + with Progress(*Progress.get_default_columns(), transient=True) as progress: + task = progress.add_task(description="Executing codemods...", total=len(files)) + count_errors = 0 + difflines: List[List[str]] = [] + with multiprocessing.Pool() as pool: + for error, _difflines in pool.imap_unordered(partial_run_codemods, files): + progress.advance(task) + + if _difflines is not None: + difflines.append(_difflines) + + if error is not None: + count_errors += 1 + log_fp.writelines(error) + + modified = [Path(f) for f in files if os.stat(f).st_mtime > start_time] + + if not diff: + if modified: + console.log(f"Refactored {len(modified)} files.") + else: + console.log("No files were modified.") + + for _difflines in difflines: + color_diff(console, _difflines) + + if count_errors > 0: + console.log(f"Found {count_errors} errors. Please check the {log_file} file.") + else: + console.log("Run successfully!") + + if difflines: + raise Exit(1) + + +def run_codemods( + codemods: List[Type[ContextAwareTransformer]], + metadata_manager: FullRepoManager, + scratch: Dict[str, Any], + package: Path, + diff: bool, + filename: str, +) -> Tuple[Union[str, None], Union[List[str], None]]: + try: + module_and_package = calculate_module_and_package(str(package), filename) + context = CodemodContext( + metadata_manager=metadata_manager, + filename=filename, + full_module_name=module_and_package.name, + full_package_name=module_and_package.package, + ) + context.scratch.update(scratch) + + file_path = Path(filename) + with file_path.open("r+", encoding="utf-8") as fp: + code = fp.read() + fp.seek(0) + + input_tree = cst.parse_module(code) + + for codemod in codemods: + transformer = codemod(context=context) + output_tree = transformer.transform_module(input_tree) + input_tree = output_tree + + output_code = input_tree.code + if code != output_code: + if diff: + lines = difflib.unified_diff( + code.splitlines(keepends=True), + output_code.splitlines(keepends=True), + fromfile=filename, + tofile=filename, + ) + return None, list(lines) + else: + fp.write(output_code) + fp.truncate() + return None, None + except cst.ParserSyntaxError as exc: + return ( + f"A syntax error happened on {filename}. This file cannot be " + f"formatted.\n" + f"{exc}" + ), None + except Exception: + return f"An error happened on {filename}.\n{traceback.format_exc()}", None + + +def color_diff(console: Console, lines: Iterable[str]) -> None: + for line in lines: + line = line.rstrip("\n") + if line.startswith("+"): + console.print(line, style="green") + elif line.startswith("-"): + console.print(line, style="red") + elif line.startswith("^"): + console.print(line, style="blue") + else: + console.print(line, style="white") diff --git a/libs/cli/poetry.lock b/libs/cli/poetry.lock index e41b350e1f..9863420385 100644 --- a/libs/cli/poetry.lock +++ b/libs/cli/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -819,6 +819,46 @@ orjson = ">=3.9.14,<4.0.0" pydantic = ">=1,<3" requests = ">=2,<3" +[[package]] +name = "libcst" +version = "1.3.1" +description = "A concrete syntax tree with AST-like properties for Python 3.0 through 3.12 programs." +optional = false +python-versions = ">=3.9" +files = [ + {file = "libcst-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de93193cba6d54f2a4419e94ba2de642b111f52e4fa01bb6e2c655914585f65b"}, + {file = "libcst-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2d64d86dcd6c80a5dac2e243c5ed7a7a193242209ac33bad4b0639b24f6d131"}, + {file = "libcst-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db084f7bbf825c7bd5ed256290066d0336df6a7dc3a029c9870a64cd2298b87f"}, + {file = "libcst-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16880711be03a1f5da7028fe791ba5b482a50d830225a70272dc332dfd927652"}, + {file = "libcst-1.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:189bb28c19c5dd3c64583f969b72f7732dbdb1dee9eca3acc85099e4cef9148b"}, + {file = "libcst-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:181372386c986e3de07d7a93f269214cd825adc714f1f9da8252b44f05e181c4"}, + {file = "libcst-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c2020f7449270e3ff0bdc481ae244d812f2d9a8b7dbff0ea66b830f4b350f54"}, + {file = "libcst-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:be3bf9aaafebda6a21e241e819f0ab67e186e898c3562704e41241cf8738353a"}, + {file = "libcst-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a0d250fb6a2c1d158f30d25ba5e33e3ed3672d2700d480dd47beffd1431a008"}, + {file = "libcst-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ad5741b251d901f3da1819ac539192230cc6f8f81aaf04eb4ec0009c1c97285"}, + {file = "libcst-1.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b740dc0c3d1adbd91442fb878343d5a11e23a0e3ac5484be301fd8d148bcb085"}, + {file = "libcst-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:9e6bc95fa7dde79cde63a34a0412cd4a3d9fcc27be781a590f8c45c840c83658"}, + {file = "libcst-1.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4186076ce12141609ce950d61867b2a73ea199a7a9870dbafa76ad600e075b3c"}, + {file = "libcst-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4ed52a1a2fe4d8603de51649db5e438317b8116ebb9fc09ec68703535fe6c1c8"}, + {file = "libcst-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0886a9963597367b227345f19b24931b3ed6a4703fff237760745f90f0e6a20"}, + {file = "libcst-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:904c4cc5c801a5747e64b43e0accc87c67a4c804842d977ee215872c4cf8cf88"}, + {file = "libcst-1.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cdb7e8a118b60e064a02f6cbfa4d328212a3a115d125244495190f405709d5f"}, + {file = "libcst-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:431badf0e544b79c0ac9682dbd291ff63ddbc3c3aca0d13d3cc7a10c3a9db8a2"}, + {file = "libcst-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:701f5335e4fd566871497b9af1e871c98e1ef10c30b3b244f39343d709213401"}, + {file = "libcst-1.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7c6e709623b68ca9148e8ecbdc145f7b83befb26032e4bf6a8122500ba558b17"}, + {file = "libcst-1.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ede0f026a82b03b33a559ec566860085ece2e76d8f9bc21cb053eedf9cde8c79"}, + {file = "libcst-1.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c12b7b01d8745f82dd86a82acd2a9f8e8e7d6c94ddcfda996896e83d1a8d5c42"}, + {file = "libcst-1.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2995ca687118a9d3d41876f7270bc29305a2d402f4b8c81a3cff0aeee6d4c81"}, + {file = "libcst-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:2dbac1ac0a9d59ea7bbc3f87cdcca5bfe98835e31c668e95cb6f3d907ffc53fc"}, + {file = "libcst-1.3.1.tar.gz", hash = "sha256:03b1df1ae02456f1d465fcd5ead1d0d454bb483caefd8c8e6bde515ffdb53d1b"}, +] + +[package.dependencies] +pyyaml = ">=5.2" + +[package.extras] +dev = ["Sphinx (>=5.1.1)", "black (==23.12.1)", "build (>=0.10.0)", "coverage (>=4.5.4)", "fixit (==2.1.0)", "flake8 (==7.0.0)", "hypothesis (>=4.36.0)", "hypothesmith (>=0.0.4)", "jinja2 (==3.1.3)", "jupyter (>=1.0.0)", "maturin (>=0.8.3,<1.5)", "nbsphinx (>=0.4.2)", "prompt-toolkit (>=2.0.9)", "pyre-check (==0.9.18)", "setuptools-rust (>=1.5.2)", "setuptools-scm (>=6.0.1)", "slotscheck (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "ufmt (==2.5.1)", "usort (==1.0.8.post1)"] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -1322,7 +1362,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -1850,4 +1889,4 @@ serve = [] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "8232264abd652b61dac3fd47833745c1df6c3418599dc14f9fe09773f3f80f13" +content-hash = "4576fb13ecd9e13bc6c85e4cd6f56520708c7c1468f4b81bc6a346b128c9f695" diff --git a/libs/cli/pyproject.toml b/libs/cli/pyproject.toml index 2b6acb2342..9966597e0b 100644 --- a/libs/cli/pyproject.toml +++ b/libs/cli/pyproject.toml @@ -17,6 +17,7 @@ gitpython = "^3.1.40" langserve = { extras = ["all"], version = ">=0.0.51" } uvicorn = "^0.23.2" tomlkit = "^0.12.2" +libcst = { version = "^1.3.1", python = "^3.9" } [tool.poetry.scripts] langchain = "langchain_cli.cli:app" diff --git a/libs/cli/tests/unit_tests/__init__.py b/libs/cli/tests/unit_tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/cli/tests/unit_tests/migrate/__init__.py b/libs/cli/tests/unit_tests/migrate/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/cli/tests/unit_tests/migrate/cli_runner/__init__.py b/libs/cli/tests/unit_tests/migrate/cli_runner/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/cli/tests/unit_tests/migrate/cli_runner/case.py b/libs/cli/tests/unit_tests/migrate/cli_runner/case.py new file mode 100644 index 0000000000..e208d0acd4 --- /dev/null +++ b/libs/cli/tests/unit_tests/migrate/cli_runner/case.py @@ -0,0 +1,13 @@ +from __future__ import annotations + +from dataclasses import dataclass + +from .file import File +from .folder import Folder + + +@dataclass +class Case: + source: Folder | File + expected: Folder | File + name: str diff --git a/libs/cli/tests/unit_tests/migrate/cli_runner/cases/__init__.py b/libs/cli/tests/unit_tests/migrate/cli_runner/cases/__init__.py new file mode 100644 index 0000000000..9a91cdbce8 --- /dev/null +++ b/libs/cli/tests/unit_tests/migrate/cli_runner/cases/__init__.py @@ -0,0 +1,15 @@ +from tests.unit_tests.migrate.integration.case import Case +from tests.unit_tests.migrate.integration.cases import imports +from tests.unit_tests.migrate.integration.file import File +from tests.unit_tests.migrate.integration.folder import Folder + +cases = [ + Case( + name="empty", + source=File("__init__.py", content=[]), + expected=File("__init__.py", content=[]), + ), + *imports.cases, +] +before = Folder("project", *[case.source for case in cases]) +expected = Folder("project", *[case.expected for case in cases]) diff --git a/libs/cli/tests/unit_tests/migrate/cli_runner/cases/imports.py b/libs/cli/tests/unit_tests/migrate/cli_runner/cases/imports.py new file mode 100644 index 0000000000..bf9ff7b1b7 --- /dev/null +++ b/libs/cli/tests/unit_tests/migrate/cli_runner/cases/imports.py @@ -0,0 +1,32 @@ +from tests.unit_tests.migrate.integration.case import Case +from tests.unit_tests.migrate.integration.file import File + +cases = [ + Case( + name="Imports", + source=File( + "app.py", + content=[ + "from langchain.chat_models import ChatOpenAI", + "", + "", + "class foo:", + " a: int", + "", + "chain = ChatOpenAI()", + ], + ), + expected=File( + "app.py", + content=[ + "from langchain_openai import ChatOpenAI", + "", + "", + "class foo:", + " a: int", + "", + "chain = ChatOpenAI()", + ], + ), + ), +] diff --git a/libs/cli/tests/unit_tests/migrate/cli_runner/file.py b/libs/cli/tests/unit_tests/migrate/cli_runner/file.py new file mode 100644 index 0000000000..5cf303095e --- /dev/null +++ b/libs/cli/tests/unit_tests/migrate/cli_runner/file.py @@ -0,0 +1,16 @@ +from __future__ import annotations + + +class File: + def __init__(self, name: str, content: list[str] | None = None) -> None: + self.name = name + self.content = "\n".join(content or []) + + def __eq__(self, __value: object) -> bool: + if not isinstance(__value, File): + return NotImplemented + + if self.name != __value.name: + return False + + return self.content == __value.content diff --git a/libs/cli/tests/unit_tests/migrate/cli_runner/folder.py b/libs/cli/tests/unit_tests/migrate/cli_runner/folder.py new file mode 100644 index 0000000000..40d5d696e1 --- /dev/null +++ b/libs/cli/tests/unit_tests/migrate/cli_runner/folder.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from pathlib import Path + +from .file import File + + +class Folder: + def __init__(self, name: str, *files: Folder | File) -> None: + self.name = name + self._files = files + + @property + def files(self) -> list[Folder | File]: + return sorted(self._files, key=lambda f: f.name) + + def create_structure(self, root: Path) -> None: + path = root / self.name + path.mkdir() + + for file in self.files: + if isinstance(file, Folder): + file.create_structure(path) + else: + (path / file.name).write_text(file.content, encoding="utf-8") + + @classmethod + def from_structure(cls, root: Path) -> Folder: + name = root.name + files: list[File | Folder] = [] + + for path in root.iterdir(): + if path.is_dir(): + files.append(cls.from_structure(path)) + else: + files.append( + File(path.name, path.read_text(encoding="utf-8").splitlines()) + ) + + return Folder(name, *files) + + def __eq__(self, __value: object) -> bool: + if isinstance(__value, File): + return False + + if not isinstance(__value, Folder): + return NotImplemented + + if self.name != __value.name: + return False + + if len(self.files) != len(__value.files): + return False + + for self_file, other_file in zip(self.files, __value.files): + if self_file != other_file: + return False + + return True diff --git a/libs/cli/tests/unit_tests/migrate/cli_runner/test_cli.py b/libs/cli/tests/unit_tests/migrate/cli_runner/test_cli.py new file mode 100644 index 0000000000..59a5746af9 --- /dev/null +++ b/libs/cli/tests/unit_tests/migrate/cli_runner/test_cli.py @@ -0,0 +1,55 @@ +# ruff: noqa: E402 +from __future__ import annotations + +import pytest + +pytest.importorskip("libcst") + +import difflib +from pathlib import Path + +from typer.testing import CliRunner + +from langchain_cli.namespaces.migrate.main import app +from tests.unit_tests.migrate.cli_runner.cases import before, expected +from tests.unit_tests.migrate.cli_runner.folder import Folder + + +def find_issue(current: Folder, expected: Folder) -> str: + for current_file, expected_file in zip(current.files, expected.files): + if current_file != expected_file: + if current_file.name != expected_file.name: + return ( + f"Files have " + f"different names: {current_file.name} != {expected_file.name}" + ) + if isinstance(current_file, Folder) and isinstance(expected_file, Folder): + return find_issue(current_file, expected_file) + elif isinstance(current_file, Folder) or isinstance(expected_file, Folder): + return ( + f"One of the files is a " + f"folder: {current_file.name} != {expected_file.name}" + ) + return "\n".join( + difflib.unified_diff( + current_file.content.splitlines(), + expected_file.content.splitlines(), + fromfile=current_file.name, + tofile=expected_file.name, + ) + ) + return "Unknown" + + +def test_command_line(tmp_path: Path) -> None: + runner = CliRunner() + + with runner.isolated_filesystem(temp_dir=tmp_path) as td: + before.create_structure(root=Path(td)) + # The input is used to force through the confirmation. + result = runner.invoke(app, [before.name], input="y\n") + assert result.exit_code == 0, result.output + + after = Folder.from_structure(Path(td) / before.name) + + assert after == expected, find_issue(after, expected) diff --git a/libs/cli/tests/unit_tests/migrate/test_glob_helpers.py b/libs/cli/tests/unit_tests/migrate/test_glob_helpers.py new file mode 100644 index 0000000000..8acaf6045f --- /dev/null +++ b/libs/cli/tests/unit_tests/migrate/test_glob_helpers.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +from pathlib import Path + +import pytest + +from langchain_cli.namespaces.migrate.glob_helpers import glob_to_re, match_glob + + +class TestGlobHelpers: + match_glob_values: list[tuple[str, Path, bool]] = [ + ("foo", Path("foo"), True), + ("foo", Path("bar"), False), + ("foo", Path("foo/bar"), False), + ("*", Path("foo"), True), + ("*", Path("bar"), True), + ("*", Path("foo/bar"), False), + ("**", Path("foo"), True), + ("**", Path("foo/bar"), True), + ("**", Path("foo/bar/baz/qux"), True), + ("foo/bar", Path("foo/bar"), True), + ("foo/bar", Path("foo"), False), + ("foo/bar", Path("far"), False), + ("foo/bar", Path("foo/foo"), False), + ("foo/*", Path("foo/bar"), True), + ("foo/*", Path("foo/bar/baz"), False), + ("foo/*", Path("foo"), False), + ("foo/*", Path("bar"), False), + ("foo/**", Path("foo/bar"), True), + ("foo/**", Path("foo/bar/baz"), True), + ("foo/**", Path("foo/bar/baz/qux"), True), + ("foo/**", Path("foo"), True), + ("foo/**", Path("bar"), False), + ("foo/**/bar", Path("foo/bar"), True), + ("foo/**/bar", Path("foo/baz/bar"), True), + ("foo/**/bar", Path("foo/baz/qux/bar"), True), + ("foo/**/bar", Path("foo/baz/qux"), False), + ("foo/**/bar", Path("foo/bar/baz"), False), + ("foo/**/bar", Path("foo/bar/bar"), True), + ("foo/**/bar", Path("foo"), False), + ("foo/**/bar", Path("bar"), False), + ("foo/**/*/bar", Path("foo/bar"), False), + ("foo/**/*/bar", Path("foo/baz/bar"), True), + ("foo/**/*/bar", Path("foo/baz/qux/bar"), True), + ("foo/**/*/bar", Path("foo/baz/qux"), False), + ("foo/**/*/bar", Path("foo/bar/baz"), False), + ("foo/**/*/bar", Path("foo/bar/bar"), True), + ("foo/**/*/bar", Path("foo"), False), + ("foo/**/*/bar", Path("bar"), False), + ("foo/ba*", Path("foo/bar"), True), + ("foo/ba*", Path("foo/baz"), True), + ("foo/ba*", Path("foo/qux"), False), + ("foo/ba*", Path("foo/baz/qux"), False), + ("foo/ba*", Path("foo/bar/baz"), False), + ("foo/ba*", Path("foo"), False), + ("foo/ba*", Path("bar"), False), + ("foo/**/ba*/*/qux", Path("foo/a/b/c/bar/a/qux"), True), + ("foo/**/ba*/*/qux", Path("foo/a/b/c/baz/a/qux"), True), + ("foo/**/ba*/*/qux", Path("foo/a/bar/a/qux"), True), + ("foo/**/ba*/*/qux", Path("foo/baz/a/qux"), True), + ("foo/**/ba*/*/qux", Path("foo/baz/qux"), False), + ("foo/**/ba*/*/qux", Path("foo/a/b/c/qux/a/qux"), False), + ("foo/**/ba*/*/qux", Path("foo"), False), + ("foo/**/ba*/*/qux", Path("bar"), False), + ] + + @pytest.mark.parametrize(("pattern", "path", "expected"), match_glob_values) + def test_match_glob(self, pattern: str, path: Path, expected: bool): + expr = glob_to_re(pattern) + assert ( + match_glob(path, pattern) == expected + ), f"path: {path}, pattern: {pattern}, expr: {expr}" diff --git a/libs/cli/tests/unit_tests/migrate/test_replace_imports.py b/libs/cli/tests/unit_tests/migrate/test_replace_imports.py new file mode 100644 index 0000000000..ffa2f9d4d0 --- /dev/null +++ b/libs/cli/tests/unit_tests/migrate/test_replace_imports.py @@ -0,0 +1,41 @@ +# ruff: noqa: E402 +import pytest + +pytest.importorskip("libcst") + + +from libcst.codemod import CodemodTest + +from langchain_cli.namespaces.migrate.codemods.replace_imports import ( + ReplaceImportsCodemod, +) + + +class TestReplaceImportsCommand(CodemodTest): + TRANSFORM = ReplaceImportsCodemod + + def test_single_import(self) -> None: + before = """ + from langchain.chat_models import ChatOpenAI + """ + after = """ + from langchain_openai import ChatOpenAI + """ + self.assertCodemod(before, after) + + def test_noop_import(self) -> None: + code = """ + from foo import ChatOpenAI + """ + self.assertCodemod(code, code) + + def test_mixed_imports(self) -> None: + before = """ + from langchain.chat_models import ChatOpenAI, ChatAnthropic, foo + """ + after = """ + from langchain.chat_models import foo + from langchain_anthropic import ChatAnthropic + from langchain_openai import ChatOpenAI + """ + self.assertCodemod(before, after) diff --git a/libs/cli/tests/test_events.py b/libs/cli/tests/unit_tests/test_events.py similarity index 100% rename from libs/cli/tests/test_events.py rename to libs/cli/tests/unit_tests/test_events.py diff --git a/libs/cli/tests/test_utils.py b/libs/cli/tests/unit_tests/test_utils.py similarity index 100% rename from libs/cli/tests/test_utils.py rename to libs/cli/tests/unit_tests/test_utils.py