From c7a489ae0ddb993aa2ce9235936b52ae9687f4f4 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Thu, 10 Aug 2023 07:24:12 +0100 Subject: [PATCH 001/175] Small improvements for tracer and debug output of runnables (#8683) --- libs/langchain/langchain/callbacks/tracers/stdout.py | 11 +++++++---- libs/langchain/langchain/schema/prompt.py | 7 +++++++ libs/langchain/langchain/schema/runnable.py | 10 ++++++++-- .../schema/__snapshots__/test_runnable.ambr | 12 ++++++------ 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/libs/langchain/langchain/callbacks/tracers/stdout.py b/libs/langchain/langchain/callbacks/tracers/stdout.py index 2c082196d..71e38c0e5 100644 --- a/libs/langchain/langchain/callbacks/tracers/stdout.py +++ b/libs/langchain/langchain/callbacks/tracers/stdout.py @@ -37,7 +37,7 @@ def elapsed(run: Any) -> str: elapsed_time = run.end_time - run.start_time milliseconds = elapsed_time.total_seconds() * 1000 if milliseconds < 1000: - return f"{milliseconds}ms" + return f"{milliseconds:.0f}ms" return f"{(milliseconds / 1000):.2f}s" @@ -78,28 +78,31 @@ class FunctionCallbackHandler(BaseTracer): # logging methods def _on_chain_start(self, run: Run) -> None: crumbs = self.get_breadcrumbs(run) + run_type = run.run_type.capitalize() self.function_callback( f"{get_colored_text('[chain/start]', color='green')} " - + get_bolded_text(f"[{crumbs}] Entering Chain run with input:\n") + + get_bolded_text(f"[{crumbs}] Entering {run_type} run with input:\n") + f"{try_json_stringify(run.inputs, '[inputs]')}" ) def _on_chain_end(self, run: Run) -> None: crumbs = self.get_breadcrumbs(run) + run_type = run.run_type.capitalize() self.function_callback( f"{get_colored_text('[chain/end]', color='blue')} " + get_bolded_text( - f"[{crumbs}] [{elapsed(run)}] Exiting Chain run with output:\n" + f"[{crumbs}] [{elapsed(run)}] Exiting {run_type} run with output:\n" ) + f"{try_json_stringify(run.outputs, '[outputs]')}" ) def _on_chain_error(self, run: Run) -> None: crumbs = self.get_breadcrumbs(run) + run_type = run.run_type.capitalize() self.function_callback( f"{get_colored_text('[chain/error]', color='red')} " + get_bolded_text( - f"[{crumbs}] [{elapsed(run)}] Chain run errored with error:\n" + f"[{crumbs}] [{elapsed(run)}] {run_type} run errored with error:\n" ) + f"{try_json_stringify(run.error, '[error]')}" ) diff --git a/libs/langchain/langchain/schema/prompt.py b/libs/langchain/langchain/schema/prompt.py index d273af0db..951954c5f 100644 --- a/libs/langchain/langchain/schema/prompt.py +++ b/libs/langchain/langchain/schema/prompt.py @@ -14,6 +14,13 @@ class PromptValue(Serializable, ABC): ChatModel inputs. """ + @property + def lc_serializable(self) -> bool: + """ + Return whether or not the class is serializable. + """ + return True + @abstractmethod def to_string(self) -> str: """Return prompt value as string.""" diff --git a/libs/langchain/langchain/schema/runnable.py b/libs/langchain/langchain/schema/runnable.py index 7ed4a739e..d96896168 100644 --- a/libs/langchain/langchain/schema/runnable.py +++ b/libs/langchain/langchain/schema/runnable.py @@ -279,8 +279,11 @@ class Runnable(Generic[Input, Output], ABC): run_manager.on_chain_error(e) raise else: + output_for_tracer = dumpd(output) run_manager.on_chain_end( - output if isinstance(output, dict) else {"output": output} + output_for_tracer + if isinstance(output_for_tracer, dict) + else {"output": output_for_tracer} ) return output @@ -312,8 +315,11 @@ class Runnable(Generic[Input, Output], ABC): await run_manager.on_chain_error(e) raise else: + output_for_tracer = dumpd(output) await run_manager.on_chain_end( - output if isinstance(output, dict) else {"output": output} + output_for_tracer + if isinstance(output_for_tracer, dict) + else {"output": output_for_tracer} ) return output diff --git a/libs/langchain/tests/unit_tests/schema/__snapshots__/test_runnable.ambr b/libs/langchain/tests/unit_tests/schema/__snapshots__/test_runnable.ambr index fcedca63c..1943588c0 100644 --- a/libs/langchain/tests/unit_tests/schema/__snapshots__/test_runnable.ambr +++ b/libs/langchain/tests/unit_tests/schema/__snapshots__/test_runnable.ambr @@ -447,7 +447,7 @@ # --- # name: test_combining_sequences.3 list([ - Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'middle': [{'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'RunnableLambda']}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nicer assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}], 'last': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ['baz', 'qux']}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ChatPromptValue(messages=[SystemMessage(content='You are a nice assistant.', additional_kwargs={}), HumanMessage(content='What is your name?', additional_kwargs={}, example=False)])}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo, bar'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo, bar', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'foo, bar'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000003'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='foo, bar', additional_kwargs={}, example=False)}, outputs={'output': ['foo', 'bar']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000004'), name='RunnableLambda', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'RunnableLambda']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': ['foo', 'bar']}, outputs={'question': 'foobar'}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000005'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nicer assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'foobar'}, outputs={'output': ChatPromptValue(messages=[SystemMessage(content='You are a nicer assistant.', additional_kwargs={}), HumanMessage(content='foobar', additional_kwargs={}, example=False)])}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000006'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['baz, qux'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nicer assistant.\nHuman: foobar']}, outputs={'generations': [[{'text': 'baz, qux', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'baz, qux'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000007'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='baz, qux', additional_kwargs={}, example=False)}, outputs={'output': ['baz', 'qux']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), + Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'middle': [{'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'RunnableLambda']}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nicer assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}], 'last': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ['baz', 'qux']}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nice assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'What is your name?', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo, bar'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo, bar', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'foo, bar'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000003'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='foo, bar', additional_kwargs={}, example=False)}, outputs={'output': ['foo', 'bar']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000004'), name='RunnableLambda', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'RunnableLambda']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': ['foo', 'bar']}, outputs={'question': 'foobar'}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000005'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nicer assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'foobar'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nicer assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'foobar', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000006'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['baz, qux'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nicer assistant.\nHuman: foobar']}, outputs={'generations': [[{'text': 'baz, qux', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'baz, qux'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000007'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='baz, qux', additional_kwargs={}, example=False)}, outputs={'output': ['baz', 'qux']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), ]) # --- # name: test_prompt_with_chat_model @@ -550,7 +550,7 @@ # --- # name: test_prompt_with_chat_model.1 list([ - Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'last': {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': AIMessage(content='foo', additional_kwargs={}, example=False)}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ChatPromptValue(messages=[SystemMessage(content='You are a nice assistant.', additional_kwargs={}), HumanMessage(content='What is your name?', additional_kwargs={}, example=False)])}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'foo'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), + Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'last': {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': AIMessage(content='foo', additional_kwargs={}, example=False)}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nice assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'What is your name?', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'foo'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), ]) # --- # name: test_prompt_with_chat_model_and_parser @@ -666,7 +666,7 @@ # --- # name: test_prompt_with_chat_model_and_parser.1 list([ - Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'middle': [{'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}], 'last': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ['foo', 'bar']}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ChatPromptValue(messages=[SystemMessage(content='You are a nice assistant.', additional_kwargs={}), HumanMessage(content='What is your name?', additional_kwargs={}, example=False)])}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo, bar'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo, bar', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'foo, bar'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000003'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='foo, bar', additional_kwargs={}, example=False)}, outputs={'output': ['foo', 'bar']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), + Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'middle': [{'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}], 'last': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ['foo', 'bar']}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nice assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'What is your name?', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo, bar'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo, bar', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'foo, bar'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000003'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='foo, bar', additional_kwargs={}, example=False)}, outputs={'output': ['foo', 'bar']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), ]) # --- # name: test_prompt_with_llm @@ -769,13 +769,13 @@ # --- # name: test_prompt_with_llm.1 list([ - Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'last': {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': 'foo'}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ChatPromptValue(messages=[SystemMessage(content='You are a nice assistant.', additional_kwargs={}), HumanMessage(content='What is your name?', additional_kwargs={}, example=False)])}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListLLM', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo', 'bar'], '_type': 'fake-list', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo', 'generation_info': None}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), + Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'last': {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': 'foo'}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nice assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'What is your name?', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListLLM', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo', 'bar'], '_type': 'fake-list', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo', 'generation_info': None}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), ]) # --- # name: test_prompt_with_llm.2 list([ - Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'last': {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': 'bar'}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ChatPromptValue(messages=[SystemMessage(content='You are a nice assistant.', additional_kwargs={}), HumanMessage(content='What is your name?', additional_kwargs={}, example=False)])}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListLLM', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo', 'bar'], '_type': 'fake-list', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'bar', 'generation_info': None}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), - Run(id=UUID('00000000-0000-4000-8000-000000000003'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'last': {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your favorite color?'}, outputs={'output': 'foo'}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000004'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your favorite color?'}, outputs={'output': ChatPromptValue(messages=[SystemMessage(content='You are a nice assistant.', additional_kwargs={}), HumanMessage(content='What is your favorite color?', additional_kwargs={}, example=False)])}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000003'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000005'), name='FakeListLLM', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo', 'bar'], '_type': 'fake-list', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your favorite color?']}, outputs={'generations': [[{'text': 'foo', 'generation_info': None}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000003'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), + Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'last': {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': 'bar'}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nice assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'What is your name?', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListLLM', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo', 'bar'], '_type': 'fake-list', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'bar', 'generation_info': None}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), + Run(id=UUID('00000000-0000-4000-8000-000000000003'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'last': {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your favorite color?'}, outputs={'output': 'foo'}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000004'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your favorite color?'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nice assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'What is your favorite color?', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000003'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000005'), name='FakeListLLM', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo', 'bar'], '_type': 'fake-list', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your favorite color?']}, outputs={'generations': [[{'text': 'foo', 'generation_info': None}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000003'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), ]) # --- # name: test_router_runnable From 434a96415bebbf44ad4f4601224ff57fb1d9f745 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 00:56:37 -0700 Subject: [PATCH 002/175] make runnable dir (#9016) Co-authored-by: Nuno Campos --- .../langchain/schema/runnable/__init__.py | 24 ++ .../schema/{runnable.py => runnable/base.py} | 283 ++++-------------- .../langchain/schema/runnable/config.py | 27 ++ .../langchain/schema/runnable/passthrough.py | 23 ++ .../langchain/schema/runnable/router.py | 184 ++++++++++++ .../langchain/schema/runnable/utils.py | 18 ++ .../schema/__snapshots__/test_runnable.ambr | 263 +++++++++++++++- .../tests/unit_tests/schema/test_runnable.py | 3 +- 8 files changed, 590 insertions(+), 235 deletions(-) create mode 100644 libs/langchain/langchain/schema/runnable/__init__.py rename libs/langchain/langchain/schema/{runnable.py => runnable/base.py} (84%) create mode 100644 libs/langchain/langchain/schema/runnable/config.py create mode 100644 libs/langchain/langchain/schema/runnable/passthrough.py create mode 100644 libs/langchain/langchain/schema/runnable/router.py create mode 100644 libs/langchain/langchain/schema/runnable/utils.py diff --git a/libs/langchain/langchain/schema/runnable/__init__.py b/libs/langchain/langchain/schema/runnable/__init__.py new file mode 100644 index 000000000..0dbabd157 --- /dev/null +++ b/libs/langchain/langchain/schema/runnable/__init__.py @@ -0,0 +1,24 @@ +from langchain.schema.runnable.base import ( + Runnable, + RunnableBinding, + RunnableLambda, + RunnableMap, + RunnableSequence, + RunnableWithFallbacks, +) +from langchain.schema.runnable.config import RunnableConfig +from langchain.schema.runnable.passthrough import RunnablePassthrough +from langchain.schema.runnable.router import RouterInput, RouterRunnable + +__all__ = [ + "RouterInput", + "RouterRunnable", + "Runnable", + "RunnableBinding", + "RunnableConfig", + "RunnableMap", + "RunnableLambda", + "RunnablePassthrough", + "RunnableSequence", + "RunnableWithFallbacks", +] diff --git a/libs/langchain/langchain/schema/runnable.py b/libs/langchain/langchain/schema/runnable/base.py similarity index 84% rename from libs/langchain/langchain/schema/runnable.py rename to libs/langchain/langchain/schema/runnable/base.py index d96896168..95344cdf0 100644 --- a/libs/langchain/langchain/schema/runnable.py +++ b/libs/langchain/langchain/schema/runnable/base.py @@ -9,7 +9,6 @@ from typing import ( AsyncIterator, Awaitable, Callable, - Coroutine, Dict, Generic, Iterator, @@ -19,7 +18,6 @@ from typing import ( Sequence, Tuple, Type, - TypedDict, TypeVar, Union, cast, @@ -27,48 +25,15 @@ from typing import ( from pydantic import Field -from langchain.callbacks.base import BaseCallbackManager, Callbacks +from langchain.callbacks.base import BaseCallbackManager from langchain.load.dump import dumpd from langchain.load.serializable import Serializable +from langchain.schema.runnable.config import RunnableConfig +from langchain.schema.runnable.utils import ( + gather_with_concurrency, +) from langchain.utils.aiter import atee, py_anext - -async def _gated_coro(semaphore: asyncio.Semaphore, coro: Coroutine) -> Any: - async with semaphore: - return await coro - - -async def _gather_with_concurrency(n: Union[int, None], *coros: Coroutine) -> list: - if n is None: - return await asyncio.gather(*coros) - - semaphore = asyncio.Semaphore(n) - - return await asyncio.gather(*(_gated_coro(semaphore, c) for c in coros)) - - -class RunnableConfig(TypedDict, total=False): - """Configuration for a Runnable.""" - - tags: List[str] - """ - Tags for this call and any sub-calls (eg. a Chain calling an LLM). - You can use these to filter calls. - """ - - metadata: Dict[str, Any] - """ - Metadata for this call and any sub-calls (eg. a Chain calling an LLM). - Keys should be strings, values should be JSON-serializable. - """ - - callbacks: Callbacks - """ - Callbacks for this call and any sub-calls (eg. a Chain calling an LLM). - Tags are passed to all callbacks, metadata is passed to handle*Start callbacks. - """ - - Input = TypeVar("Input") # Output type should implement __concat__, as eg str, list, dict do Output = TypeVar("Output") @@ -87,7 +52,7 @@ class Runnable(Generic[Input, Output], ABC): Mapping[str, Union[Runnable[Any, Other], Callable[[Any], Other]]], ], ) -> RunnableSequence[Input, Other]: - return RunnableSequence(first=self, last=_coerce_to_runnable(other)) + return RunnableSequence(first=self, last=coerce_to_runnable(other)) def __ror__( self, @@ -97,7 +62,7 @@ class Runnable(Generic[Input, Output], ABC): Mapping[str, Union[Runnable[Other, Any], Callable[[Other], Any]]], ], ) -> RunnableSequence[Other, Output]: - return RunnableSequence(first=_coerce_to_runnable(other), last=self) + return RunnableSequence(first=coerce_to_runnable(other), last=self) """ --- Public API --- """ @@ -150,7 +115,7 @@ class Runnable(Generic[Input, Output], ABC): configs = self._get_config_list(config, len(inputs)) coros = map(self.ainvoke, inputs, configs) - return await _gather_with_concurrency(max_concurrency, *coros) + return await gather_with_concurrency(max_concurrency, *coros) def stream( self, input: Input, config: Optional[RunnableConfig] = None @@ -478,6 +443,14 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): class Config: arbitrary_types_allowed = True + @property + def lc_serializable(self) -> bool: + return True + + @property + def lc_namespace(self) -> List[str]: + return self.__class__.__module__.split(".")[:-1] + @property def runnables(self) -> Iterator[Runnable[Input, Output]]: yield self.runnable @@ -506,7 +479,7 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): try: output = runnable.invoke( input, - _patch_config(config, run_manager.get_child()), + patch_config(config, run_manager.get_child()), ) except self.exceptions_to_handle as e: if first_error is None: @@ -550,7 +523,7 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): try: output = await runnable.ainvoke( input, - _patch_config(config, run_manager.get_child()), + patch_config(config, run_manager.get_child()), ) except self.exceptions_to_handle as e: if first_error is None: @@ -606,7 +579,7 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): inputs, [ # each step a child run of the corresponding root run - _patch_config(config, rm.get_child()) + patch_config(config, rm.get_child()) for rm, config in zip(run_managers, configs) ], max_concurrency=max_concurrency, @@ -673,7 +646,7 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): inputs, [ # each step a child run of the corresponding root run - _patch_config(config, rm.get_child()) + patch_config(config, rm.get_child()) for rm, config in zip(run_managers, configs) ], max_concurrency=max_concurrency, @@ -716,6 +689,10 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): def lc_serializable(self) -> bool: return True + @property + def lc_namespace(self) -> List[str]: + return self.__class__.__module__.split(".")[:-1] + class Config: arbitrary_types_allowed = True @@ -737,7 +714,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): return RunnableSequence( first=self.first, middle=self.middle + [self.last], - last=_coerce_to_runnable(other), + last=coerce_to_runnable(other), ) def __ror__( @@ -756,7 +733,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): ) else: return RunnableSequence( - first=_coerce_to_runnable(other), + first=coerce_to_runnable(other), middle=[self.first] + self.middle, last=self.last, ) @@ -786,7 +763,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): input = step.invoke( input, # mark each step as a child run - _patch_config(config, run_manager.get_child()), + patch_config(config, run_manager.get_child()), ) # finish the root run except (KeyboardInterrupt, Exception) as e: @@ -825,7 +802,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): input = await step.ainvoke( input, # mark each step as a child run - _patch_config(config, run_manager.get_child()), + patch_config(config, run_manager.get_child()), ) # finish the root run except (KeyboardInterrupt, Exception) as e: @@ -875,7 +852,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): inputs, [ # each step a child run of the corresponding root run - _patch_config(config, rm.get_child()) + patch_config(config, rm.get_child()) for rm, config in zip(run_managers, configs) ], max_concurrency=max_concurrency, @@ -934,7 +911,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): inputs, [ # each step a child run of the corresponding root run - _patch_config(config, rm.get_child()) + patch_config(config, rm.get_child()) for rm, config in zip(run_managers, configs) ], max_concurrency=max_concurrency, @@ -990,7 +967,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): input = step.invoke( input, # mark each step as a child run - _patch_config(config, run_manager.get_child()), + patch_config(config, run_manager.get_child()), ) except (KeyboardInterrupt, Exception) as e: run_manager.on_chain_error(e) @@ -1002,12 +979,12 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): try: # stream the first of the last steps with non-streaming input final_pipeline = steps[streaming_start_index].stream( - input, _patch_config(config, run_manager.get_child()) + input, patch_config(config, run_manager.get_child()) ) # stream the rest of the last steps with streaming input for step in steps[streaming_start_index + 1 :]: final_pipeline = step.transform( - final_pipeline, _patch_config(config, run_manager.get_child()) + final_pipeline, patch_config(config, run_manager.get_child()) ) for output in final_pipeline: yield output @@ -1067,7 +1044,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): input = await step.ainvoke( input, # mark each step as a child run - _patch_config(config, run_manager.get_child()), + patch_config(config, run_manager.get_child()), ) except (KeyboardInterrupt, Exception) as e: await run_manager.on_chain_error(e) @@ -1079,12 +1056,12 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): try: # stream the first of the last steps with non-streaming input final_pipeline = steps[streaming_start_index].astream( - input, _patch_config(config, run_manager.get_child()) + input, patch_config(config, run_manager.get_child()) ) # stream the rest of the last steps with streaming input for step in steps[streaming_start_index + 1 :]: final_pipeline = step.atransform( - final_pipeline, _patch_config(config, run_manager.get_child()) + final_pipeline, patch_config(config, run_manager.get_child()) ) async for output in final_pipeline: yield output @@ -1128,14 +1105,16 @@ class RunnableMap(Serializable, Runnable[Input, Dict[str, Any]]): ], ], ) -> None: - super().__init__( - steps={key: _coerce_to_runnable(r) for key, r in steps.items()} - ) + super().__init__(steps={key: coerce_to_runnable(r) for key, r in steps.items()}) @property def lc_serializable(self) -> bool: return True + @property + def lc_namespace(self) -> List[str]: + return self.__class__.__module__.split(".")[:-1] + class Config: arbitrary_types_allowed = True @@ -1168,7 +1147,7 @@ class RunnableMap(Serializable, Runnable[Input, Dict[str, Any]]): step.invoke, input, # mark each step as a child run - _patch_config(config, run_manager.get_child()), + patch_config(config, run_manager.get_child()), ) for step in steps.values() ] @@ -1211,7 +1190,7 @@ class RunnableMap(Serializable, Runnable[Input, Dict[str, Any]]): step.ainvoke( input, # mark each step as a child run - _patch_config(config, run_manager.get_child()), + patch_config(config, run_manager.get_child()), ) for step in steps.values() ) @@ -1250,19 +1229,6 @@ class RunnableLambda(Runnable[Input, Output]): return self._call_with_config(self.func, input, config) -class RunnablePassthrough(Serializable, Runnable[Input, Input]): - """ - A runnable that passes through the input. - """ - - @property - def lc_serializable(self) -> bool: - return True - - def invoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Input: - return self._call_with_config(lambda x: x, input, config) - - class RunnableBinding(Serializable, Runnable[Input, Output]): """ A runnable that delegates calls to another runnable with a set of kwargs. @@ -1279,6 +1245,10 @@ class RunnableBinding(Serializable, Runnable[Input, Output]): def lc_serializable(self) -> bool: return True + @property + def lc_namespace(self) -> List[str]: + return self.__class__.__module__.split(".")[:-1] + def bind(self, **kwargs: Any) -> Runnable[Input, Output]: return self.__class__(bound=self.bound, kwargs={**self.kwargs, **kwargs}) @@ -1335,160 +1305,7 @@ class RunnableBinding(Serializable, Runnable[Input, Output]): yield item -class RouterInput(TypedDict): - """A Router input. - - Attributes: - key: The key to route on. - input: The input to pass to the selected runnable. - """ - - key: str - input: Any - - -class RouterRunnable( - Serializable, Generic[Input, Output], Runnable[RouterInput, Output] -): - """ - A runnable that routes to a set of runnables based on Input['key']. - Returns the output of the selected runnable. - """ - - runnables: Mapping[str, Runnable[Input, Output]] - - def __init__( - self, - runnables: Mapping[ - str, Union[Runnable[Input, Output], Callable[[Input], Output]] - ], - ) -> None: - super().__init__( - runnables={key: _coerce_to_runnable(r) for key, r in runnables.items()} - ) - - class Config: - arbitrary_types_allowed = True - - @property - def lc_serializable(self) -> bool: - return True - - def __or__( - self, - other: Union[ - Runnable[Any, Other], - Callable[[Any], Other], - Mapping[str, Union[Runnable[Any, Other], Callable[[Any], Other]]], - Mapping[str, Any], - ], - ) -> RunnableSequence[RouterInput, Other]: - return RunnableSequence(first=self, last=_coerce_to_runnable(other)) - - def __ror__( - self, - other: Union[ - Runnable[Other, Any], - Callable[[Any], Other], - Mapping[str, Union[Runnable[Other, Any], Callable[[Other], Any]]], - Mapping[str, Any], - ], - ) -> RunnableSequence[Other, Output]: - return RunnableSequence(first=_coerce_to_runnable(other), last=self) - - def invoke( - self, input: RouterInput, config: Optional[RunnableConfig] = None - ) -> Output: - key = input["key"] - actual_input = input["input"] - if key not in self.runnables: - raise ValueError(f"No runnable associated with key '{key}'") - - runnable = self.runnables[key] - return runnable.invoke(actual_input, config) - - async def ainvoke( - self, input: RouterInput, config: Optional[RunnableConfig] = None - ) -> Output: - key = input["key"] - actual_input = input["input"] - if key not in self.runnables: - raise ValueError(f"No runnable associated with key '{key}'") - - runnable = self.runnables[key] - return await runnable.ainvoke(actual_input, config) - - def batch( - self, - inputs: List[RouterInput], - config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, - *, - max_concurrency: Optional[int] = None, - ) -> List[Output]: - keys = [input["key"] for input in inputs] - actual_inputs = [input["input"] for input in inputs] - if any(key not in self.runnables for key in keys): - raise ValueError("One or more keys do not have a corresponding runnable") - - runnables = [self.runnables[key] for key in keys] - configs = self._get_config_list(config, len(inputs)) - with ThreadPoolExecutor(max_workers=max_concurrency) as executor: - return list( - executor.map( - lambda runnable, input, config: runnable.invoke(input, config), - runnables, - actual_inputs, - configs, - ) - ) - - async def abatch( - self, - inputs: List[RouterInput], - config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, - *, - max_concurrency: Optional[int] = None, - ) -> List[Output]: - keys = [input["key"] for input in inputs] - actual_inputs = [input["input"] for input in inputs] - if any(key not in self.runnables for key in keys): - raise ValueError("One or more keys do not have a corresponding runnable") - - runnables = [self.runnables[key] for key in keys] - configs = self._get_config_list(config, len(inputs)) - return await _gather_with_concurrency( - max_concurrency, - *( - runnable.ainvoke(input, config) - for runnable, input, config in zip(runnables, actual_inputs, configs) - ), - ) - - def stream( - self, input: RouterInput, config: Optional[RunnableConfig] = None - ) -> Iterator[Output]: - key = input["key"] - actual_input = input["input"] - if key not in self.runnables: - raise ValueError(f"No runnable associated with key '{key}'") - - runnable = self.runnables[key] - yield from runnable.stream(actual_input, config) - - async def astream( - self, input: RouterInput, config: Optional[RunnableConfig] = None - ) -> AsyncIterator[Output]: - key = input["key"] - actual_input = input["input"] - if key not in self.runnables: - raise ValueError(f"No runnable associated with key '{key}'") - - runnable = self.runnables[key] - async for output in runnable.astream(actual_input, config): - yield output - - -def _patch_config( +def patch_config( config: RunnableConfig, callback_manager: BaseCallbackManager ) -> RunnableConfig: config = config.copy() @@ -1496,7 +1313,7 @@ def _patch_config( return config -def _coerce_to_runnable( +def coerce_to_runnable( thing: Union[ Runnable[Input, Output], Callable[[Input], Output], @@ -1508,7 +1325,7 @@ def _coerce_to_runnable( elif callable(thing): return RunnableLambda(thing) elif isinstance(thing, dict): - runnables = {key: _coerce_to_runnable(r) for key, r in thing.items()} + runnables = {key: coerce_to_runnable(r) for key, r in thing.items()} return cast(Runnable[Input, Output], RunnableMap(steps=runnables)) else: raise TypeError( diff --git a/libs/langchain/langchain/schema/runnable/config.py b/libs/langchain/langchain/schema/runnable/config.py new file mode 100644 index 000000000..715b79fd9 --- /dev/null +++ b/libs/langchain/langchain/schema/runnable/config.py @@ -0,0 +1,27 @@ +from __future__ import annotations + +from typing import Any, Dict, List, TypedDict + +from langchain.callbacks.base import Callbacks + + +class RunnableConfig(TypedDict, total=False): + """Configuration for a Runnable.""" + + tags: List[str] + """ + Tags for this call and any sub-calls (eg. a Chain calling an LLM). + You can use these to filter calls. + """ + + metadata: Dict[str, Any] + """ + Metadata for this call and any sub-calls (eg. a Chain calling an LLM). + Keys should be strings, values should be JSON-serializable. + """ + + callbacks: Callbacks + """ + Callbacks for this call and any sub-calls (eg. a Chain calling an LLM). + Tags are passed to all callbacks, metadata is passed to handle*Start callbacks. + """ diff --git a/libs/langchain/langchain/schema/runnable/passthrough.py b/libs/langchain/langchain/schema/runnable/passthrough.py new file mode 100644 index 000000000..782c06c59 --- /dev/null +++ b/libs/langchain/langchain/schema/runnable/passthrough.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from typing import List, Optional + +from langchain.load.serializable import Serializable +from langchain.schema.runnable.base import Input, Runnable, RunnableConfig + + +class RunnablePassthrough(Serializable, Runnable[Input, Input]): + """ + A runnable that passes through the input. + """ + + @property + def lc_serializable(self) -> bool: + return True + + @property + def lc_namespace(self) -> List[str]: + return self.__class__.__module__.split(".")[:-1] + + def invoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Input: + return self._call_with_config(lambda x: x, input, config) diff --git a/libs/langchain/langchain/schema/runnable/router.py b/libs/langchain/langchain/schema/runnable/router.py new file mode 100644 index 000000000..a844a0197 --- /dev/null +++ b/libs/langchain/langchain/schema/runnable/router.py @@ -0,0 +1,184 @@ +from __future__ import annotations + +from concurrent.futures import ThreadPoolExecutor +from typing import ( + Any, + AsyncIterator, + Callable, + Generic, + Iterator, + List, + Mapping, + Optional, + TypedDict, + Union, +) + +from langchain.load.serializable import Serializable +from langchain.schema.runnable.base import ( + Input, + Other, + Output, + Runnable, + RunnableSequence, + coerce_to_runnable, +) +from langchain.schema.runnable.config import RunnableConfig +from langchain.schema.runnable.utils import gather_with_concurrency + + +class RouterInput(TypedDict): + """A Router input. + + Attributes: + key: The key to route on. + input: The input to pass to the selected runnable. + """ + + key: str + input: Any + + +class RouterRunnable( + Serializable, Generic[Input, Output], Runnable[RouterInput, Output] +): + """ + A runnable that routes to a set of runnables based on Input['key']. + Returns the output of the selected runnable. + """ + + runnables: Mapping[str, Runnable[Input, Output]] + + def __init__( + self, + runnables: Mapping[ + str, Union[Runnable[Input, Output], Callable[[Input], Output]] + ], + ) -> None: + super().__init__( + runnables={key: coerce_to_runnable(r) for key, r in runnables.items()} + ) + + class Config: + arbitrary_types_allowed = True + + @property + def lc_serializable(self) -> bool: + return True + + @property + def lc_namespace(self) -> List[str]: + return self.__class__.__module__.split(".")[:-1] + + def __or__( + self, + other: Union[ + Runnable[Any, Other], + Callable[[Any], Other], + Mapping[str, Union[Runnable[Any, Other], Callable[[Any], Other]]], + Mapping[str, Any], + ], + ) -> RunnableSequence[RouterInput, Other]: + return RunnableSequence(first=self, last=coerce_to_runnable(other)) + + def __ror__( + self, + other: Union[ + Runnable[Other, Any], + Callable[[Any], Other], + Mapping[str, Union[Runnable[Other, Any], Callable[[Other], Any]]], + Mapping[str, Any], + ], + ) -> RunnableSequence[Other, Output]: + return RunnableSequence(first=coerce_to_runnable(other), last=self) + + def invoke( + self, input: RouterInput, config: Optional[RunnableConfig] = None + ) -> Output: + key = input["key"] + actual_input = input["input"] + if key not in self.runnables: + raise ValueError(f"No runnable associated with key '{key}'") + + runnable = self.runnables[key] + return runnable.invoke(actual_input, config) + + async def ainvoke( + self, input: RouterInput, config: Optional[RunnableConfig] = None + ) -> Output: + key = input["key"] + actual_input = input["input"] + if key not in self.runnables: + raise ValueError(f"No runnable associated with key '{key}'") + + runnable = self.runnables[key] + return await runnable.ainvoke(actual_input, config) + + def batch( + self, + inputs: List[RouterInput], + config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, + *, + max_concurrency: Optional[int] = None, + ) -> List[Output]: + keys = [input["key"] for input in inputs] + actual_inputs = [input["input"] for input in inputs] + if any(key not in self.runnables for key in keys): + raise ValueError("One or more keys do not have a corresponding runnable") + + runnables = [self.runnables[key] for key in keys] + configs = self._get_config_list(config, len(inputs)) + with ThreadPoolExecutor(max_workers=max_concurrency) as executor: + return list( + executor.map( + lambda runnable, input, config: runnable.invoke(input, config), + runnables, + actual_inputs, + configs, + ) + ) + + async def abatch( + self, + inputs: List[RouterInput], + config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, + *, + max_concurrency: Optional[int] = None, + ) -> List[Output]: + keys = [input["key"] for input in inputs] + actual_inputs = [input["input"] for input in inputs] + if any(key not in self.runnables for key in keys): + raise ValueError("One or more keys do not have a corresponding runnable") + + runnables = [self.runnables[key] for key in keys] + configs = self._get_config_list(config, len(inputs)) + return await gather_with_concurrency( + max_concurrency, + *( + runnable.ainvoke(input, config) + for runnable, input, config in zip(runnables, actual_inputs, configs) + ), + ) + + def stream( + self, input: RouterInput, config: Optional[RunnableConfig] = None + ) -> Iterator[Output]: + key = input["key"] + actual_input = input["input"] + if key not in self.runnables: + raise ValueError(f"No runnable associated with key '{key}'") + + runnable = self.runnables[key] + yield from runnable.stream(actual_input, config) + + async def astream( + self, input: RouterInput, config: Optional[RunnableConfig] = None + ) -> AsyncIterator[Output]: + key = input["key"] + actual_input = input["input"] + if key not in self.runnables: + raise ValueError(f"No runnable associated with key '{key}'") + + runnable = self.runnables[key] + async for output in runnable.astream(actual_input, config): + yield output diff --git a/libs/langchain/langchain/schema/runnable/utils.py b/libs/langchain/langchain/schema/runnable/utils.py new file mode 100644 index 000000000..0602413bd --- /dev/null +++ b/libs/langchain/langchain/schema/runnable/utils.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +import asyncio +from typing import Any, Coroutine, Union + + +async def gated_coro(semaphore: asyncio.Semaphore, coro: Coroutine) -> Any: + async with semaphore: + return await coro + + +async def gather_with_concurrency(n: Union[int, None], *coros: Coroutine) -> list: + if n is None: + return await asyncio.gather(*coros) + + semaphore = asyncio.Semaphore(n) + + return await asyncio.gather(*(gated_coro(semaphore, c) for c in coros)) diff --git a/libs/langchain/tests/unit_tests/schema/__snapshots__/test_runnable.ambr b/libs/langchain/tests/unit_tests/schema/__snapshots__/test_runnable.ambr index 1943588c0..e9de20115 100644 --- a/libs/langchain/tests/unit_tests/schema/__snapshots__/test_runnable.ambr +++ b/libs/langchain/tests/unit_tests/schema/__snapshots__/test_runnable.ambr @@ -129,6 +129,7 @@ "langchain", "schema", "runnable", + "base", "RunnableLambda" ] }, @@ -344,6 +345,7 @@ "langchain", "schema", "runnable", + "base", "RunnableLambda" ] }, @@ -447,9 +449,260 @@ # --- # name: test_combining_sequences.3 list([ - Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'middle': [{'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'RunnableLambda']}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nicer assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}], 'last': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ['baz', 'qux']}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nice assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'What is your name?', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo, bar'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo, bar', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'foo, bar'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000003'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='foo, bar', additional_kwargs={}, example=False)}, outputs={'output': ['foo', 'bar']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000004'), name='RunnableLambda', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'RunnableLambda']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': ['foo', 'bar']}, outputs={'question': 'foobar'}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000005'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nicer assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'foobar'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nicer assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'foobar', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000006'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['baz, qux'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nicer assistant.\nHuman: foobar']}, outputs={'generations': [[{'text': 'baz, qux', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'baz, qux'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000007'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='baz, qux', additional_kwargs={}, example=False)}, outputs={'output': ['baz', 'qux']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), + Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, 'middle': [{'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'base', 'RunnableLambda']}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nicer assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}], 'last': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ['baz', 'qux']}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nice assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'What is your name?', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo, bar'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo, bar', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'foo, bar'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000003'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='foo, bar', additional_kwargs={}, example=False)}, outputs={'output': ['foo', 'bar']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000004'), name='RunnableLambda', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'base', 'RunnableLambda']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': ['foo', 'bar']}, outputs={'question': 'foobar'}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000005'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nicer assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}]}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'foobar'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nicer assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'foobar', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000006'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type=, end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['baz, qux'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nicer assistant.\nHuman: foobar']}, outputs={'generations': [[{'text': 'baz, qux', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'baz, qux'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000007'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='baz, qux', additional_kwargs={}, example=False)}, outputs={'output': ['baz', 'qux']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), ]) # --- +# name: test_llm_with_fallbacks[llm_chain_with_fallbacks] + ''' + { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableSequence" + ], + "kwargs": { + "first": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableMap" + ], + "kwargs": { + "steps": { + "buz": { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "schema", + "runnable", + "base", + "RunnableLambda" + ] + } + } + } + }, + "last": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableWithFallbacks" + ], + "kwargs": { + "runnable": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableSequence" + ], + "kwargs": { + "first": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "prompt", + "PromptTemplate" + ], + "kwargs": { + "input_variables": [ + "buz" + ], + "template": "what did baz say to {buz}", + "template_format": "f-string", + "partial_variables": {} + } + }, + "last": { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "llms", + "fake", + "FakeListLLM" + ] + } + } + }, + "fallbacks": [ + { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableSequence" + ], + "kwargs": { + "first": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "prompt", + "PromptTemplate" + ], + "kwargs": { + "input_variables": [ + "buz" + ], + "template": "what did baz say to {buz}", + "template_format": "f-string", + "partial_variables": {} + } + }, + "last": { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "llms", + "fake", + "FakeListLLM" + ] + } + } + } + ], + "exceptions_to_handle": [ + { + "lc": 1, + "type": "not_implemented", + "id": [ + "builtins", + "Exception" + ] + } + ] + } + } + } + } + ''' +# --- +# name: test_llm_with_fallbacks[llm_with_fallbacks] + ''' + { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableWithFallbacks" + ], + "kwargs": { + "runnable": { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "llms", + "fake", + "FakeListLLM" + ] + }, + "fallbacks": [ + { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "llms", + "fake", + "FakeListLLM" + ] + } + ], + "exceptions_to_handle": [ + { + "lc": 1, + "type": "not_implemented", + "id": [ + "builtins", + "Exception" + ] + } + ] + } + } + ''' +# --- +# name: test_llm_with_fallbacks[llm_with_multi_fallbacks] + ''' + { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableWithFallbacks" + ], + "kwargs": { + "runnable": { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "llms", + "fake", + "FakeListLLM" + ] + }, + "fallbacks": [ + { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "llms", + "fake", + "FakeListLLM" + ] + }, + { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "llms", + "fake", + "FakeListLLM" + ] + } + ], + "exceptions_to_handle": [ + { + "lc": 1, + "type": "not_implemented", + "id": [ + "builtins", + "Exception" + ] + } + ] + } + } + ''' +# --- # name: test_prompt_with_chat_model ''' { @@ -808,6 +1061,7 @@ "langchain", "schema", "runnable", + "base", "RunnableLambda" ] }, @@ -829,6 +1083,7 @@ "langchain", "schema", "runnable", + "base", "RunnableLambda" ] } @@ -1045,6 +1300,7 @@ "langchain", "schema", "runnable", + "base", "RunnableLambda" ] } @@ -1067,6 +1323,7 @@ "langchain", "schema", "runnable", + "base", "RunnableLambda" ] }, @@ -1087,6 +1344,7 @@ "langchain", "schema", "runnable", + "base", "RunnableLambda" ] } @@ -1285,6 +1543,7 @@ "langchain", "schema", "runnable", + "base", "RunnableLambda" ] } @@ -1419,6 +1678,7 @@ "langchain", "schema", "runnable", + "base", "RunnableLambda" ] } @@ -1478,6 +1738,7 @@ "langchain", "schema", "runnable", + "base", "RunnableLambda" ] } diff --git a/libs/langchain/tests/unit_tests/schema/test_runnable.py b/libs/langchain/tests/unit_tests/schema/test_runnable.py index 4ae6eb1cf..4ef0e33d7 100644 --- a/libs/langchain/tests/unit_tests/schema/test_runnable.py +++ b/libs/langchain/tests/unit_tests/schema/test_runnable.py @@ -839,7 +839,7 @@ def llm_chain_with_fallbacks() -> RunnableSequence: ) @pytest.mark.asyncio async def test_llm_with_fallbacks( - runnable: RunnableWithFallbacks, request: Any + runnable: RunnableWithFallbacks, request: Any, snapshot: SnapshotAssertion ) -> None: runnable = request.getfixturevalue(runnable) assert runnable.invoke("hello") == "bar" @@ -848,3 +848,4 @@ async def test_llm_with_fallbacks( assert await runnable.ainvoke("hello") == "bar" assert await runnable.abatch(["hi", "hey", "bye"]) == ["bar"] * 3 assert list(await runnable.ainvoke("hello")) == list("bar") + assert dumps(runnable, pretty=True) == snapshot From 2c7297d243992d74317fee102dc64cffe7f57bf5 Mon Sep 17 00:00:00 2001 From: Hiroshige Umino Date: Thu, 10 Aug 2023 23:39:01 +0900 Subject: [PATCH 003/175] Fix a broken code block display (#9034) - Description: Fix a broken code block in this page: https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/ - Issue: N/A - Dependencies: None - Tag maintainer: @baskaryan - Twitter handle: yaotti --- .../modules/model_io/prompts/prompt_templates/get_started.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/snippets/modules/model_io/prompts/prompt_templates/get_started.mdx b/docs/snippets/modules/model_io/prompts/prompt_templates/get_started.mdx index d8a234d4d..dddaf86f4 100644 --- a/docs/snippets/modules/model_io/prompts/prompt_templates/get_started.mdx +++ b/docs/snippets/modules/model_io/prompts/prompt_templates/get_started.mdx @@ -106,9 +106,11 @@ llm(template.format_messages(text='i dont like eating tasty things.')) ``` + ``` AIMessage(content='I absolutely adore indulging in delicious treats!', additional_kwargs={}, example=False) ``` + This provides you with a lot of flexibility in how you construct your chat prompts. From dfb93dd2b537bcdd8a7bc092a88fee66cf75a076 Mon Sep 17 00:00:00 2001 From: Luca Foppiano Date: Thu, 10 Aug 2023 23:47:22 +0900 Subject: [PATCH 004/175] Improved grobid documentation (#9025) - Description: Improvement in the Grobid loader documentation, typos and suggesting to use the docker image instead of installing Grobid in local (the documentation was also limited to Mac, while docker allow running in any platform) - Tag maintainer: @rlancemartin, @eyurtsev - Twitter handle: @whitenoise --- .../document_loaders/grobid.ipynb | 60 ++----------------- docs/extras/integrations/providers/grobid.mdx | 30 +++++----- 2 files changed, 21 insertions(+), 69 deletions(-) diff --git a/docs/extras/integrations/document_loaders/grobid.ipynb b/docs/extras/integrations/document_loaders/grobid.ipynb index 96bf6b8dd..83ffffcc2 100644 --- a/docs/extras/integrations/document_loaders/grobid.ipynb +++ b/docs/extras/integrations/document_loaders/grobid.ipynb @@ -9,66 +9,16 @@ "\n", "GROBID is a machine learning library for extracting, parsing, and re-structuring raw documents.\n", "\n", - "It is particularly good for sturctured PDFs, like academic papers.\n", + "It is designed and expected to be used to parse academic papers, where it works particularly well. Note: if the articles supplied to Grobid are large documents (e.g. dissertations) exceeding a certain number of elements, they might not be processed. \n", "\n", - "This loader uses GROBIB to parse PDFs into `Documents` that retain metadata associated with the section of text.\n", + "This loader uses Grobid to parse PDFs into `Documents` that retain metadata associated with the section of text.\n", "\n", "---\n", + "The best approach is to install Grobid via docker, see https://grobid.readthedocs.io/en/latest/Grobid-docker/. \n", "\n", - "For users on `Mac` - \n", + "(Note: additional instructions can be found [here](https://python.langchain.com/docs/extras/integrations/providers/grobid.mdx).)\n", "\n", - "(Note: additional instructions can be found [here](https://python.langchain.com/docs/ecosystem/integrations/grobid.mdx).)\n", - "\n", - "Install Java (Apple Silicon):\n", - "```\n", - "$ arch -arm64 brew install openjdk@11\n", - "$ brew --prefix openjdk@11\n", - "/opt/homebrew/opt/openjdk@ 11\n", - "```\n", - "\n", - "In `~/.zshrc`:\n", - "```\n", - "export JAVA_HOME=/opt/homebrew/opt/openjdk@11\n", - "export PATH=$JAVA_HOME/bin:$PATH\n", - "```\n", - "\n", - "Then, in Terminal:\n", - "```\n", - "$ source ~/.zshrc\n", - "```\n", - "\n", - "Confirm install:\n", - "```\n", - "$ which java\n", - "/opt/homebrew/opt/openjdk@11/bin/java\n", - "$ java -version \n", - "openjdk version \"11.0.19\" 2023-04-18\n", - "OpenJDK Runtime Environment Homebrew (build 11.0.19+0)\n", - "OpenJDK 64-Bit Server VM Homebrew (build 11.0.19+0, mixed mode)\n", - "```\n", - "\n", - "Then, get [Grobid](https://grobid.readthedocs.io/en/latest/Install-Grobid/#getting-grobid):\n", - "```\n", - "$ curl -LO https://github.com/kermitt2/grobid/archive/0.7.3.zip\n", - "$ unzip 0.7.3.zip\n", - "```\n", - " \n", - "Build\n", - "```\n", - "$ ./gradlew clean install\n", - "```\n", - "\n", - "Then, run the server:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "2d8992fc", - "metadata": {}, - "outputs": [], - "source": [ - "! get_ipython().system_raw('nohup ./gradlew run > grobid.log 2>&1 &')" + "Once grobid is up-and-running you can interact as described below. \n" ] }, { diff --git a/docs/extras/integrations/providers/grobid.mdx b/docs/extras/integrations/providers/grobid.mdx index 6a24e68ba..4fd52abe2 100644 --- a/docs/extras/integrations/providers/grobid.mdx +++ b/docs/extras/integrations/providers/grobid.mdx @@ -1,22 +1,23 @@ # Grobid +GROBID is a machine learning library for extracting, parsing, and re-structuring raw documents. + +It is designed and expected to be used to parse academic papers, where it works particularly well. + +*Note*: if the articles supplied to Grobid are large documents (e.g. dissertations) exceeding a certain number +of elements, they might not be processed. + This page covers how to use the Grobid to parse articles for LangChain. -It is separated into two parts: installation and running the server -## Installation and Setup -#Ensure You have Java installed -!apt-get install -y openjdk-11-jdk -q -!update-alternatives --set java /usr/lib/jvm/java-11-openjdk-amd64/bin/java +## Installation +The grobid installation is described in details in https://grobid.readthedocs.io/en/latest/Install-Grobid/. +However, it is probably easier and less troublesome to run grobid through a docker container, +as documented [here](https://grobid.readthedocs.io/en/latest/Grobid-docker/). -#Clone and install the Grobid Repo -import os -!git clone https://github.com/kermitt2/grobid.git -os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-11-openjdk-amd64" -os.chdir('grobid') -!./gradlew clean install +## Use Grobid with LangChain -#Run the server, -get_ipython().system_raw('nohup ./gradlew run > grobid.log 2>&1 &') +Once grobid is installed and up and running (you can check by accessing it http://localhost:8070), +you're ready to go. You can now use the GrobidParser to produce documents ```python @@ -41,4 +42,5 @@ loader = GenericLoader.from_filesystem( ) docs = loader.load() ``` -Chunk metadata will include bboxes although these are a bit funky to parse, see https://grobid.readthedocs.io/en/latest/Coordinates-in-PDF/ +Chunk metadata will include Bounding Boxes. Although these are a bit funky to parse, +they are explained in https://grobid.readthedocs.io/en/latest/Coordinates-in-PDF/ \ No newline at end of file From d21333d710a525a6e27368ded1128b439cde1370 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Thu, 10 Aug 2023 10:48:35 -0400 Subject: [PATCH 005/175] Add redis storage (#8980) Add a redis implementation of a BaseStore --- libs/langchain/langchain/storage/redis.py | 115 ++++++++++++++++++ .../integration_tests/storage/__init__.py | 0 .../integration_tests/storage/test_redis.py | 105 ++++++++++++++++ .../tests/unit_tests/storage/test_redis.py | 11 ++ 4 files changed, 231 insertions(+) create mode 100644 libs/langchain/langchain/storage/redis.py create mode 100644 libs/langchain/tests/integration_tests/storage/__init__.py create mode 100644 libs/langchain/tests/integration_tests/storage/test_redis.py create mode 100644 libs/langchain/tests/unit_tests/storage/test_redis.py diff --git a/libs/langchain/langchain/storage/redis.py b/libs/langchain/langchain/storage/redis.py new file mode 100644 index 000000000..900144aa2 --- /dev/null +++ b/libs/langchain/langchain/storage/redis.py @@ -0,0 +1,115 @@ +from typing import Any, Iterator, List, Optional, Sequence, Tuple, cast + +from langchain.schema import BaseStore + + +class RedisStore(BaseStore[str, bytes]): + """BaseStore implementation using Redis as the underlying store. + + Examples: + Create a RedisStore instance and perform operations on it: + + .. code-block:: python + + # Instantiate the RedisStore with a Redis connection + from langchain.storage import RedisStore + from langchain.vectorstores.redis import get_client + + client = get_client('redis://localhost:6379') + redis_store = RedisStore(client) + + # Set values for keys + redis_store.mset([("key1", b"value1"), ("key2", b"value2")]) + + # Get values for keys + values = redis_store.mget(["key1", "key2"]) + # [b"value1", b"value2"] + + # Delete keys + redis_store.mdelete(["key1"]) + + # Iterate over keys + for key in redis_store.yield_keys(): + print(key) + """ + + def __init__( + self, client: Any, *, ttl: Optional[int] = None, namespace: Optional[str] = None + ) -> None: + """Initialize the RedisStore with a Redis connection. + + Args: + client: A Redis connection instance + ttl: time to expire keys in seconds if provided, + if None keys will never expire + namespace: if provided, all keys will be prefixed with this namespace + """ + try: + from redis import Redis + except ImportError as e: + raise ImportError( + "The RedisStore requires the redis library to be installed. " + "pip install redis" + ) from e + + if not isinstance(client, Redis): + raise TypeError( + f"Expected Redis client, got {type(client).__name__} instead." + ) + + self.client = client + + if not isinstance(ttl, int) and ttl is not None: + raise TypeError(f"Expected int or None, got {type(ttl)} instead.") + + self.ttl = ttl + self.namespace = namespace + self.namespace_delimiter = "/" + + def _get_prefixed_key(self, key: str) -> str: + """Get the key with the namespace prefix. + + Args: + key (str): The original key. + + Returns: + str: The key with the namespace prefix. + """ + if self.namespace: + return f"{self.namespace}{self.namespace_delimiter}{key}" + return key + + def mget(self, keys: Sequence[str]) -> List[Optional[bytes]]: + """Get the values associated with the given keys.""" + return cast( + List[Optional[bytes]], + self.client.mget([self._get_prefixed_key(key) for key in keys]), + ) + + def mset(self, key_value_pairs: Sequence[Tuple[str, bytes]]) -> None: + """Set the given key-value pairs.""" + pipe = self.client.pipeline() + + for key, value in key_value_pairs: + pipe.set(self._get_prefixed_key(key), value, ex=self.ttl) + pipe.execute() + + def mdelete(self, keys: Sequence[str]) -> None: + """Delete the given keys.""" + _keys = [self._get_prefixed_key(key) for key in keys] + self.client.delete(*_keys) + + def yield_keys(self, *, prefix: Optional[str] = None) -> Iterator[str]: + """Yield keys in the store.""" + if prefix: + pattern = self._get_prefixed_key(prefix) + else: + pattern = self._get_prefixed_key("*") + scan_iter = cast(Iterator[bytes], self.client.scan_iter(match=pattern)) + for key in scan_iter: + decoded_key = key.decode("utf-8") + if self.namespace: + relative_key = decoded_key[len(self.namespace) + 1 :] + yield relative_key + else: + yield decoded_key diff --git a/libs/langchain/tests/integration_tests/storage/__init__.py b/libs/langchain/tests/integration_tests/storage/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/libs/langchain/tests/integration_tests/storage/test_redis.py b/libs/langchain/tests/integration_tests/storage/test_redis.py new file mode 100644 index 000000000..853028953 --- /dev/null +++ b/libs/langchain/tests/integration_tests/storage/test_redis.py @@ -0,0 +1,105 @@ +"""Implement integration tests for Redis storage.""" +import os +import typing +import uuid +from typing import Any + +import pytest +import redis + +from langchain.storage.redis import RedisStore + +if typing.TYPE_CHECKING: + try: + from redis import Redis + except ImportError: + # Ignoring mypy here to allow assignment of Any to Redis in the event + # that redis is not installed. + Redis = Any # type:ignore +else: + Redis = Any # type:ignore + + +pytest.importorskip("redis") + + +@pytest.fixture +def redis_client() -> Redis: + """Yield redis client.""" + # Using standard port, but protecting against accidental data loss + # by requiring a password. + # This fixture flushes the database! + # The only role of the password is to prevent users from accidentally + # deleting their data. + # The password should establish the identity of the server being. + port = 6379 + password = os.environ.get("REDIS_PASSWORD") or str(uuid.uuid4()) + client = redis.Redis(host="localhost", port=port, password=password, db=0) + try: + client.ping() + except redis.exceptions.ConnectionError: + pytest.skip( + "Redis server is not running or is not accessible. " + "Verify that credentials are correct. " + ) + # ATTENTION: This will delete all keys in the database! + client.flushdb() + return client + + +def test_mget(redis_client: Redis) -> None: + """Test mget method.""" + store = RedisStore(redis_client, ttl=None) + keys = ["key1", "key2"] + redis_client.mset({"key1": b"value1", "key2": b"value2"}) + result = store.mget(keys) + assert result == [b"value1", b"value2"] + + +def test_mset(redis_client: Redis) -> None: + """Test that multiple keys can be set.""" + store = RedisStore(redis_client, ttl=None) + key_value_pairs = [("key1", b"value1"), ("key2", b"value2")] + store.mset(key_value_pairs) + result = redis_client.mget(["key1", "key2"]) + assert result == [b"value1", b"value2"] + + +def test_mdelete(redis_client: Redis) -> None: + """Test that deletion works as expected.""" + store = RedisStore(redis_client, ttl=None) + keys = ["key1", "key2"] + redis_client.mset({"key1": b"value1", "key2": b"value2"}) + store.mdelete(keys) + result = redis_client.mget(keys) + assert result == [None, None] + + +def test_yield_keys(redis_client: Redis) -> None: + store = RedisStore(redis_client, ttl=None) + redis_client.mset({"key1": b"value1", "key2": b"value2"}) + assert sorted(store.yield_keys()) == ["key1", "key2"] + assert sorted(store.yield_keys(prefix="key*")) == ["key1", "key2"] + assert sorted(store.yield_keys(prefix="lang*")) == [] + + +def test_namespace(redis_client: Redis) -> None: + """Test that a namespace is prepended to all keys properly.""" + store = RedisStore(redis_client, ttl=None, namespace="meow") + key_value_pairs = [("key1", b"value1"), ("key2", b"value2")] + store.mset(key_value_pairs) + + assert sorted(redis_client.scan_iter("*")) == [ + b"meow/key1", + b"meow/key2", + ] + + store.mdelete(["key1"]) + + assert sorted(redis_client.scan_iter("*")) == [ + b"meow/key2", + ] + + assert list(store.yield_keys()) == ["key2"] + assert list(store.yield_keys(prefix="key*")) == ["key2"] + assert list(store.yield_keys(prefix="key1")) == [] diff --git a/libs/langchain/tests/unit_tests/storage/test_redis.py b/libs/langchain/tests/unit_tests/storage/test_redis.py new file mode 100644 index 000000000..ff882ed8d --- /dev/null +++ b/libs/langchain/tests/unit_tests/storage/test_redis.py @@ -0,0 +1,11 @@ +"""Light weight unit test that attempts to import RedisStore. + +The actual code is tested in integration tests. + +This test is intended to catch errors in the import process. +""" + + +def test_import_storage() -> None: + """Attempt to import storage modules.""" + from langchain.storage.redis import RedisStore # noqa From 2380492c8e28cb2deec53a733b0419b43aea60fd Mon Sep 17 00:00:00 2001 From: Lance Martin <122662504+rlancemartin@users.noreply.github.com> Date: Thu, 10 Aug 2023 07:52:54 -0700 Subject: [PATCH 006/175] API use case (#8546) Co-authored-by: Bagatur --- .../docs_skeleton/docs/use_cases/apis/api.mdx | 9 - docs/docs_skeleton/static/img/api_chain.png | Bin 0 -> 482545 bytes .../static/img/api_chain_response.png | Bin 0 -> 532035 bytes .../static/img/api_function_call.png | Bin 0 -> 100007 bytes .../docs_skeleton/static/img/api_use_case.png | Bin 0 -> 120022 bytes docs/extras/use_cases/apis.ipynb | 423 ++ docs/extras/use_cases/apis/index.mdx | 24 - docs/extras/use_cases/apis/llm_requests.ipynb | 123 - .../extras/use_cases/apis/openai_openapi.yaml | 3650 ----------------- docs/extras/use_cases/apis/openapi.ipynb | 583 --- .../use_cases/apis/openapi_openai.ipynb | 249 -- docs/snippets/modules/chains/popular/api.mdx | 105 - 12 files changed, 423 insertions(+), 4743 deletions(-) delete mode 100644 docs/docs_skeleton/docs/use_cases/apis/api.mdx create mode 100644 docs/docs_skeleton/static/img/api_chain.png create mode 100644 docs/docs_skeleton/static/img/api_chain_response.png create mode 100644 docs/docs_skeleton/static/img/api_function_call.png create mode 100644 docs/docs_skeleton/static/img/api_use_case.png create mode 100644 docs/extras/use_cases/apis.ipynb delete mode 100644 docs/extras/use_cases/apis/index.mdx delete mode 100644 docs/extras/use_cases/apis/llm_requests.ipynb delete mode 100644 docs/extras/use_cases/apis/openai_openapi.yaml delete mode 100644 docs/extras/use_cases/apis/openapi.ipynb delete mode 100644 docs/extras/use_cases/apis/openapi_openai.ipynb delete mode 100644 docs/snippets/modules/chains/popular/api.mdx diff --git a/docs/docs_skeleton/docs/use_cases/apis/api.mdx b/docs/docs_skeleton/docs/use_cases/apis/api.mdx deleted file mode 100644 index 7760ab04a..000000000 --- a/docs/docs_skeleton/docs/use_cases/apis/api.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -sidebar_position: 0 ---- -# API chains -APIChain enables using LLMs to interact with APIs to retrieve relevant information. Construct the chain by providing a question relevant to the provided API documentation. - -import Example from "@snippets/modules/chains/popular/api.mdx" - - diff --git a/docs/docs_skeleton/static/img/api_chain.png b/docs/docs_skeleton/static/img/api_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..f296056498e08666d5c539464900c3c5119826b0 GIT binary patch literal 482545 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
gLj{8BKMG*qbQa=dcQ| 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

Uy~NgPJXa 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 VVz#6bmMg%I<^vto()%_q{}+o=>Hq)$ literal 0 HcmV?d00001 diff --git a/docs/docs_skeleton/static/img/api_chain_response.png b/docs/docs_skeleton/static/img/api_chain_response.png new file mode 100644 index 0000000000000000000000000000000000000000..9b3103a9e35173a398e0ae8d4c501718917eb3dd GIT binary patch literal 532035 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 g^Q+8ng7Y5G?mZ40xivX3FkGcaDzihVW-($ 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

77&e)I8wns~T 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%0A)0#Wu7_ZV7X??oTv>8^hnc#q+ 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 GKK@^@gu*uf literal 0 HcmV?d00001 diff --git a/docs/docs_skeleton/static/img/api_function_call.png b/docs/docs_skeleton/static/img/api_function_call.png new file mode 100644 index 0000000000000000000000000000000000000000..82f151afe1c222b2a85343cf1f4d87bee79d06f3 GIT binary patch literal 100007 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 literal 0 HcmV?d00001 diff --git a/docs/docs_skeleton/static/img/api_use_case.png b/docs/docs_skeleton/static/img/api_use_case.png new file mode 100644 index 0000000000000000000000000000000000000000..f2fa0cdb7aca7d878adf745946e90c4776d9d982 GIT binary patch literal 120022 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 literal 0 HcmV?d00001 diff --git a/docs/extras/use_cases/apis.ipynb b/docs/extras/use_cases/apis.ipynb new file mode 100644 index 000000000..598d100e0 --- /dev/null +++ b/docs/extras/use_cases/apis.ipynb @@ -0,0 +1,423 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a15e6a18", + "metadata": {}, + "source": [ + "# Interacting with APIs\n", + "\n", + "[![Open In Collab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/langchain-ai/langchain/blob/master/docs/extras/use_cases/apis.ipynb)\n", + "\n", + "## Use case \n", + "\n", + "Suppose you want an LLM to interact with external APIs.\n", + "\n", + "This can be very useful for retrieving context for the LLM to utilize.\n", + "\n", + "And, more generally, it allows us to interact with APIs using natural langugage! \n", + " \n", + "\n", + "## Overview\n", + "\n", + "There are two primary ways to interface LLMs with external APIs:\n", + " \n", + "* `Functions`: For example, [OpenAI functions](https://platform.openai.com/docs/guides/gpt/function-calling) is one popular means of doing this.\n", + "* `LLM-generated interface`: Use an LLM with access to API documentation to create an interface.\n", + "\n", + "![Image description](/img/api_use_case.png)" + ] + }, + { + "cell_type": "markdown", + "id": "abbd82f0", + "metadata": {}, + "source": [ + "## Quickstart \n", + "\n", + "Many APIs already are compatible with OpenAI function calling.\n", + "\n", + "For example, [Klarna](https://www.klarna.com/international/press/klarna-brings-smoooth-shopping-to-chatgpt/) has a YAML file that describes its API and allows OpenAI to interact with it:\n", + "\n", + "```\n", + "https://www.klarna.com/us/shopping/public/openai/v0/api-docs/\n", + "```\n", + "\n", + "Other options include:\n", + "\n", + "* [Speak](https://api.speak.com/openapi.yaml) for translation\n", + "* [XKCD](https://gist.githubusercontent.com/roaldnefs/053e505b2b7a807290908fe9aa3e1f00/raw/0a212622ebfef501163f91e23803552411ed00e4/openapi.yaml) for comics\n", + "\n", + "We can supply the specification to `get_openapi_chain` directly in order to query the API with OpenAI functions:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5a218fcc", + "metadata": {}, + "outputs": [], + "source": [ + "pip install langchain openai \n", + "\n", + "# Set env var OPENAI_API_KEY or load from a .env file:\n", + "# import dotenv\n", + "# dotenv.load_env()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "30b780e3", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Attempting to load an OpenAPI 3.0.1 spec. This may result in degraded performance. Convert your OpenAPI spec to 3.1.* spec for better support.\n" + ] + }, + { + "data": { + "text/plain": [ + "{'query': \"What are some options for a men's large blue button down shirt\",\n", + " 'response': {'products': [{'name': 'Cubavera Four Pocket Guayabera Shirt',\n", + " 'url': 'https://www.klarna.com/us/shopping/pl/cl10001/3202055522/Clothing/Cubavera-Four-Pocket-Guayabera-Shirt/?utm_source=openai&ref-site=openai_plugin',\n", + " 'price': '$13.50',\n", + " 'attributes': ['Material:Polyester,Cotton',\n", + " 'Target Group:Man',\n", + " 'Color:Red,White,Blue,Black',\n", + " 'Properties:Pockets',\n", + " 'Pattern:Solid Color',\n", + " 'Size (Small-Large):S,XL,L,M,XXL']},\n", + " {'name': 'Polo Ralph Lauren Plaid Short Sleeve Button-down Oxford Shirt',\n", + " 'url': 'https://www.klarna.com/us/shopping/pl/cl10001/3207163438/Clothing/Polo-Ralph-Lauren-Plaid-Short-Sleeve-Button-down-Oxford-Shirt/?utm_source=openai&ref-site=openai_plugin',\n", + " 'price': '$52.20',\n", + " 'attributes': ['Material:Cotton',\n", + " 'Target Group:Man',\n", + " 'Color:Red,Blue,Multicolor',\n", + " 'Size (Small-Large):S,XL,L,M,XXL']},\n", + " {'name': 'Brixton Bowery Flannel Shirt',\n", + " 'url': 'https://www.klarna.com/us/shopping/pl/cl10001/3202331096/Clothing/Brixton-Bowery-Flannel-Shirt/?utm_source=openai&ref-site=openai_plugin',\n", + " 'price': '$27.48',\n", + " 'attributes': ['Material:Cotton',\n", + " 'Target Group:Man',\n", + " 'Color:Gray,Blue,Black,Orange',\n", + " 'Properties:Pockets',\n", + " 'Pattern:Checkered',\n", + " 'Size (Small-Large):XL,3XL,4XL,5XL,L,M,XXL']},\n", + " {'name': 'Vineyard Vines Gingham On-The-Go brrr Classic Fit Shirt Crystal',\n", + " 'url': 'https://www.klarna.com/us/shopping/pl/cl10001/3201938510/Clothing/Vineyard-Vines-Gingham-On-The-Go-brrr-Classic-Fit-Shirt-Crystal/?utm_source=openai&ref-site=openai_plugin',\n", + " 'price': '$80.64',\n", + " 'attributes': ['Material:Cotton',\n", + " 'Target Group:Man',\n", + " 'Color:Blue',\n", + " 'Size (Small-Large):XL,XS,L,M']},\n", + " {'name': \"Carhartt Men's Loose Fit Midweight Short Sleeve Plaid Shirt\",\n", + " 'url': 'https://www.klarna.com/us/shopping/pl/cl10001/3201826024/Clothing/Carhartt-Men-s-Loose-Fit-Midweight-Short-Sleeve-Plaid-Shirt/?utm_source=openai&ref-site=openai_plugin',\n", + " 'price': '$17.99',\n", + " 'attributes': ['Material:Cotton',\n", + " 'Target Group:Man',\n", + " 'Color:Red,Brown,Blue,Green',\n", + " 'Properties:Pockets',\n", + " 'Pattern:Checkered',\n", + " 'Size (Small-Large):S,XL,L,M']}]}}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain.chains.openai_functions.openapi import get_openapi_chain\n", + "chain = get_openapi_chain(\"https://www.klarna.com/us/shopping/public/openai/v0/api-docs/\")\n", + "chain(\"What are some options for a men's large blue button down shirt\")" + ] + }, + { + "cell_type": "markdown", + "id": "9162c91c", + "metadata": {}, + "source": [ + "## Functions \n", + "\n", + "We can unpack what is hapening when we use the funtions to calls external APIs.\n", + "\n", + "Let's look at the [LangSmith trace](https://smith.langchain.com/public/76a58b85-193f-4eb7-ba40-747f0d5dd56e/r):\n", + "\n", + "* See [here](https://github.com/langchain-ai/langchain/blob/7fc07ba5df99b9fa8bef837b0fafa220bc5c932c/libs/langchain/langchain/chains/openai_functions/openapi.py#L279C9-L279C19) that we call the OpenAI LLM with the provided API spec:\n", + "\n", + "```\n", + "https://www.klarna.com/us/shopping/public/openai/v0/api-docs/\n", + "```\n", + "\n", + "* The prompt then tells the LLM to use the API spec wiith input question:\n", + "\n", + "```\n", + "Use the provided API's to respond to this user query:\n", + "What are some options for a men's large blue button down shirt\n", + "```\n", + "\n", + "* The LLM returns the parameters for the function call `productsUsingGET`, which is [specified in the provided API spec](https://www.klarna.com/us/shopping/public/openai/v0/api-docs/):\n", + "```\n", + "function_call:\n", + " name: productsUsingGET\n", + " arguments: |-\n", + " {\n", + " \"params\": {\n", + " \"countryCode\": \"US\",\n", + " \"q\": \"men's large blue button down shirt\",\n", + " \"size\": 5,\n", + " \"min_price\": 0,\n", + " \"max_price\": 100\n", + " }\n", + " }\n", + " ```\n", + " \n", + "![Image description](/img/api_function_call.png)\n", + " \n", + "* This `Dict` above split and the [API is called here](https://github.com/langchain-ai/langchain/blob/7fc07ba5df99b9fa8bef837b0fafa220bc5c932c/libs/langchain/langchain/chains/openai_functions/openapi.py#L215)." + ] + }, + { + "cell_type": "markdown", + "id": "1fe49a0d", + "metadata": {}, + "source": [ + "## API Chain \n", + "\n", + "We can also build our own interface to external APIs using the `APIChain` and provided API documentation." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "4ef0c3d0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new APIChain chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3mhttps://api.open-meteo.com/v1/forecast?latitude=48.1351&longitude=11.5820&hourly=temperature_2m&temperature_unit=fahrenheit¤t_weather=true\u001b[0m\n", + "\u001b[33;1m\u001b[1;3m{\"latitude\":48.14,\"longitude\":11.58,\"generationtime_ms\":1.0769367218017578,\"utc_offset_seconds\":0,\"timezone\":\"GMT\",\"timezone_abbreviation\":\"GMT\",\"elevation\":521.0,\"current_weather\":{\"temperature\":52.9,\"windspeed\":12.6,\"winddirection\":239.0,\"weathercode\":3,\"is_day\":0,\"time\":\"2023-08-07T22:00\"},\"hourly_units\":{\"time\":\"iso8601\",\"temperature_2m\":\"°F\"},\"hourly\":{\"time\":[\"2023-08-07T00:00\",\"2023-08-07T01:00\",\"2023-08-07T02:00\",\"2023-08-07T03:00\",\"2023-08-07T04:00\",\"2023-08-07T05:00\",\"2023-08-07T06:00\",\"2023-08-07T07:00\",\"2023-08-07T08:00\",\"2023-08-07T09:00\",\"2023-08-07T10:00\",\"2023-08-07T11:00\",\"2023-08-07T12:00\",\"2023-08-07T13:00\",\"2023-08-07T14:00\",\"2023-08-07T15:00\",\"2023-08-07T16:00\",\"2023-08-07T17:00\",\"2023-08-07T18:00\",\"2023-08-07T19:00\",\"2023-08-07T20:00\",\"2023-08-07T21:00\",\"2023-08-07T22:00\",\"2023-08-07T23:00\",\"2023-08-08T00:00\",\"2023-08-08T01:00\",\"2023-08-08T02:00\",\"2023-08-08T03:00\",\"2023-08-08T04:00\",\"2023-08-08T05:00\",\"2023-08-08T06:00\",\"2023-08-08T07:00\",\"2023-08-08T08:00\",\"2023-08-08T09:00\",\"2023-08-08T10:00\",\"2023-08-08T11:00\",\"2023-08-08T12:00\",\"2023-08-08T13:00\",\"2023-08-08T14:00\",\"2023-08-08T15:00\",\"2023-08-08T16:00\",\"2023-08-08T17:00\",\"2023-08-08T18:00\",\"2023-08-08T19:00\",\"2023-08-08T20:00\",\"2023-08-08T21:00\",\"2023-08-08T22:00\",\"2023-08-08T23:00\",\"2023-08-09T00:00\",\"2023-08-09T01:00\",\"2023-08-09T02:00\",\"2023-08-09T03:00\",\"2023-08-09T04:00\",\"2023-08-09T05:00\",\"2023-08-09T06:00\",\"2023-08-09T07:00\",\"2023-08-09T08:00\",\"2023-08-09T09:00\",\"2023-08-09T10:00\",\"2023-08-09T11:00\",\"2023-08-09T12:00\",\"2023-08-09T13:00\",\"2023-08-09T14:00\",\"2023-08-09T15:00\",\"2023-08-09T16:00\",\"2023-08-09T17:00\",\"2023-08-09T18:00\",\"2023-08-09T19:00\",\"2023-08-09T20:00\",\"2023-08-09T21:00\",\"2023-08-09T22:00\",\"2023-08-09T23:00\",\"2023-08-10T00:00\",\"2023-08-10T01:00\",\"2023-08-10T02:00\",\"2023-08-10T03:00\",\"2023-08-10T04:00\",\"2023-08-10T05:00\",\"2023-08-10T06:00\",\"2023-08-10T07:00\",\"2023-08-10T08:00\",\"2023-08-10T09:00\",\"2023-08-10T10:00\",\"2023-08-10T11:00\",\"2023-08-10T12:00\",\"2023-08-10T13:00\",\"2023-08-10T14:00\",\"2023-08-10T15:00\",\"2023-08-10T16:00\",\"2023-08-10T17:00\",\"2023-08-10T18:00\",\"2023-08-10T19:00\",\"2023-08-10T20:00\",\"2023-08-10T21:00\",\"2023-08-10T22:00\",\"2023-08-10T23:00\",\"2023-08-11T00:00\",\"2023-08-11T01:00\",\"2023-08-11T02:00\",\"2023-08-11T03:00\",\"2023-08-11T04:00\",\"2023-08-11T05:00\",\"2023-08-11T06:00\",\"2023-08-11T07:00\",\"2023-08-11T08:00\",\"2023-08-11T09:00\",\"2023-08-11T10:00\",\"2023-08-11T11:00\",\"2023-08-11T12:00\",\"2023-08-11T13:00\",\"2023-08-11T14:00\",\"2023-08-11T15:00\",\"2023-08-11T16:00\",\"2023-08-11T17:00\",\"2023-08-11T18:00\",\"2023-08-11T19:00\",\"2023-08-11T20:00\",\"2023-08-11T21:00\",\"2023-08-11T22:00\",\"2023-08-11T23:00\",\"2023-08-12T00:00\",\"2023-08-12T01:00\",\"2023-08-12T02:00\",\"2023-08-12T03:00\",\"2023-08-12T04:00\",\"2023-08-12T05:00\",\"2023-08-12T06:00\",\"2023-08-12T07:00\",\"2023-08-12T08:00\",\"2023-08-12T09:00\",\"2023-08-12T10:00\",\"2023-08-12T11:00\",\"2023-08-12T12:00\",\"2023-08-12T13:00\",\"2023-08-12T14:00\",\"2023-08-12T15:00\",\"2023-08-12T16:00\",\"2023-08-12T17:00\",\"2023-08-12T18:00\",\"2023-08-12T19:00\",\"2023-08-12T20:00\",\"2023-08-12T21:00\",\"2023-08-12T22:00\",\"2023-08-12T23:00\",\"2023-08-13T00:00\",\"2023-08-13T01:00\",\"2023-08-13T02:00\",\"2023-08-13T03:00\",\"2023-08-13T04:00\",\"2023-08-13T05:00\",\"2023-08-13T06:00\",\"2023-08-13T07:00\",\"2023-08-13T08:00\",\"2023-08-13T09:00\",\"2023-08-13T10:00\",\"2023-08-13T11:00\",\"2023-08-13T12:00\",\"2023-08-13T13:00\",\"2023-08-13T14:00\",\"2023-08-13T15:00\",\"2023-08-13T16:00\",\"2023-08-13T17:00\",\"2023-08-13T18:00\",\"2023-08-13T19:00\",\"2023-08-13T20:00\",\"2023-08-13T21:00\",\"2023-08-13T22:00\",\"2023-08-13T23:00\"],\"temperature_2m\":[53.0,51.2,50.9,50.4,50.7,51.3,51.7,52.9,54.3,56.1,57.4,59.3,59.1,60.7,59.7,58.8,58.8,57.8,56.6,55.3,53.9,52.7,52.9,53.2,52.0,51.8,51.3,50.7,50.8,51.5,53.9,57.7,61.2,63.2,64.7,66.6,67.5,67.0,68.7,68.7,67.9,66.2,64.4,61.4,59.8,58.9,57.9,56.3,55.7,55.3,55.5,55.4,55.7,56.5,57.6,58.8,59.7,59.1,58.9,60.6,59.9,59.8,59.9,61.7,63.2,63.6,62.3,58.9,57.3,57.1,57.0,56.5,56.2,56.0,55.3,54.7,54.4,55.2,57.8,60.7,63.0,65.3,66.9,68.2,70.1,72.1,72.6,71.4,69.7,68.6,66.2,63.6,61.8,60.6,59.6,58.9,58.0,57.1,56.3,56.2,56.7,57.9,59.9,63.7,68.4,72.4,75.0,76.8,78.0,78.7,78.9,78.4,76.9,74.8,72.5,70.1,67.6,65.6,64.4,63.9,63.4,62.7,62.2,62.1,62.5,63.4,65.1,68.0,71.7,74.8,76.8,78.2,79.1,79.6,79.7,79.2,77.6,75.3,73.7,68.6,66.8,65.3,64.2,63.4,62.6,61.7,60.9,60.6,60.9,61.6,63.2,65.9,69.3,72.2,74.4,76.2,77.6,78.8,79.6,79.6,78.4,76.4,74.3,72.3,70.4,68.7,67.6,66.8]}}\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "' The current temperature in Munich, Germany is 52.9°F.'" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain.llms import OpenAI\n", + "from langchain.chains import APIChain\n", + "from langchain.chains.api import open_meteo_docs\n", + "llm = OpenAI(temperature=0)\n", + "chain = APIChain.from_llm_and_api_docs(llm, open_meteo_docs.OPEN_METEO_DOCS, verbose=True)\n", + "chain.run('What is the weather like right now in Munich, Germany in degrees Fahrenheit?')" + ] + }, + { + "cell_type": "markdown", + "id": "5b179318", + "metadata": {}, + "source": [ + "Note that we supply information about the API:" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "a9e03cc2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'BASE URL: https://api.open-meteo.com/\\n\\nAPI Documentation\\nThe API endpoint /v1/forecast accepts a geographical coordinate, a list of weather variables and responds with a JSON hourly weather forecast for 7 days. Time always starts at 0:00 today and contains 168 hours. All URL parameters are listed below:\\n\\nParameter\\tFormat\\tRequired\\tDefault\\tDescription\\nlatitude, longitude\\tFloating point\\tYes\\t\\tGeographical WGS84 coordinate of the location\\nhourly\\tString array\\tNo\\t\\tA list of weather variables which shou'" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "open_meteo_docs.OPEN_METEO_DOCS[0:500]" + ] + }, + { + "cell_type": "markdown", + "id": "3fab7930", + "metadata": {}, + "source": [ + "Under the hood, we do two things:\n", + " \n", + "* `api_request_chain`: Generate an API URL based on the input question and the api_docs\n", + "* `api_answer_chain`: generate a final answer based on the API response\n", + "\n", + "We can look at the [LangSmith trace](https://smith.langchain.com/public/1e0d18ca-0d76-444c-97df-a939a6a815a7/r) to inspect this:\n", + "\n", + "* The `api_request_chain` produces the API url from our question and the API documentation:\n", + "\n", + "![Image description](/img/api_chain.png)\n", + "\n", + "* [Here](https://github.com/langchain-ai/langchain/blob/bbd22b9b761389a5e40fc45b0570e1830aabb707/libs/langchain/langchain/chains/api/base.py#L82) we make the API request with the API url.\n", + "* The `api_answer_chain` takes the response from the API and provides us with a natural langugae response:\n", + "\n", + "![Image description](/img/api_chain_response.png)" + ] + }, + { + "cell_type": "markdown", + "id": "2511f446", + "metadata": {}, + "source": [ + "### Going deeper\n", + "\n", + "**Test with other APIs**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1e1cf418", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "os.environ['TMDB_BEARER_TOKEN'] = \"\"\n", + "from langchain.chains.api import tmdb_docs\n", + "headers = {\"Authorization\": f\"Bearer {os.environ['TMDB_BEARER_TOKEN']}\"}\n", + "chain = APIChain.from_llm_and_api_docs(llm, tmdb_docs.TMDB_DOCS, headers=headers, verbose=True)\n", + "chain.run(\"Search for 'Avatar'\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dd80a717", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from langchain.llms import OpenAI\n", + "from langchain.chains.api import podcast_docs\n", + "from langchain.chains import APIChain\n", + " \n", + "listen_api_key = 'xxx' # Get api key here: https://www.listennotes.com/api/pricing/\n", + "llm = OpenAI(temperature=0)\n", + "headers = {\"X-ListenAPI-Key\": listen_api_key}\n", + "chain = APIChain.from_llm_and_api_docs(llm, podcast_docs.PODCAST_DOCS, headers=headers, verbose=True)\n", + "chain.run(\"Search for 'silicon valley bank' podcast episodes, audio length is more than 30 minutes, return only 1 results\")" + ] + }, + { + "cell_type": "markdown", + "id": "a5939be5", + "metadata": {}, + "source": [ + "**Web requests**\n", + "\n", + "URL requets are such a common use-case that we have the `LLMRequestsChain`, which makes a HTTP GET request. " + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "0b158296", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.llms import OpenAI\n", + "from langchain.prompts import PromptTemplate\n", + "from langchain.chains import LLMRequestsChain, LLMChain" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "d49c33e4", + "metadata": {}, + "outputs": [], + "source": [ + "template = \"\"\"Between >>> and <<< are the raw search result text from google.\n", + "Extract the answer to the question '{query}' or say \"not found\" if the information is not contained.\n", + "Use the format\n", + "Extracted:\n", + ">>> {requests_result} <<<\n", + "Extracted:\"\"\"\n", + "\n", + "PROMPT = PromptTemplate(\n", + " input_variables=[\"query\", \"requests_result\"],\n", + " template=template,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "d0fd4aab", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'query': 'What are the Three (3) biggest countries, and their respective sizes?',\n", + " 'url': 'https://www.google.com/search?q=What+are+the+Three+(3)+biggest+countries,+and+their+respective+sizes?',\n", + " 'output': ' Russia (17,098,242 km²), Canada (9,984,670 km²), China (9,706,961 km²)'}" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chain = LLMRequestsChain(llm_chain=LLMChain(llm=OpenAI(temperature=0), prompt=PROMPT))\n", + "question = \"What are the Three (3) biggest countries, and their respective sizes?\"\n", + "inputs = {\n", + " \"query\": question,\n", + " \"url\": \"https://www.google.com/search?q=\" + question.replace(\" \", \"+\"),\n", + "}\n", + "chain(inputs)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/use_cases/apis/index.mdx b/docs/extras/use_cases/apis/index.mdx deleted file mode 100644 index c5f3c1293..000000000 --- a/docs/extras/use_cases/apis/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Interacting with APIs - -Lots of data and information is stored behind APIs. -This page covers all resources available in LangChain for working with APIs. - -## Chains - -If you are just getting started, and you have relatively simple apis, you should get started with chains. -Chains are a sequence of predetermined steps, so they are good to get started with as they give you more control and let you -understand what is happening better. - -- [API Chain](/docs/use_cases/apis/api.html) - -## Agents - -Agents are more complex, and involve multiple queries to the LLM to understand what to do. -The downside of agents are that you have less control. The upside is that they are more powerful, -which allows you to use them on larger and more complex schemas. - -- [OpenAPI Agent](/docs/integrations/toolkits/openapi.html) diff --git a/docs/extras/use_cases/apis/llm_requests.ipynb b/docs/extras/use_cases/apis/llm_requests.ipynb deleted file mode 100644 index a5bbe64ce..000000000 --- a/docs/extras/use_cases/apis/llm_requests.ipynb +++ /dev/null @@ -1,123 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "dd7ec7af", - "metadata": {}, - "source": [ - "# HTTP request chain\n", - "\n", - "Using the request library to get HTML results from a URL and then an LLM to parse results" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "dd8eae75", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.llms import OpenAI\n", - "from langchain.chains import LLMRequestsChain, LLMChain" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "65bf324e", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.prompts import PromptTemplate\n", - "\n", - "template = \"\"\"Between >>> and <<< are the raw search result text from google.\n", - "Extract the answer to the question '{query}' or say \"not found\" if the information is not contained.\n", - "Use the format\n", - "Extracted:\n", - ">>> {requests_result} <<<\n", - "Extracted:\"\"\"\n", - "\n", - "PROMPT = PromptTemplate(\n", - " input_variables=[\"query\", \"requests_result\"],\n", - " template=template,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "f36ae0d8", - "metadata": {}, - "outputs": [], - "source": [ - "chain = LLMRequestsChain(llm_chain=LLMChain(llm=OpenAI(temperature=0), prompt=PROMPT))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "b5d22d9d", - "metadata": {}, - "outputs": [], - "source": [ - "question = \"What are the Three (3) biggest countries, and their respective sizes?\"\n", - "inputs = {\n", - " \"query\": question,\n", - " \"url\": \"https://www.google.com/search?q=\" + question.replace(\" \", \"+\"),\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "2ea81168", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'query': 'What are the Three (3) biggest countries, and their respective sizes?',\n", - " 'url': 'https://www.google.com/search?q=What+are+the+Three+(3)+biggest+countries,+and+their+respective+sizes?',\n", - " 'output': ' Russia (17,098,242 km²), Canada (9,984,670 km²), United States (9,826,675 km²)'}" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "chain(inputs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "db8f2b6d", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/extras/use_cases/apis/openai_openapi.yaml b/docs/extras/use_cases/apis/openai_openapi.yaml deleted file mode 100644 index 8962cccc7..000000000 --- a/docs/extras/use_cases/apis/openai_openapi.yaml +++ /dev/null @@ -1,3650 +0,0 @@ -openapi: 3.0.0 -info: - title: OpenAI API - description: APIs for sampling from and fine-tuning language models - version: '1.2.0' -servers: - - url: https://api.openai.com/v1 -tags: -- name: OpenAI - description: The OpenAI REST API -paths: - /engines: - get: - operationId: listEngines - deprecated: true - tags: - - OpenAI - summary: Lists the currently available (non-finetuned) models, and provides basic information about each one such as the owner and availability. - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/ListEnginesResponse' - x-oaiMeta: - name: List engines - group: engines - path: list - examples: - curl: | - curl https://api.openai.com/v1/engines \ - -H 'Authorization: Bearer YOUR_API_KEY' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Engine.list() - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.listEngines(); - response: | - { - "data": [ - { - "id": "engine-id-0", - "object": "engine", - "owner": "organization-owner", - "ready": true - }, - { - "id": "engine-id-2", - "object": "engine", - "owner": "organization-owner", - "ready": true - }, - { - "id": "engine-id-3", - "object": "engine", - "owner": "openai", - "ready": false - }, - ], - "object": "list" - } - - /engines/{engine_id}: - get: - operationId: retrieveEngine - deprecated: true - tags: - - OpenAI - summary: Retrieves a model instance, providing basic information about it such as the owner and availability. - parameters: - - in: path - name: engine_id - required: true - schema: - type: string - # ideally this will be an actual ID, so this will always work from browser - example: - davinci - description: &engine_id_description > - The ID of the engine to use for this request - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/Engine' - x-oaiMeta: - name: Retrieve engine - group: engines - path: retrieve - examples: - curl: | - curl https://api.openai.com/v1/engines/VAR_model_id \ - -H 'Authorization: Bearer YOUR_API_KEY' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Engine.retrieve("VAR_model_id") - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.retrieveEngine("VAR_model_id"); - response: | - { - "id": "VAR_model_id", - "object": "engine", - "owner": "openai", - "ready": true - } - - /completions: - post: - operationId: createCompletion - tags: - - OpenAI - summary: Creates a completion for the provided prompt and parameters - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CreateCompletionRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/CreateCompletionResponse' - x-oaiMeta: - name: Create completion - group: completions - path: create - examples: - curl: | - curl https://api.openai.com/v1/completions \ - -H 'Content-Type: application/json' \ - -H 'Authorization: Bearer YOUR_API_KEY' \ - -d '{ - "model": "VAR_model_id", - "prompt": "Say this is a test", - "max_tokens": 7, - "temperature": 0 - }' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Completion.create( - model="VAR_model_id", - prompt="Say this is a test", - max_tokens=7, - temperature=0 - ) - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createCompletion({ - model: "VAR_model_id", - prompt: "Say this is a test", - max_tokens: 7, - temperature: 0, - }); - parameters: | - { - "model": "VAR_model_id", - "prompt": "Say this is a test", - "max_tokens": 7, - "temperature": 0, - "top_p": 1, - "n": 1, - "stream": false, - "logprobs": null, - "stop": "\n" - } - response: | - { - "id": "cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7", - "object": "text_completion", - "created": 1589478378, - "model": "VAR_model_id", - "choices": [ - { - "text": "\n\nThis is indeed a test", - "index": 0, - "logprobs": null, - "finish_reason": "length" - } - ], - "usage": { - "prompt_tokens": 5, - "completion_tokens": 7, - "total_tokens": 12 - } - } - /chat/completions: - post: - operationId: createChatCompletion - tags: - - OpenAI - summary: Creates a completion for the chat message - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CreateChatCompletionRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/CreateChatCompletionResponse' - - x-oaiMeta: - name: Create chat completion - group: chat - path: create - beta: true - examples: - curl: | - curl https://api.openai.com/v1/chat/completions \ - -H 'Content-Type: application/json' \ - -H 'Authorization: Bearer YOUR_API_KEY' \ - -d '{ - "model": "gpt-3.5-turbo", - "messages": [{"role": "user", "content": "Hello!"}] - }' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - - completion = openai.ChatCompletion.create( - model="gpt-3.5-turbo", - messages=[ - {"role": "user", "content": "Hello!"} - ] - ) - - print(completion.choices[0].message) - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - - const completion = await openai.createChatCompletion({ - model: "gpt-3.5-turbo", - messages: [{role: "user", content: "Hello world"}], - }); - console.log(completion.data.choices[0].message); - parameters: | - { - "model": "gpt-3.5-turbo", - "messages": [{"role": "user", "content": "Hello!"}] - } - response: | - { - "id": "chatcmpl-123", - "object": "chat.completion", - "created": 1677652288, - "choices": [{ - "index": 0, - "message": { - "role": "assistant", - "content": "\n\nHello there, how may I assist you today?", - }, - "finish_reason": "stop" - }], - "usage": { - "prompt_tokens": 9, - "completion_tokens": 12, - "total_tokens": 21 - } - } - - /edits: - post: - operationId: createEdit - tags: - - OpenAI - summary: Creates a new edit for the provided input, instruction, and parameters. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CreateEditRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/CreateEditResponse' - x-oaiMeta: - name: Create edit - group: edits - path: create - examples: - curl: | - curl https://api.openai.com/v1/edits \ - -H 'Content-Type: application/json' \ - -H 'Authorization: Bearer YOUR_API_KEY' \ - -d '{ - "model": "VAR_model_id", - "input": "What day of the wek is it?", - "instruction": "Fix the spelling mistakes" - }' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Edit.create( - model="VAR_model_id", - input="What day of the wek is it?", - instruction="Fix the spelling mistakes" - ) - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createEdit({ - model: "VAR_model_id", - input: "What day of the wek is it?", - instruction: "Fix the spelling mistakes", - }); - parameters: | - { - "model": "VAR_model_id", - "input": "What day of the wek is it?", - "instruction": "Fix the spelling mistakes", - } - response: | - { - "object": "edit", - "created": 1589478378, - "choices": [ - { - "text": "What day of the week is it?", - "index": 0, - } - ], - "usage": { - "prompt_tokens": 25, - "completion_tokens": 32, - "total_tokens": 57 - } - } - - /images/generations: - post: - operationId: createImage - tags: - - OpenAI - summary: Creates an image given a prompt. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CreateImageRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/ImagesResponse' - x-oaiMeta: - name: Create image - group: images - path: create - beta: true - examples: - curl: | - curl https://api.openai.com/v1/images/generations \ - -H 'Content-Type: application/json' \ - -H 'Authorization: Bearer YOUR_API_KEY' \ - -d '{ - "prompt": "A cute baby sea otter", - "n": 2, - "size": "1024x1024" - }' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Image.create( - prompt="A cute baby sea otter", - n=2, - size="1024x1024" - ) - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createImage({ - prompt: "A cute baby sea otter", - n: 2, - size: "1024x1024", - }); - parameters: | - { - "prompt": "A cute baby sea otter", - "n": 2, - "size": "1024x1024" - } - response: | - { - "created": 1589478378, - "data": [ - { - "url": "https://..." - }, - { - "url": "https://..." - } - ] - } - - /images/edits: - post: - operationId: createImageEdit - tags: - - OpenAI - summary: Creates an edited or extended image given an original image and a prompt. - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: '#/components/schemas/CreateImageEditRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/ImagesResponse' - x-oaiMeta: - name: Create image edit - group: images - path: create-edit - beta: true - examples: - curl: | - curl https://api.openai.com/v1/images/edits \ - -H 'Authorization: Bearer YOUR_API_KEY' \ - -F image='@otter.png' \ - -F mask='@mask.png' \ - -F prompt="A cute baby sea otter wearing a beret" \ - -F n=2 \ - -F size="1024x1024" - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Image.create_edit( - image=open("otter.png", "rb"), - mask=open("mask.png", "rb"), - prompt="A cute baby sea otter wearing a beret", - n=2, - size="1024x1024" - ) - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createImageEdit( - fs.createReadStream("otter.png"), - fs.createReadStream("mask.png"), - "A cute baby sea otter wearing a beret", - 2, - "1024x1024" - ); - response: | - { - "created": 1589478378, - "data": [ - { - "url": "https://..." - }, - { - "url": "https://..." - } - ] - } - - /images/variations: - post: - operationId: createImageVariation - tags: - - OpenAI - summary: Creates a variation of a given image. - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: '#/components/schemas/CreateImageVariationRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/ImagesResponse' - x-oaiMeta: - name: Create image variation - group: images - path: create-variation - beta: true - examples: - curl: | - curl https://api.openai.com/v1/images/variations \ - -H 'Authorization: Bearer YOUR_API_KEY' \ - -F image='@otter.png' \ - -F n=2 \ - -F size="1024x1024" - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Image.create_variation( - image=open("otter.png", "rb"), - n=2, - size="1024x1024" - ) - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createImageVariation( - fs.createReadStream("otter.png"), - 2, - "1024x1024" - ); - response: | - { - "created": 1589478378, - "data": [ - { - "url": "https://..." - }, - { - "url": "https://..." - } - ] - } - - /embeddings: - post: - operationId: createEmbedding - tags: - - OpenAI - summary: Creates an embedding vector representing the input text. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CreateEmbeddingRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/CreateEmbeddingResponse' - x-oaiMeta: - name: Create embeddings - group: embeddings - path: create - examples: - curl: | - curl https://api.openai.com/v1/embeddings \ - -X POST \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{"input": "The food was delicious and the waiter...", - "model": "text-embedding-ada-002"}' - - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Embedding.create( - model="text-embedding-ada-002", - input="The food was delicious and the waiter..." - ) - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createEmbedding({ - model: "text-embedding-ada-002", - input: "The food was delicious and the waiter...", - }); - parameters: | - { - "model": "text-embedding-ada-002", - "input": "The food was delicious and the waiter..." - } - response: | - { - "object": "list", - "data": [ - { - "object": "embedding", - "embedding": [ - 0.0023064255, - -0.009327292, - .... (1536 floats total for ada-002) - -0.0028842222, - ], - "index": 0 - } - ], - "model": "text-embedding-ada-002", - "usage": { - "prompt_tokens": 8, - "total_tokens": 8 - } - } - - /audio/transcriptions: - post: - operationId: createTranscription - tags: - - OpenAI - summary: Transcribes audio into the input language. - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: '#/components/schemas/CreateTranscriptionRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/CreateTranscriptionResponse' - x-oaiMeta: - name: Create transcription - group: audio - path: create - beta: true - examples: - curl: | - curl https://api.openai.com/v1/audio/transcriptions \ - -X POST \ - -H 'Authorization: Bearer TOKEN' \ - -H 'Content-Type: multipart/form-data' \ - -F file=@/path/to/file/audio.mp3 \ - -F model=whisper-1 - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - audio_file = open("audio.mp3", "rb") - transcript = openai.Audio.transcribe("whisper-1", audio_file) - node: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const resp = await openai.createTranscription( - fs.createReadStream("audio.mp3"), - "whisper-1" - ); - parameters: | - { - "file": "audio.mp3", - "model": "whisper-1" - } - response: | - { - "text": "Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger. This is a place where you can get to do that." - } - - /audio/translations: - post: - operationId: createTranslation - tags: - - OpenAI - summary: Translates audio into into English. - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: '#/components/schemas/CreateTranslationRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/CreateTranslationResponse' - x-oaiMeta: - name: Create translation - group: audio - path: create - beta: true - examples: - curl: | - curl https://api.openai.com/v1/audio/translations \ - -X POST \ - -H 'Authorization: Bearer TOKEN' \ - -H 'Content-Type: multipart/form-data' \ - -F file=@/path/to/file/german.m4a \ - -F model=whisper-1 - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - audio_file = open("german.m4a", "rb") - transcript = openai.Audio.translate("whisper-1", audio_file) - node: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const resp = await openai.createTranslation( - fs.createReadStream("audio.mp3"), - "whisper-1" - ); - parameters: | - { - "file": "german.m4a", - "model": "whisper-1" - } - response: | - { - "text": "Hello, my name is Wolfgang and I come from Germany. Where are you heading today?" - } - - /engines/{engine_id}/search: - post: - operationId: createSearch - deprecated: true - tags: - - OpenAI - summary: | - The search endpoint computes similarity scores between provided query and documents. Documents can be passed directly to the API if there are no more than 200 of them. - - To go beyond the 200 document limit, documents can be processed offline and then used for efficient retrieval at query time. When `file` is set, the search endpoint searches over all the documents in the given file and returns up to the `max_rerank` number of documents. These documents will be returned along with their search scores. - - The similarity score is a positive score that usually ranges from 0 to 300 (but can sometimes go higher), where a score above 200 usually means the document is semantically similar to the query. - parameters: - - in: path - name: engine_id - required: true - schema: - type: string - example: davinci - description: The ID of the engine to use for this request. You can select one of `ada`, `babbage`, `curie`, or `davinci`. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CreateSearchRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/CreateSearchResponse' - x-oaiMeta: - name: Create search - group: searches - path: create - examples: - curl: | - curl https://api.openai.com/v1/engines/davinci/search \ - -H "Content-Type: application/json" \ - -H 'Authorization: Bearer YOUR_API_KEY' \ - -d '{ - "documents": ["White House", "hospital", "school"], - "query": "the president" - }' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Engine("davinci").search( - documents=["White House", "hospital", "school"], - query="the president" - ) - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createSearch("davinci", { - documents: ["White House", "hospital", "school"], - query: "the president", - }); - parameters: | - { - "documents": [ - "White House", - "hospital", - "school" - ], - "query": "the president" - } - response: | - { - "data": [ - { - "document": 0, - "object": "search_result", - "score": 215.412 - }, - { - "document": 1, - "object": "search_result", - "score": 40.316 - }, - { - "document": 2, - "object": "search_result", - "score": 55.226 - } - ], - "object": "list" - } - - /files: - get: - operationId: listFiles - tags: - - OpenAI - summary: Returns a list of files that belong to the user's organization. - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/ListFilesResponse' - x-oaiMeta: - name: List files - group: files - path: list - examples: - curl: | - curl https://api.openai.com/v1/files \ - -H 'Authorization: Bearer YOUR_API_KEY' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.File.list() - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.listFiles(); - response: | - { - "data": [ - { - "id": "file-ccdDZrC3iZVNiQVeEA6Z66wf", - "object": "file", - "bytes": 175, - "created_at": 1613677385, - "filename": "train.jsonl", - "purpose": "search" - }, - { - "id": "file-XjGxS3KTG0uNmNOK362iJua3", - "object": "file", - "bytes": 140, - "created_at": 1613779121, - "filename": "puppy.jsonl", - "purpose": "search" - } - ], - "object": "list" - } - post: - operationId: createFile - tags: - - OpenAI - summary: | - Upload a file that contains document(s) to be used across various endpoints/features. Currently, the size of all the files uploaded by one organization can be up to 1 GB. Please contact us if you need to increase the storage limit. - - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: '#/components/schemas/CreateFileRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/OpenAIFile' - x-oaiMeta: - name: Upload file - group: files - path: upload - examples: - curl: | - curl https://api.openai.com/v1/files \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -F purpose="fine-tune" \ - -F file='@mydata.jsonl' - - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.File.create( - file=open("mydata.jsonl", "rb"), - purpose='fine-tune' - ) - node.js: | - const fs = require("fs"); - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createFile( - fs.createReadStream("mydata.jsonl"), - "fine-tune" - ); - response: | - { - "id": "file-XjGxS3KTG0uNmNOK362iJua3", - "object": "file", - "bytes": 140, - "created_at": 1613779121, - "filename": "mydata.jsonl", - "purpose": "fine-tune" - } - - /files/{file_id}: - delete: - operationId: deleteFile - tags: - - OpenAI - summary: Delete a file. - parameters: - - in: path - name: file_id - required: true - schema: - type: string - description: The ID of the file to use for this request - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/DeleteFileResponse' - x-oaiMeta: - name: Delete file - group: files - path: delete - examples: - curl: | - curl https://api.openai.com/v1/files/file-XjGxS3KTG0uNmNOK362iJua3 \ - -X DELETE \ - -H 'Authorization: Bearer YOUR_API_KEY' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.File.delete("file-XjGxS3KTG0uNmNOK362iJua3") - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.deleteFile("file-XjGxS3KTG0uNmNOK362iJua3"); - response: | - { - "id": "file-XjGxS3KTG0uNmNOK362iJua3", - "object": "file", - "deleted": true - } - get: - operationId: retrieveFile - tags: - - OpenAI - summary: Returns information about a specific file. - parameters: - - in: path - name: file_id - required: true - schema: - type: string - description: The ID of the file to use for this request - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/OpenAIFile' - x-oaiMeta: - name: Retrieve file - group: files - path: retrieve - examples: - curl: | - curl https://api.openai.com/v1/files/file-XjGxS3KTG0uNmNOK362iJua3 \ - -H 'Authorization: Bearer YOUR_API_KEY' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.File.retrieve("file-XjGxS3KTG0uNmNOK362iJua3") - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.retrieveFile("file-XjGxS3KTG0uNmNOK362iJua3"); - response: | - { - "id": "file-XjGxS3KTG0uNmNOK362iJua3", - "object": "file", - "bytes": 140, - "created_at": 1613779657, - "filename": "mydata.jsonl", - "purpose": "fine-tune" - } - - /files/{file_id}/content: - get: - operationId: downloadFile - tags: - - OpenAI - summary: Returns the contents of the specified file - parameters: - - in: path - name: file_id - required: true - schema: - type: string - description: The ID of the file to use for this request - responses: - "200": - description: OK - content: - application/json: - schema: - type: string - x-oaiMeta: - name: Retrieve file content - group: files - path: retrieve-content - examples: - curl: | - curl https://api.openai.com/v1/files/file-XjGxS3KTG0uNmNOK362iJua3/content \ - -H 'Authorization: Bearer YOUR_API_KEY' > file.jsonl - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - content = openai.File.download("file-XjGxS3KTG0uNmNOK362iJua3") - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.downloadFile("file-XjGxS3KTG0uNmNOK362iJua3"); - - /answers: - post: - operationId: createAnswer - deprecated: true - tags: - - OpenAI - summary: | - Answers the specified question using the provided documents and examples. - - The endpoint first [searches](/docs/api-reference/searches) over provided documents or files to find relevant context. The relevant context is combined with the provided examples and question to create the prompt for [completion](/docs/api-reference/completions). - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CreateAnswerRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/CreateAnswerResponse' - x-oaiMeta: - name: Create answer - group: answers - path: create - examples: - curl: | - curl https://api.openai.com/v1/answers \ - -X POST \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H 'Content-Type: application/json' \ - -d '{ - "documents": ["Puppy A is happy.", "Puppy B is sad."], - "question": "which puppy is happy?", - "search_model": "ada", - "model": "curie", - "examples_context": "In 2017, U.S. life expectancy was 78.6 years.", - "examples": [["What is human life expectancy in the United States?","78 years."]], - "max_tokens": 5, - "stop": ["\n", "<|endoftext|>"] - }' - - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Answer.create( - search_model="ada", - model="curie", - question="which puppy is happy?", - documents=["Puppy A is happy.", "Puppy B is sad."], - examples_context="In 2017, U.S. life expectancy was 78.6 years.", - examples=[["What is human life expectancy in the United States?","78 years."]], - max_tokens=5, - stop=["\n", "<|endoftext|>"], - ) - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createAnswer({ - search_model: "ada", - model: "curie", - question: "which puppy is happy?", - documents: ["Puppy A is happy.", "Puppy B is sad."], - examples_context: "In 2017, U.S. life expectancy was 78.6 years.", - examples: [["What is human life expectancy in the United States?","78 years."]], - max_tokens: 5, - stop: ["\n", "<|endoftext|>"], - }); - parameters: | - { - "documents": ["Puppy A is happy.", "Puppy B is sad."], - "question": "which puppy is happy?", - "search_model": "ada", - "model": "curie", - "examples_context": "In 2017, U.S. life expectancy was 78.6 years.", - "examples": [["What is human life expectancy in the United States?","78 years."]], - "max_tokens": 5, - "stop": ["\n", "<|endoftext|>"] - } - response: | - { - "answers": [ - "puppy A." - ], - "completion": "cmpl-2euVa1kmKUuLpSX600M41125Mo9NI", - "model": "curie:2020-05-03", - "object": "answer", - "search_model": "ada", - "selected_documents": [ - { - "document": 0, - "text": "Puppy A is happy. " - }, - { - "document": 1, - "text": "Puppy B is sad. " - } - ] - } - - /classifications: - post: - operationId: createClassification - deprecated: true - tags: - - OpenAI - summary: | - Classifies the specified `query` using provided examples. - - The endpoint first [searches](/docs/api-reference/searches) over the labeled examples - to select the ones most relevant for the particular query. Then, the relevant examples - are combined with the query to construct a prompt to produce the final label via the - [completions](/docs/api-reference/completions) endpoint. - - Labeled examples can be provided via an uploaded `file`, or explicitly listed in the - request using the `examples` parameter for quick tests and small scale use cases. - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CreateClassificationRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/CreateClassificationResponse' - x-oaiMeta: - name: Create classification - group: classifications - path: create - examples: - curl: | - curl https://api.openai.com/v1/classifications \ - -X POST \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H 'Content-Type: application/json' \ - -d '{ - "examples": [ - ["A happy moment", "Positive"], - ["I am sad.", "Negative"], - ["I am feeling awesome", "Positive"]], - "query": "It is a raining day :(", - "search_model": "ada", - "model": "curie", - "labels":["Positive", "Negative", "Neutral"] - }' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Classification.create( - search_model="ada", - model="curie", - examples=[ - ["A happy moment", "Positive"], - ["I am sad.", "Negative"], - ["I am feeling awesome", "Positive"] - ], - query="It is a raining day :(", - labels=["Positive", "Negative", "Neutral"], - ) - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createClassification({ - search_model: "ada", - model: "curie", - examples: [ - ["A happy moment", "Positive"], - ["I am sad.", "Negative"], - ["I am feeling awesome", "Positive"] - ], - query:"It is a raining day :(", - labels: ["Positive", "Negative", "Neutral"], - }); - parameters: | - { - "examples": [ - ["A happy moment", "Positive"], - ["I am sad.", "Negative"], - ["I am feeling awesome", "Positive"] - ], - "labels": ["Positive", "Negative", "Neutral"], - "query": "It is a raining day :(", - "search_model": "ada", - "model": "curie" - } - response: | - { - "completion": "cmpl-2euN7lUVZ0d4RKbQqRV79IiiE6M1f", - "label": "Negative", - "model": "curie:2020-05-03", - "object": "classification", - "search_model": "ada", - "selected_examples": [ - { - "document": 1, - "label": "Negative", - "text": "I am sad." - }, - { - "document": 0, - "label": "Positive", - "text": "A happy moment" - }, - { - "document": 2, - "label": "Positive", - "text": "I am feeling awesome" - } - ] - } - - /fine-tunes: - post: - operationId: createFineTune - tags: - - OpenAI - summary: | - Creates a job that fine-tunes a specified model from a given dataset. - - Response includes details of the enqueued job including job status and the name of the fine-tuned models once complete. - - [Learn more about Fine-tuning](/docs/guides/fine-tuning) - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CreateFineTuneRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/FineTune' - x-oaiMeta: - name: Create fine-tune - group: fine-tunes - path: create - examples: - curl: | - curl https://api.openai.com/v1/fine-tunes \ - -X POST \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -d '{ - "training_file": "file-XGinujblHPwGLSztz8cPS8XY" - }' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.FineTune.create(training_file="file-XGinujblHPwGLSztz8cPS8XY") - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createFineTune({ - training_file: "file-XGinujblHPwGLSztz8cPS8XY", - }); - response: | - { - "id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F", - "object": "fine-tune", - "model": "curie", - "created_at": 1614807352, - "events": [ - { - "object": "fine-tune-event", - "created_at": 1614807352, - "level": "info", - "message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0." - } - ], - "fine_tuned_model": null, - "hyperparams": { - "batch_size": 4, - "learning_rate_multiplier": 0.1, - "n_epochs": 4, - "prompt_loss_weight": 0.1, - }, - "organization_id": "org-...", - "result_files": [], - "status": "pending", - "validation_files": [], - "training_files": [ - { - "id": "file-XGinujblHPwGLSztz8cPS8XY", - "object": "file", - "bytes": 1547276, - "created_at": 1610062281, - "filename": "my-data-train.jsonl", - "purpose": "fine-tune-train" - } - ], - "updated_at": 1614807352, - } - get: - operationId: listFineTunes - tags: - - OpenAI - summary: | - List your organization's fine-tuning jobs - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/ListFineTunesResponse' - x-oaiMeta: - name: List fine-tunes - group: fine-tunes - path: list - examples: - curl: | - curl https://api.openai.com/v1/fine-tunes \ - -H 'Authorization: Bearer YOUR_API_KEY' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.FineTune.list() - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.listFineTunes(); - response: | - { - "object": "list", - "data": [ - { - "id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F", - "object": "fine-tune", - "model": "curie", - "created_at": 1614807352, - "fine_tuned_model": null, - "hyperparams": { ... }, - "organization_id": "org-...", - "result_files": [], - "status": "pending", - "validation_files": [], - "training_files": [ { ... } ], - "updated_at": 1614807352, - }, - { ... }, - { ... } - ] - } - - /fine-tunes/{fine_tune_id}: - get: - operationId: retrieveFineTune - tags: - - OpenAI - summary: | - Gets info about the fine-tune job. - - [Learn more about Fine-tuning](/docs/guides/fine-tuning) - parameters: - - in: path - name: fine_tune_id - required: true - schema: - type: string - example: - ft-AF1WoRqd3aJAHsqc9NY7iL8F - description: | - The ID of the fine-tune job - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/FineTune' - x-oaiMeta: - name: Retrieve fine-tune - group: fine-tunes - path: retrieve - examples: - curl: | - curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F \ - -H "Authorization: Bearer YOUR_API_KEY" - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.FineTune.retrieve(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F") - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.retrieveFineTune("ft-AF1WoRqd3aJAHsqc9NY7iL8F"); - response: | - { - "id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F", - "object": "fine-tune", - "model": "curie", - "created_at": 1614807352, - "events": [ - { - "object": "fine-tune-event", - "created_at": 1614807352, - "level": "info", - "message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0." - }, - { - "object": "fine-tune-event", - "created_at": 1614807356, - "level": "info", - "message": "Job started." - }, - { - "object": "fine-tune-event", - "created_at": 1614807861, - "level": "info", - "message": "Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20." - }, - { - "object": "fine-tune-event", - "created_at": 1614807864, - "level": "info", - "message": "Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT." - }, - { - "object": "fine-tune-event", - "created_at": 1614807864, - "level": "info", - "message": "Job succeeded." - } - ], - "fine_tuned_model": "curie:ft-acmeco-2021-03-03-21-44-20", - "hyperparams": { - "batch_size": 4, - "learning_rate_multiplier": 0.1, - "n_epochs": 4, - "prompt_loss_weight": 0.1, - }, - "organization_id": "org-...", - "result_files": [ - { - "id": "file-QQm6ZpqdNwAaVC3aSz5sWwLT", - "object": "file", - "bytes": 81509, - "created_at": 1614807863, - "filename": "compiled_results.csv", - "purpose": "fine-tune-results" - } - ], - "status": "succeeded", - "validation_files": [], - "training_files": [ - { - "id": "file-XGinujblHPwGLSztz8cPS8XY", - "object": "file", - "bytes": 1547276, - "created_at": 1610062281, - "filename": "my-data-train.jsonl", - "purpose": "fine-tune-train" - } - ], - "updated_at": 1614807865, - } - - /fine-tunes/{fine_tune_id}/cancel: - post: - operationId: cancelFineTune - tags: - - OpenAI - summary: | - Immediately cancel a fine-tune job. - parameters: - - in: path - name: fine_tune_id - required: true - schema: - type: string - example: - ft-AF1WoRqd3aJAHsqc9NY7iL8F - description: | - The ID of the fine-tune job to cancel - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/FineTune' - x-oaiMeta: - name: Cancel fine-tune - group: fine-tunes - path: cancel - examples: - curl: | - curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F/cancel \ - -X POST \ - -H "Authorization: Bearer YOUR_API_KEY" - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.FineTune.cancel(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F") - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.cancelFineTune("ft-AF1WoRqd3aJAHsqc9NY7iL8F"); - response: | - { - "id": "ft-xhrpBbvVUzYGo8oUO1FY4nI7", - "object": "fine-tune", - "model": "curie", - "created_at": 1614807770, - "events": [ { ... } ], - "fine_tuned_model": null, - "hyperparams": { ... }, - "organization_id": "org-...", - "result_files": [], - "status": "cancelled", - "validation_files": [], - "training_files": [ - { - "id": "file-XGinujblHPwGLSztz8cPS8XY", - "object": "file", - "bytes": 1547276, - "created_at": 1610062281, - "filename": "my-data-train.jsonl", - "purpose": "fine-tune-train" - } - ], - "updated_at": 1614807789, - } - - /fine-tunes/{fine_tune_id}/events: - get: - operationId: listFineTuneEvents - tags: - - OpenAI - summary: | - Get fine-grained status updates for a fine-tune job. - parameters: - - in: path - name: fine_tune_id - required: true - schema: - type: string - example: - ft-AF1WoRqd3aJAHsqc9NY7iL8F - description: | - The ID of the fine-tune job to get events for. - - in: query - name: stream - required: false - schema: - type: boolean - default: false - description: | - Whether to stream events for the fine-tune job. If set to true, - events will be sent as data-only - [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format) - as they become available. The stream will terminate with a - `data: [DONE]` message when the job is finished (succeeded, cancelled, - or failed). - - If set to false, only events generated so far will be returned. - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/ListFineTuneEventsResponse' - x-oaiMeta: - name: List fine-tune events - group: fine-tunes - path: events - examples: - curl: | - curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F/events \ - -H "Authorization: Bearer YOUR_API_KEY" - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.FineTune.list_events(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F") - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.listFineTuneEvents("ft-AF1WoRqd3aJAHsqc9NY7iL8F"); - response: | - { - "object": "list", - "data": [ - { - "object": "fine-tune-event", - "created_at": 1614807352, - "level": "info", - "message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0." - }, - { - "object": "fine-tune-event", - "created_at": 1614807356, - "level": "info", - "message": "Job started." - }, - { - "object": "fine-tune-event", - "created_at": 1614807861, - "level": "info", - "message": "Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20." - }, - { - "object": "fine-tune-event", - "created_at": 1614807864, - "level": "info", - "message": "Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT." - }, - { - "object": "fine-tune-event", - "created_at": 1614807864, - "level": "info", - "message": "Job succeeded." - } - ] - } - - /models: - get: - operationId: listModels - tags: - - OpenAI - summary: Lists the currently available models, and provides basic information about each one such as the owner and availability. - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/ListModelsResponse' - x-oaiMeta: - name: List models - group: models - path: list - examples: - curl: | - curl https://api.openai.com/v1/models \ - -H 'Authorization: Bearer YOUR_API_KEY' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Model.list() - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.listModels(); - response: | - { - "data": [ - { - "id": "model-id-0", - "object": "model", - "owned_by": "organization-owner", - "permission": [...] - }, - { - "id": "model-id-1", - "object": "model", - "owned_by": "organization-owner", - "permission": [...] - }, - { - "id": "model-id-2", - "object": "model", - "owned_by": "openai", - "permission": [...] - }, - ], - "object": "list" - } - - /models/{model}: - get: - operationId: retrieveModel - tags: - - OpenAI - summary: Retrieves a model instance, providing basic information about the model such as the owner and permissioning. - parameters: - - in: path - name: model - required: true - schema: - type: string - # ideally this will be an actual ID, so this will always work from browser - example: - text-davinci-001 - description: - The ID of the model to use for this request - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/Model' - x-oaiMeta: - name: Retrieve model - group: models - path: retrieve - examples: - curl: | - curl https://api.openai.com/v1/models/VAR_model_id \ - -H 'Authorization: Bearer YOUR_API_KEY' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Model.retrieve("VAR_model_id") - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.retrieveModel("VAR_model_id"); - response: | - { - "id": "VAR_model_id", - "object": "model", - "owned_by": "openai", - "permission": [...] - } - delete: - operationId: deleteModel - tags: - - OpenAI - summary: Delete a fine-tuned model. You must have the Owner role in your organization. - parameters: - - in: path - name: model - required: true - schema: - type: string - example: curie:ft-acmeco-2021-03-03-21-44-20 - description: The model to delete - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/DeleteModelResponse' - x-oaiMeta: - name: Delete fine-tune model - group: fine-tunes - path: delete-model - examples: - curl: | - curl https://api.openai.com/v1/models/curie:ft-acmeco-2021-03-03-21-44-20 \ - -X DELETE \ - -H "Authorization: Bearer YOUR_API_KEY" - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Model.delete("curie:ft-acmeco-2021-03-03-21-44-20") - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.deleteModel('curie:ft-acmeco-2021-03-03-21-44-20'); - response: | - { - "id": "curie:ft-acmeco-2021-03-03-21-44-20", - "object": "model", - "deleted": true - } - - /moderations: - post: - operationId: createModeration - tags: - - OpenAI - summary: Classifies if text violates OpenAI's Content Policy - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/CreateModerationRequest' - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/CreateModerationResponse' - x-oaiMeta: - name: Create moderation - group: moderations - path: create - examples: - curl: | - curl https://api.openai.com/v1/moderations \ - -H 'Content-Type: application/json' \ - -H 'Authorization: Bearer YOUR_API_KEY' \ - -d '{ - "input": "I want to kill them." - }' - python: | - import os - import openai - openai.api_key = os.getenv("OPENAI_API_KEY") - openai.Moderation.create( - input="I want to kill them.", - ) - node.js: | - const { Configuration, OpenAIApi } = require("openai"); - const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, - }); - const openai = new OpenAIApi(configuration); - const response = await openai.createModeration({ - input: "I want to kill them.", - }); - parameters: | - { - "input": "I want to kill them." - } - response: | - { - "id": "modr-5MWoLO", - "model": "text-moderation-001", - "results": [ - { - "categories": { - "hate": false, - "hate/threatening": true, - "self-harm": false, - "sexual": false, - "sexual/minors": false, - "violence": true, - "violence/graphic": false - }, - "category_scores": { - "hate": 0.22714105248451233, - "hate/threatening": 0.4132447838783264, - "self-harm": 0.005232391878962517, - "sexual": 0.01407341007143259, - "sexual/minors": 0.0038522258400917053, - "violence": 0.9223177433013916, - "violence/graphic": 0.036865197122097015 - }, - "flagged": true - } - ] - } - -components: - schemas: - ListEnginesResponse: - type: object - properties: - object: - type: string - data: - type: array - items: - $ref: '#/components/schemas/Engine' - required: - - object - - data - - ListModelsResponse: - type: object - properties: - object: - type: string - data: - type: array - items: - $ref: '#/components/schemas/Model' - required: - - object - - data - - DeleteModelResponse: - type: object - properties: - id: - type: string - object: - type: string - deleted: - type: boolean - required: - - id - - object - - deleted - - CreateCompletionRequest: - type: object - properties: - model: &model_configuration - description: ID of the model to use. You can use the [List models](/docs/api-reference/models/list) API to see all of your available models, or see our [Model overview](/docs/models/overview) for descriptions of them. - type: string - prompt: - description: &completions_prompt_description | - The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays. - - Note that <|endoftext|> is the document separator that the model sees during training, so if a prompt is not specified the model will generate as if from the beginning of a new document. - default: '<|endoftext|>' - nullable: true - oneOf: - - type: string - default: '' - example: "This is a test." - - type: array - items: - type: string - default: '' - example: "This is a test." - - type: array - minItems: 1 - items: - type: integer - example: "[1212, 318, 257, 1332, 13]" - - type: array - minItems: 1 - items: - type: array - minItems: 1 - items: - type: integer - example: "[[1212, 318, 257, 1332, 13]]" - suffix: - description: - The suffix that comes after a completion of inserted text. - default: null - nullable: true - type: string - example: "test." - max_tokens: - type: integer - minimum: 0 - default: 16 - example: 16 - nullable: true - description: &completions_max_tokens_description | - The maximum number of [tokens](/tokenizer) to generate in the completion. - - The token count of your prompt plus `max_tokens` cannot exceed the model's context length. Most models have a context length of 2048 tokens (except for the newest models, which support 4096). - temperature: - type: number - minimum: 0 - maximum: 2 - default: 1 - example: 1 - nullable: true - description: &completions_temperature_description | - What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. - - We generally recommend altering this or `top_p` but not both. - top_p: - type: number - minimum: 0 - maximum: 1 - default: 1 - example: 1 - nullable: true - description: &completions_top_p_description | - An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. - - We generally recommend altering this or `temperature` but not both. - n: - type: integer - minimum: 1 - maximum: 128 - default: 1 - example: 1 - nullable: true - description: &completions_completions_description | - How many completions to generate for each prompt. - - **Note:** Because this parameter generates many completions, it can quickly consume your token quota. Use carefully and ensure that you have reasonable settings for `max_tokens` and `stop`. - stream: - description: > - Whether to stream back partial progress. If set, tokens will be sent as data-only [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format) - as they become available, with the stream terminated by a `data: [DONE]` message. - type: boolean - nullable: true - default: false - logprobs: &completions_logprobs_configuration - type: integer - minimum: 0 - maximum: 5 - default: null - nullable: true - description: &completions_logprobs_description | - Include the log probabilities on the `logprobs` most likely tokens, as well the chosen tokens. For example, if `logprobs` is 5, the API will return a list of the 5 most likely tokens. The API will always return the `logprob` of the sampled token, so there may be up to `logprobs+1` elements in the response. - - The maximum value for `logprobs` is 5. If you need more than this, please contact us through our [Help center](https://help.openai.com) and describe your use case. - echo: - type: boolean - default: false - nullable: true - description: &completions_echo_description > - Echo back the prompt in addition to the completion - stop: - description: &completions_stop_description > - Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence. - default: null - nullable: true - oneOf: - - type: string - default: <|endoftext|> - example: "\n" - nullable: true - - type: array - minItems: 1 - maxItems: 4 - items: - type: string - example: '["\n"]' - presence_penalty: - type: number - default: 0 - minimum: -2 - maximum: 2 - nullable: true - description: &completions_presence_penalty_description | - Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics. - - [See more information about frequency and presence penalties.](/docs/api-reference/parameter-details) - frequency_penalty: - type: number - default: 0 - minimum: -2 - maximum: 2 - nullable: true - description: &completions_frequency_penalty_description | - Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. - - [See more information about frequency and presence penalties.](/docs/api-reference/parameter-details) - best_of: - type: integer - default: 1 - minimum: 0 - maximum: 20 - nullable: true - description: &completions_best_of_description | - Generates `best_of` completions server-side and returns the "best" (the one with the highest log probability per token). Results cannot be streamed. - - When used with `n`, `best_of` controls the number of candidate completions and `n` specifies how many to return – `best_of` must be greater than `n`. - - **Note:** Because this parameter generates many completions, it can quickly consume your token quota. Use carefully and ensure that you have reasonable settings for `max_tokens` and `stop`. - logit_bias: &completions_logit_bias - type: object - x-oaiTypeLabel: map - default: null - nullable: true - description: &completions_logit_bias_description | - Modify the likelihood of specified tokens appearing in the completion. - - Accepts a json object that maps tokens (specified by their token ID in the GPT tokenizer) to an associated bias value from -100 to 100. You can use this [tokenizer tool](/tokenizer?view=bpe) (which works for both GPT-2 and GPT-3) to convert text to token IDs. Mathematically, the bias is added to the logits generated by the model prior to sampling. The exact effect will vary per model, but values between -1 and 1 should decrease or increase likelihood of selection; values like -100 or 100 should result in a ban or exclusive selection of the relevant token. - - As an example, you can pass `{"50256": -100}` to prevent the <|endoftext|> token from being generated. - user: &end_user_param_configuration - type: string - example: user-1234 - description: | - A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. [Learn more](/docs/guides/safety-best-practices/end-user-ids). - required: - - model - - CreateCompletionResponse: - type: object - properties: - id: - type: string - object: - type: string - created: - type: integer - model: - type: string - choices: - type: array - items: - type: object - properties: - text: - type: string - index: - type: integer - logprobs: - type: object - nullable: true - properties: - tokens: - type: array - items: - type: string - token_logprobs: - type: array - items: - type: number - top_logprobs: - type: array - items: - type: object - text_offset: - type: array - items: - type: integer - finish_reason: - type: string - usage: - type: object - properties: - prompt_tokens: - type: integer - completion_tokens: - type: integer - total_tokens: - type: integer - required: - - prompt_tokens - - completion_tokens - - total_tokens - required: - - id - - object - - created - - model - - choices - - ChatCompletionRequestMessage: - type: object - properties: - role: - type: string - enum: ["system", "user", "assistant"] - description: The role of the author of this message. - content: - type: string - description: The contents of the message - name: - type: string - description: The name of the user in a multi-user chat - required: - - role - - content - - ChatCompletionResponseMessage: - type: object - properties: - role: - type: string - enum: ["system", "user", "assistant"] - description: The role of the author of this message. - content: - type: string - description: The contents of the message - required: - - role - - content - - CreateChatCompletionRequest: - type: object - properties: - model: - description: ID of the model to use. Currently, only `gpt-3.5-turbo` and `gpt-3.5-turbo-0301` are supported. - type: string - messages: - description: The messages to generate chat completions for, in the [chat format](/docs/guides/chat/introduction). - type: array - minItems: 1 - items: - $ref: '#/components/schemas/ChatCompletionRequestMessage' - temperature: - type: number - minimum: 0 - maximum: 2 - default: 1 - example: 1 - nullable: true - description: *completions_temperature_description - top_p: - type: number - minimum: 0 - maximum: 1 - default: 1 - example: 1 - nullable: true - description: *completions_top_p_description - n: - type: integer - minimum: 1 - maximum: 128 - default: 1 - example: 1 - nullable: true - description: How many chat completion choices to generate for each input message. - stream: - description: > - If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format) - as they become available, with the stream terminated by a `data: [DONE]` message. - type: boolean - nullable: true - default: false - stop: - description: | - Up to 4 sequences where the API will stop generating further tokens. - default: null - oneOf: - - type: string - nullable: true - - type: array - minItems: 1 - maxItems: 4 - items: - type: string - max_tokens: - description: | - The maximum number of tokens allowed for the generated answer. By default, the number of tokens the model can return will be (4096 - prompt tokens). - default: inf - type: integer - presence_penalty: - type: number - default: 0 - minimum: -2 - maximum: 2 - nullable: true - description: *completions_presence_penalty_description - frequency_penalty: - type: number - default: 0 - minimum: -2 - maximum: 2 - nullable: true - description: *completions_frequency_penalty_description - logit_bias: - type: object - x-oaiTypeLabel: map - default: null - nullable: true - description: | - Modify the likelihood of specified tokens appearing in the completion. - - Accepts a json object that maps tokens (specified by their token ID in the tokenizer) to an associated bias value from -100 to 100. Mathematically, the bias is added to the logits generated by the model prior to sampling. The exact effect will vary per model, but values between -1 and 1 should decrease or increase likelihood of selection; values like -100 or 100 should result in a ban or exclusive selection of the relevant token. - user: *end_user_param_configuration - required: - - model - - messages - - CreateChatCompletionResponse: - type: object - properties: - id: - type: string - object: - type: string - created: - type: integer - model: - type: string - choices: - type: array - items: - type: object - properties: - index: - type: integer - message: - $ref: '#/components/schemas/ChatCompletionResponseMessage' - finish_reason: - type: string - usage: - type: object - properties: - prompt_tokens: - type: integer - completion_tokens: - type: integer - total_tokens: - type: integer - required: - - prompt_tokens - - completion_tokens - - total_tokens - required: - - id - - object - - created - - model - - choices - - CreateEditRequest: - type: object - properties: - model: - description: ID of the model to use. You can use the `text-davinci-edit-001` or `code-davinci-edit-001` model with this endpoint. - type: string - input: - description: - The input text to use as a starting point for the edit. - type: string - default: '' - nullable: true - example: "What day of the wek is it?" - instruction: - description: - The instruction that tells the model how to edit the prompt. - type: string - example: "Fix the spelling mistakes." - n: - type: integer - minimum: 1 - maximum: 20 - default: 1 - example: 1 - nullable: true - description: - How many edits to generate for the input and instruction. - temperature: - type: number - minimum: 0 - maximum: 2 - default: 1 - example: 1 - nullable: true - description: *completions_temperature_description - top_p: - type: number - minimum: 0 - maximum: 1 - default: 1 - example: 1 - nullable: true - description: *completions_top_p_description - required: - - model - - instruction - - CreateEditResponse: - type: object - properties: - object: - type: string - created: - type: integer - choices: - type: array - items: - type: object - properties: - text: - type: string - index: - type: integer - logprobs: - type: object - nullable: true - properties: - tokens: - type: array - items: - type: string - token_logprobs: - type: array - items: - type: number - top_logprobs: - type: array - items: - type: object - text_offset: - type: array - items: - type: integer - finish_reason: - type: string - usage: - type: object - properties: - prompt_tokens: - type: integer - completion_tokens: - type: integer - total_tokens: - type: integer - required: - - prompt_tokens - - completion_tokens - - total_tokens - required: - - object - - created - - choices - - usage - - CreateImageRequest: - type: object - properties: - prompt: - description: A text description of the desired image(s). The maximum length is 1000 characters. - type: string - example: "A cute baby sea otter" - n: &images_n - type: integer - minimum: 1 - maximum: 10 - default: 1 - example: 1 - nullable: true - description: The number of images to generate. Must be between 1 and 10. - size: &images_size - type: string - enum: ["256x256", "512x512", "1024x1024"] - default: "1024x1024" - example: "1024x1024" - nullable: true - description: The size of the generated images. Must be one of `256x256`, `512x512`, or `1024x1024`. - response_format: &images_response_format - type: string - enum: ["url", "b64_json"] - default: "url" - example: "url" - nullable: true - description: The format in which the generated images are returned. Must be one of `url` or `b64_json`. - user: *end_user_param_configuration - required: - - prompt - - ImagesResponse: - properties: - created: - type: integer - data: - type: array - items: - type: object - properties: - url: - type: string - b64_json: - type: string - required: - - created - - data - - CreateImageEditRequest: - type: object - properties: - image: - description: The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask is not provided, image must have transparency, which will be used as the mask. - type: string - format: binary - mask: - description: An additional image whose fully transparent areas (e.g. where alpha is zero) indicate where `image` should be edited. Must be a valid PNG file, less than 4MB, and have the same dimensions as `image`. - type: string - format: binary - prompt: - description: A text description of the desired image(s). The maximum length is 1000 characters. - type: string - example: "A cute baby sea otter wearing a beret" - n: *images_n - size: *images_size - response_format: *images_response_format - user: *end_user_param_configuration - required: - - prompt - - image - - CreateImageVariationRequest: - type: object - properties: - image: - description: The image to use as the basis for the variation(s). Must be a valid PNG file, less than 4MB, and square. - type: string - format: binary - n: *images_n - size: *images_size - response_format: *images_response_format - user: *end_user_param_configuration - required: - - image - - CreateModerationRequest: - type: object - properties: - input: - description: The input text to classify - oneOf: - - type: string - default: '' - example: "I want to kill them." - - type: array - items: - type: string - default: '' - example: "I want to kill them." - model: - description: | - Two content moderations models are available: `text-moderation-stable` and `text-moderation-latest`. - - The default is `text-moderation-latest` which will be automatically upgraded over time. This ensures you are always using our most accurate model. If you use `text-moderation-stable`, we will provide advanced notice before updating the model. Accuracy of `text-moderation-stable` may be slightly lower than for `text-moderation-latest`. - type: string - nullable: false - default: "text-moderation-latest" - example: "text-moderation-stable" - required: - - input - - CreateModerationResponse: - type: object - properties: - id: - type: string - model: - type: string - results: - type: array - items: - type: object - properties: - flagged: - type: boolean - categories: - type: object - properties: - hate: - type: boolean - hate/threatening: - type: boolean - self-harm: - type: boolean - sexual: - type: boolean - sexual/minors: - type: boolean - violence: - type: boolean - violence/graphic: - type: boolean - required: - - hate - - hate/threatening - - self-harm - - sexual - - sexual/minors - - violence - - violence/graphic - category_scores: - type: object - properties: - hate: - type: number - hate/threatening: - type: number - self-harm: - type: number - sexual: - type: number - sexual/minors: - type: number - violence: - type: number - violence/graphic: - type: number - required: - - hate - - hate/threatening - - self-harm - - sexual - - sexual/minors - - violence - - violence/graphic - required: - - flagged - - categories - - category_scores - required: - - id - - model - - results - - CreateSearchRequest: - type: object - properties: - query: - description: Query to search against the documents. - type: string - example: "the president" - minLength: 1 - documents: - description: | - Up to 200 documents to search over, provided as a list of strings. - - The maximum document length (in tokens) is 2034 minus the number of tokens in the query. - - You should specify either `documents` or a `file`, but not both. - type: array - minItems: 1 - maxItems: 200 - items: - type: string - nullable: true - example: "['White House', 'hospital', 'school']" - file: - description: | - The ID of an uploaded file that contains documents to search over. - - You should specify either `documents` or a `file`, but not both. - type: string - nullable: true - max_rerank: - description: | - The maximum number of documents to be re-ranked and returned by search. - - This flag only takes effect when `file` is set. - type: integer - minimum: 1 - default: 200 - nullable: true - return_metadata: &return_metadata_configuration - description: | - A special boolean flag for showing metadata. If set to `true`, each document entry in the returned JSON will contain a "metadata" field. - - This flag only takes effect when `file` is set. - type: boolean - default: false - nullable: true - user: *end_user_param_configuration - required: - - query - - CreateSearchResponse: - type: object - properties: - object: - type: string - model: - type: string - data: - type: array - items: - type: object - properties: - object: - type: string - document: - type: integer - score: - type: number - - ListFilesResponse: - type: object - properties: - object: - type: string - data: - type: array - items: - $ref: '#/components/schemas/OpenAIFile' - required: - - object - - data - - CreateFileRequest: - type: object - additionalProperties: false - properties: - file: - description: | - Name of the [JSON Lines](https://jsonlines.readthedocs.io/en/latest/) file to be uploaded. - - If the `purpose` is set to "fine-tune", each line is a JSON record with "prompt" and "completion" fields representing your [training examples](/docs/guides/fine-tuning/prepare-training-data). - type: string - format: binary - purpose: - description: | - The intended purpose of the uploaded documents. - - Use "fine-tune" for [Fine-tuning](/docs/api-reference/fine-tunes). This allows us to validate the format of the uploaded file. - - type: string - required: - - file - - purpose - - DeleteFileResponse: - type: object - properties: - id: - type: string - object: - type: string - deleted: - type: boolean - required: - - id - - object - - deleted - - CreateAnswerRequest: - type: object - additionalProperties: false - properties: - model: - description: ID of the model to use for completion. You can select one of `ada`, `babbage`, `curie`, or `davinci`. - type: string - question: - description: Question to get answered. - type: string - minLength: 1 - example: "What is the capital of Japan?" - examples: - description: List of (question, answer) pairs that will help steer the model towards the tone and answer format you'd like. We recommend adding 2 to 3 examples. - type: array - minItems: 1 - maxItems: 200 - items: - type: array - minItems: 2 - maxItems: 2 - items: - type: string - minLength: 1 - example: "[['What is the capital of Canada?', 'Ottawa'], ['Which province is Ottawa in?', 'Ontario']]" - examples_context: - description: A text snippet containing the contextual information used to generate the answers for the `examples` you provide. - type: string - example: "Ottawa, Canada's capital, is located in the east of southern Ontario, near the city of Montréal and the U.S. border." - documents: - description: | - List of documents from which the answer for the input `question` should be derived. If this is an empty list, the question will be answered based on the question-answer examples. - - You should specify either `documents` or a `file`, but not both. - type: array - maxItems: 200 - items: - type: string - example: "['Japan is an island country in East Asia, located in the northwest Pacific Ocean.', 'Tokyo is the capital and most populous prefecture of Japan.']" - nullable: true - file: - description: | - The ID of an uploaded file that contains documents to search over. See [upload file](/docs/api-reference/files/upload) for how to upload a file of the desired format and purpose. - - You should specify either `documents` or a `file`, but not both. - type: string - nullable: true - search_model: &search_model_configuration - description: ID of the model to use for [Search](/docs/api-reference/searches/create). You can select one of `ada`, `babbage`, `curie`, or `davinci`. - type: string - default: ada - nullable: true - max_rerank: - description: The maximum number of documents to be ranked by [Search](/docs/api-reference/searches/create) when using `file`. Setting it to a higher value leads to improved accuracy but with increased latency and cost. - type: integer - default: 200 - nullable: true - temperature: - description: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. - type: number - default: 0 - nullable: true - logprobs: &context_completions_logprobs_configuration - type: integer - minimum: 0 - maximum: 5 - default: null - nullable: true - description: | - Include the log probabilities on the `logprobs` most likely tokens, as well the chosen tokens. For example, if `logprobs` is 5, the API will return a list of the 5 most likely tokens. The API will always return the `logprob` of the sampled token, so there may be up to `logprobs+1` elements in the response. - - The maximum value for `logprobs` is 5. If you need more than this, please contact us through our [Help center](https://help.openai.com) and describe your use case. - - When `logprobs` is set, `completion` will be automatically added into `expand` to get the logprobs. - max_tokens: - description: The maximum number of tokens allowed for the generated answer - type: integer - default: 16 - nullable: true - stop: - description: *completions_stop_description - default: null - oneOf: - - type: string - default: <|endoftext|> - example: "\n" - - type: array - minItems: 1 - maxItems: 4 - items: - type: string - example: '["\n"]' - nullable: true - n: - description: How many answers to generate for each question. - type: integer - minimum: 1 - maximum: 10 - default: 1 - nullable: true - logit_bias: *completions_logit_bias - return_metadata: *return_metadata_configuration - return_prompt: &return_prompt_configuration - description: If set to `true`, the returned JSON will include a "prompt" field containing the final prompt that was used to request a completion. This is mainly useful for debugging purposes. - type: boolean - default: false - nullable: true - expand: &expand_configuration - description: If an object name is in the list, we provide the full information of the object; otherwise, we only provide the object ID. Currently we support `completion` and `file` objects for expansion. - type: array - items: {} - nullable: true - default: [] - user: *end_user_param_configuration - required: - - model - - question - - examples - - examples_context - - CreateAnswerResponse: - type: object - properties: - object: - type: string - model: - type: string - search_model: - type: string - completion: - type: string - answers: - type: array - items: - type: string - selected_documents: - type: array - items: - type: object - properties: - document: - type: integer - text: - type: string - - CreateClassificationRequest: - type: object - additionalProperties: false - properties: - model: *model_configuration - query: - description: Query to be classified. - type: string - minLength: 1 - example: "The plot is not very attractive." - examples: - description: | - A list of examples with labels, in the following format: - - `[["The movie is so interesting.", "Positive"], ["It is quite boring.", "Negative"], ...]` - - All the label strings will be normalized to be capitalized. - - You should specify either `examples` or `file`, but not both. - type: array - minItems: 2 - maxItems: 200 - items: - type: array - minItems: 2 - maxItems: 2 - items: - type: string - minLength: 1 - example: "[['Do not see this film.', 'Negative'], ['Smart, provocative and blisteringly funny.', 'Positive']]" - nullable: true - file: - description: | - The ID of the uploaded file that contains training examples. See [upload file](/docs/api-reference/files/upload) for how to upload a file of the desired format and purpose. - - You should specify either `examples` or `file`, but not both. - type: string - nullable: true - labels: - description: The set of categories being classified. If not specified, candidate labels will be automatically collected from the examples you provide. All the label strings will be normalized to be capitalized. - type: array - minItems: 2 - maxItems: 200 - default: null - items: - type: string - example: ["Positive", "Negative"] - nullable: true - search_model: *search_model_configuration - temperature: - description: - What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. - type: number - minimum: 0 - maximum: 2 - default: 0 - nullable: true - example: 0 - logprobs: *context_completions_logprobs_configuration - max_examples: - description: The maximum number of examples to be ranked by [Search](/docs/api-reference/searches/create) when using `file`. Setting it to a higher value leads to improved accuracy but with increased latency and cost. - type: integer - default: 200 - nullable: true - logit_bias: *completions_logit_bias - return_prompt: *return_prompt_configuration - return_metadata: *return_metadata_configuration - expand: *expand_configuration - user: *end_user_param_configuration - required: - - model - - query - - CreateClassificationResponse: - type: object - properties: - object: - type: string - model: - type: string - search_model: - type: string - completion: - type: string - label: - type: string - selected_examples: - type: array - items: - type: object - properties: - document: - type: integer - text: - type: string - label: - type: string - - CreateFineTuneRequest: - type: object - properties: - training_file: - description: | - The ID of an uploaded file that contains training data. - - See [upload file](/docs/api-reference/files/upload) for how to upload a file. - - Your dataset must be formatted as a JSONL file, where each training - example is a JSON object with the keys "prompt" and "completion". - Additionally, you must upload your file with the purpose `fine-tune`. - - See the [fine-tuning guide](/docs/guides/fine-tuning/creating-training-data) for more details. - type: string - example: "file-ajSREls59WBbvgSzJSVWxMCB" - validation_file: - description: | - The ID of an uploaded file that contains validation data. - - If you provide this file, the data is used to generate validation - metrics periodically during fine-tuning. These metrics can be viewed in - the [fine-tuning results file](/docs/guides/fine-tuning/analyzing-your-fine-tuned-model). - Your train and validation data should be mutually exclusive. - - Your dataset must be formatted as a JSONL file, where each validation - example is a JSON object with the keys "prompt" and "completion". - Additionally, you must upload your file with the purpose `fine-tune`. - - See the [fine-tuning guide](/docs/guides/fine-tuning/creating-training-data) for more details. - type: string - nullable: true - example: "file-XjSREls59WBbvgSzJSVWxMCa" - model: - description: | - The name of the base model to fine-tune. You can select one of "ada", - "babbage", "curie", "davinci", or a fine-tuned model created after 2022-04-21. - To learn more about these models, see the - [Models](https://platform.openai.com/docs/models) documentation. - default: "curie" - type: string - nullable: true - n_epochs: - description: | - The number of epochs to train the model for. An epoch refers to one - full cycle through the training dataset. - default: 4 - type: integer - nullable: true - batch_size: - description: | - The batch size to use for training. The batch size is the number of - training examples used to train a single forward and backward pass. - - By default, the batch size will be dynamically configured to be - ~0.2% of the number of examples in the training set, capped at 256 - - in general, we've found that larger batch sizes tend to work better - for larger datasets. - default: null - type: integer - nullable: true - learning_rate_multiplier: - description: | - The learning rate multiplier to use for training. - The fine-tuning learning rate is the original learning rate used for - pretraining multiplied by this value. - - By default, the learning rate multiplier is the 0.05, 0.1, or 0.2 - depending on final `batch_size` (larger learning rates tend to - perform better with larger batch sizes). We recommend experimenting - with values in the range 0.02 to 0.2 to see what produces the best - results. - default: null - type: number - nullable: true - prompt_loss_weight: - description: | - The weight to use for loss on the prompt tokens. This controls how - much the model tries to learn to generate the prompt (as compared - to the completion which always has a weight of 1.0), and can add - a stabilizing effect to training when completions are short. - - If prompts are extremely long (relative to completions), it may make - sense to reduce this weight so as to avoid over-prioritizing - learning the prompt. - default: 0.01 - type: number - nullable: true - compute_classification_metrics: - description: | - If set, we calculate classification-specific metrics such as accuracy - and F-1 score using the validation set at the end of every epoch. - These metrics can be viewed in the [results file](/docs/guides/fine-tuning/analyzing-your-fine-tuned-model). - - In order to compute classification metrics, you must provide a - `validation_file`. Additionally, you must - specify `classification_n_classes` for multiclass classification or - `classification_positive_class` for binary classification. - type: boolean - default: false - nullable: true - classification_n_classes: - description: | - The number of classes in a classification task. - - This parameter is required for multiclass classification. - type: integer - default: null - nullable: true - classification_positive_class: - description: | - The positive class in binary classification. - - This parameter is needed to generate precision, recall, and F1 - metrics when doing binary classification. - type: string - default: null - nullable: true - classification_betas: - description: | - If this is provided, we calculate F-beta scores at the specified - beta values. The F-beta score is a generalization of F-1 score. - This is only used for binary classification. - - With a beta of 1 (i.e. the F-1 score), precision and recall are - given the same weight. A larger beta score puts more weight on - recall and less on precision. A smaller beta score puts more weight - on precision and less on recall. - type: array - items: - type: number - example: [0.6, 1, 1.5, 2] - default: null - nullable: true - suffix: - description: | - A string of up to 40 characters that will be added to your fine-tuned model name. - - For example, a `suffix` of "custom-model-name" would produce a model name like `ada:ft-your-org:custom-model-name-2022-02-15-04-21-04`. - type: string - minLength: 1 - maxLength: 40 - default: null - nullable: true - required: - - training_file - - ListFineTunesResponse: - type: object - properties: - object: - type: string - data: - type: array - items: - $ref: '#/components/schemas/FineTune' - required: - - object - - data - - ListFineTuneEventsResponse: - type: object - properties: - object: - type: string - data: - type: array - items: - $ref: '#/components/schemas/FineTuneEvent' - required: - - object - - data - - CreateEmbeddingRequest: - type: object - additionalProperties: false - properties: - model: *model_configuration - input: - description: | - Input text to get embeddings for, encoded as a string or array of tokens. To get embeddings for multiple inputs in a single request, pass an array of strings or array of token arrays. Each input must not exceed 8192 tokens in length. - example: "The quick brown fox jumped over the lazy dog" - oneOf: - - type: string - default: '' - example: "This is a test." - - type: array - items: - type: string - default: '' - example: "This is a test." - - type: array - minItems: 1 - items: - type: integer - example: "[1212, 318, 257, 1332, 13]" - - type: array - minItems: 1 - items: - type: array - minItems: 1 - items: - type: integer - example: "[[1212, 318, 257, 1332, 13]]" - user: *end_user_param_configuration - required: - - model - - input - - CreateEmbeddingResponse: - type: object - properties: - object: - type: string - model: - type: string - data: - type: array - items: - type: object - properties: - index: - type: integer - object: - type: string - embedding: - type: array - items: - type: number - required: - - index - - object - - embedding - usage: - type: object - properties: - prompt_tokens: - type: integer - total_tokens: - type: integer - required: - - prompt_tokens - - total_tokens - required: - - object - - model - - data - - usage - - CreateTranscriptionRequest: - type: object - additionalProperties: false - properties: - file: - description: | - The audio file to transcribe, in one of these formats: mp3, mp4, mpeg, mpga, m4a, wav, or webm. - type: string - format: binary - model: - description: | - ID of the model to use. Only `whisper-1` is currently available. - type: string - prompt: - description: | - An optional text to guide the model's style or continue a previous audio segment. The [prompt](/docs/guides/speech-to-text/prompting) should match the audio language. - type: string - response_format: - description: | - The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt. - type: string - default: json - temperature: - description: | - The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use [log probability](https://en.wikipedia.org/wiki/Log_probability) to automatically increase the temperature until certain thresholds are hit. - type: number - default: 0 - language: - description: | - The language of the input audio. Supplying the input language in [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) format will improve accuracy and latency. - type: string - required: - - file - - model - - # Note: This does not currently support the non-default response format types. - CreateTranscriptionResponse: - type: object - properties: - text: - type: string - required: - - text - - CreateTranslationRequest: - type: object - additionalProperties: false - properties: - file: - description: | - The audio file to translate, in one of these formats: mp3, mp4, mpeg, mpga, m4a, wav, or webm. - type: string - format: binary - model: - description: | - ID of the model to use. Only `whisper-1` is currently available. - type: string - prompt: - description: | - An optional text to guide the model's style or continue a previous audio segment. The [prompt](/docs/guides/speech-to-text/prompting) should be in English. - type: string - response_format: - description: | - The format of the transcript output, in one of these options: json, text, srt, verbose_json, or vtt. - type: string - default: json - temperature: - description: | - The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use [log probability](https://en.wikipedia.org/wiki/Log_probability) to automatically increase the temperature until certain thresholds are hit. - type: number - default: 0 - required: - - file - - model - - # Note: This does not currently support the non-default response format types. - CreateTranslationResponse: - type: object - properties: - text: - type: string - required: - - text - - Engine: - title: Engine - properties: - id: - type: string - object: - type: string - created: - type: integer - nullable: true - ready: - type: boolean - required: - - id - - object - - created - - ready - - Model: - title: Model - properties: - id: - type: string - object: - type: string - created: - type: integer - owned_by: - type: string - required: - - id - - object - - created - - owned_by - - OpenAIFile: - title: OpenAIFile - properties: - id: - type: string - object: - type: string - bytes: - type: integer - created_at: - type: integer - filename: - type: string - purpose: - type: string - status: - type: string - status_details: - type: object - nullable: true - required: - - id - - object - - bytes - - created_at - - filename - - purpose - - FineTune: - title: FineTune - properties: - id: - type: string - object: - type: string - created_at: - type: integer - updated_at: - type: integer - model: - type: string - fine_tuned_model: - type: string - nullable: true - organization_id: - type: string - status: - type: string - hyperparams: - type: object - training_files: - type: array - items: - $ref: '#/components/schemas/OpenAIFile' - validation_files: - type: array - items: - $ref: '#/components/schemas/OpenAIFile' - result_files: - type: array - items: - $ref: '#/components/schemas/OpenAIFile' - events: - type: array - items: - $ref: '#/components/schemas/FineTuneEvent' - required: - - id - - object - - created_at - - updated_at - - model - - fine_tuned_model - - organization_id - - status - - hyperparams - - training_files - - validation_files - - result_files - - FineTuneEvent: - title: FineTuneEvent - properties: - object: - type: string - created_at: - type: integer - level: - type: string - message: - type: string - required: - - object - - created_at - - level - - message - -x-oaiMeta: - groups: - - id: models - title: Models - description: | - List and describe the various models available in the API. You can refer to the [Models](/docs/models) documentation to understand what models are available and the differences between them. - - id: completions - title: Completions - description: | - Given a prompt, the model will return one or more predicted completions, and can also return the probabilities of alternative tokens at each position. - - id: chat - title: Chat - description: | - Given a chat conversation, the model will return a chat completion response. - - id: edits - title: Edits - description: | - Given a prompt and an instruction, the model will return an edited version of the prompt. - - id: images - title: Images - description: | - Given a prompt and/or an input image, the model will generate a new image. - - Related guide: [Image generation](/docs/guides/images) - - id: embeddings - title: Embeddings - description: | - Get a vector representation of a given input that can be easily consumed by machine learning models and algorithms. - - Related guide: [Embeddings](/docs/guides/embeddings) - - id: audio - title: Audio - description: | - Learn how to turn audio into text. - - Related guide: [Speech to text](/docs/guides/speech-to-text) - - id: files - title: Files - description: | - Files are used to upload documents that can be used with features like [Fine-tuning](/docs/api-reference/fine-tunes). - - id: fine-tunes - title: Fine-tunes - description: | - Manage fine-tuning jobs to tailor a model to your specific training data. - - Related guide: [Fine-tune models](/docs/guides/fine-tuning) - - id: moderations - title: Moderations - description: | - Given a input text, outputs if the model classifies it as violating OpenAI's content policy. - - Related guide: [Moderations](/docs/guides/moderation) - - id: searches - title: Searches - warning: - title: This endpoint is deprecated and will be removed on December 3rd, 2022 - message: We’ve developed new methods with better performance. [Learn more](https://help.openai.com/en/articles/6272952-search-transition-guide). - description: | - Given a query and a set of documents or labels, the model ranks each document based on its semantic similarity to the provided query. - - Related guide: [Search](/docs/guides/search) - - id: classifications - title: Classifications - warning: - title: This endpoint is deprecated and will be removed on December 3rd, 2022 - message: We’ve developed new methods with better performance. [Learn more](https://help.openai.com/en/articles/6272941-classifications-transition-guide). - description: | - Given a query and a set of labeled examples, the model will predict the most likely label for the query. Useful as a drop-in replacement for any ML classification or text-to-label task. - - Related guide: [Classification](/docs/guides/classifications) - - id: answers - title: Answers - warning: - title: This endpoint is deprecated and will be removed on December 3rd, 2022 - message: We’ve developed new methods with better performance. [Learn more](https://help.openai.com/en/articles/6233728-answers-transition-guide). - description: | - Given a question, a set of documents, and some examples, the API generates an answer to the question based on the information in the set of documents. This is useful for question-answering applications on sources of truth, like company documentation or a knowledge base. - - Related guide: [Question answering](/docs/guides/answers) - - id: engines - title: Engines - description: These endpoints describe and provide access to the various engines available in the API. - warning: - title: The Engines endpoints are deprecated. - message: Please use their replacement, [Models](/docs/api-reference/models), instead. [Learn more](https://help.openai.com/TODO). diff --git a/docs/extras/use_cases/apis/openapi.ipynb b/docs/extras/use_cases/apis/openapi.ipynb deleted file mode 100644 index 625a5f241..000000000 --- a/docs/extras/use_cases/apis/openapi.ipynb +++ /dev/null @@ -1,583 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "9fcaa37f", - "metadata": {}, - "source": [ - "# OpenAPI chain\n", - "\n", - "This notebook shows an example of using an OpenAPI chain to call an endpoint in natural language, and get back a response in natural language." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "efa6909f", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.tools import OpenAPISpec, APIOperation\n", - "from langchain.chains import OpenAPIEndpointChain\n", - "from langchain.requests import Requests\n", - "from langchain.llms import OpenAI" - ] - }, - { - "cell_type": "markdown", - "id": "71e38c6c", - "metadata": {}, - "source": [ - "## Load the spec\n", - "\n", - "Load a wrapper of the spec (so we can work with it more easily). You can load from a url or from a local file." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "0831271b", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Attempting to load an OpenAPI 3.0.1 spec. This may result in degraded performance. Convert your OpenAPI spec to 3.1.* spec for better support.\n" - ] - } - ], - "source": [ - "spec = OpenAPISpec.from_url(\n", - " \"https://www.klarna.com/us/shopping/public/openai/v0/api-docs/\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "189dd506", - "metadata": {}, - "outputs": [], - "source": [ - "# Alternative loading from file\n", - "# spec = OpenAPISpec.from_file(\"openai_openapi.yaml\")" - ] - }, - { - "cell_type": "markdown", - "id": "f7093582", - "metadata": {}, - "source": [ - "## Select the Operation\n", - "\n", - "In order to provide a focused on modular chain, we create a chain specifically only for one of the endpoints. Here we get an API operation from a specified endpoint and method." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "157494b9", - "metadata": {}, - "outputs": [], - "source": [ - "operation = APIOperation.from_openapi_spec(spec, \"/public/openai/v0/products\", \"get\")" - ] - }, - { - "cell_type": "markdown", - "id": "e3ab1c5c", - "metadata": {}, - "source": [ - "## Construct the chain\n", - "\n", - "We can now construct a chain to interact with it. In order to construct such a chain, we will pass in:\n", - "\n", - "1. The operation endpoint\n", - "2. A requests wrapper (can be used to handle authentication, etc)\n", - "3. The LLM to use to interact with it" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "788a7cef", - "metadata": {}, - "outputs": [], - "source": [ - "llm = OpenAI() # Load a Language Model" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "c5f27406", - "metadata": {}, - "outputs": [], - "source": [ - "chain = OpenAPIEndpointChain.from_api_operation(\n", - " operation,\n", - " llm,\n", - " requests=Requests(),\n", - " verbose=True,\n", - " return_intermediate_steps=True, # Return request and response text\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "23652053", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\u001b[1m> Entering new OpenAPIEndpointChain chain...\u001b[0m\n", - "\n", - "\n", - "\u001b[1m> Entering new APIRequesterChain chain...\u001b[0m\n", - "Prompt after formatting:\n", - "\u001b[32;1m\u001b[1;3mYou are a helpful AI Assistant. Please provide JSON arguments to agentFunc() based on the user's instructions.\n", - "\n", - "API_SCHEMA: ```typescript\n", - "/* API for fetching Klarna product information */\n", - "type productsUsingGET = (_: {\n", - "/* A precise query that matches one very small category or product that needs to be searched for to find the products the user is looking for. If the user explicitly stated what they want, use that as a query. The query is as specific as possible to the product name or category mentioned by the user in its singular form, and don't contain any clarifiers like latest, newest, cheapest, budget, premium, expensive or similar. The query is always taken from the latest topic, if there is a new topic a new query is started. */\n", - "\t\tq: string,\n", - "/* number of products returned */\n", - "\t\tsize?: number,\n", - "/* (Optional) Minimum price in local currency for the product searched for. Either explicitly stated by the user or implicitly inferred from a combination of the user's request and the kind of product searched for. */\n", - "\t\tmin_price?: number,\n", - "/* (Optional) Maximum price in local currency for the product searched for. Either explicitly stated by the user or implicitly inferred from a combination of the user's request and the kind of product searched for. */\n", - "\t\tmax_price?: number,\n", - "}) => any;\n", - "```\n", - "\n", - "USER_INSTRUCTIONS: \"whats the most expensive shirt?\"\n", - "\n", - "Your arguments must be plain json provided in a markdown block:\n", - "\n", - "ARGS: ```json\n", - "{valid json conforming to API_SCHEMA}\n", - "```\n", - "\n", - "Example\n", - "-----\n", - "\n", - "ARGS: ```json\n", - "{\"foo\": \"bar\", \"baz\": {\"qux\": \"quux\"}}\n", - "```\n", - "\n", - "The block must be no more than 1 line long, and all arguments must be valid JSON. All string arguments must be wrapped in double quotes.\n", - "You MUST strictly comply to the types indicated by the provided schema, including all required args.\n", - "\n", - "If you don't have sufficient information to call the function due to things like requiring specific uuid's, you can reply with the following message:\n", - "\n", - "Message: ```text\n", - "Concise response requesting the additional information that would make calling the function successful.\n", - "```\n", - "\n", - "Begin\n", - "-----\n", - "ARGS:\n", - "\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[32;1m\u001b[1;3m{\"q\": \"shirt\", \"size\": 1, \"max_price\": null}\u001b[0m\n", - "\u001b[36;1m\u001b[1;3m{\"products\":[{\"name\":\"Burberry Check Poplin Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3201810981/Clothing/Burberry-Check-Poplin-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$360.00\",\"attributes\":[\"Material:Cotton\",\"Target Group:Man\",\"Color:Gray,Blue,Beige\",\"Properties:Pockets\",\"Pattern:Checkered\"]}]}\u001b[0m\n", - "\n", - "\n", - "\u001b[1m> Entering new APIResponderChain chain...\u001b[0m\n", - "Prompt after formatting:\n", - "\u001b[32;1m\u001b[1;3mYou are a helpful AI assistant trained to answer user queries from API responses.\n", - "You attempted to call an API, which resulted in:\n", - "API_RESPONSE: {\"products\":[{\"name\":\"Burberry Check Poplin Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3201810981/Clothing/Burberry-Check-Poplin-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$360.00\",\"attributes\":[\"Material:Cotton\",\"Target Group:Man\",\"Color:Gray,Blue,Beige\",\"Properties:Pockets\",\"Pattern:Checkered\"]}]}\n", - "\n", - "USER_COMMENT: \"whats the most expensive shirt?\"\n", - "\n", - "\n", - "If the API_RESPONSE can answer the USER_COMMENT respond with the following markdown json block:\n", - "Response: ```json\n", - "{\"response\": \"Human-understandable synthesis of the API_RESPONSE\"}\n", - "```\n", - "\n", - "Otherwise respond with the following markdown json block:\n", - "Response Error: ```json\n", - "{\"response\": \"What you did and a concise statement of the resulting error. If it can be easily fixed, provide a suggestion.\"}\n", - "```\n", - "\n", - "You MUST respond as a markdown json code block. The person you are responding to CANNOT see the API_RESPONSE, so if there is any relevant information there you must include it in your response.\n", - "\n", - "Begin:\n", - "---\n", - "\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[33;1m\u001b[1;3mThe most expensive shirt in the API response is the Burberry Check Poplin Shirt, which costs $360.00.\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n" - ] - } - ], - "source": [ - "output = chain(\"whats the most expensive shirt?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "c000295e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'request_args': '{\"q\": \"shirt\", \"size\": 1, \"max_price\": null}',\n", - " 'response_text': '{\"products\":[{\"name\":\"Burberry Check Poplin Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3201810981/Clothing/Burberry-Check-Poplin-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$360.00\",\"attributes\":[\"Material:Cotton\",\"Target Group:Man\",\"Color:Gray,Blue,Beige\",\"Properties:Pockets\",\"Pattern:Checkered\"]}]}'}" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# View intermediate steps\n", - "output[\"intermediate_steps\"]" - ] - }, - { - "cell_type": "markdown", - "id": "092bdb4d", - "metadata": {}, - "source": [ - "## Return raw response\n", - "\n", - "We can also run this chain without synthesizing the response. This will have the effect of just returning the raw API output." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "4dff3849", - "metadata": {}, - "outputs": [], - "source": [ - "chain = OpenAPIEndpointChain.from_api_operation(\n", - " operation,\n", - " llm,\n", - " requests=Requests(),\n", - " verbose=True,\n", - " return_intermediate_steps=True, # Return request and response text\n", - " raw_response=True, # Return raw response\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "762499a9", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\u001b[1m> Entering new OpenAPIEndpointChain chain...\u001b[0m\n", - "\n", - "\n", - "\u001b[1m> Entering new APIRequesterChain chain...\u001b[0m\n", - "Prompt after formatting:\n", - "\u001b[32;1m\u001b[1;3mYou are a helpful AI Assistant. Please provide JSON arguments to agentFunc() based on the user's instructions.\n", - "\n", - "API_SCHEMA: ```typescript\n", - "/* API for fetching Klarna product information */\n", - "type productsUsingGET = (_: {\n", - "/* A precise query that matches one very small category or product that needs to be searched for to find the products the user is looking for. If the user explicitly stated what they want, use that as a query. The query is as specific as possible to the product name or category mentioned by the user in its singular form, and don't contain any clarifiers like latest, newest, cheapest, budget, premium, expensive or similar. The query is always taken from the latest topic, if there is a new topic a new query is started. */\n", - "\t\tq: string,\n", - "/* number of products returned */\n", - "\t\tsize?: number,\n", - "/* (Optional) Minimum price in local currency for the product searched for. Either explicitly stated by the user or implicitly inferred from a combination of the user's request and the kind of product searched for. */\n", - "\t\tmin_price?: number,\n", - "/* (Optional) Maximum price in local currency for the product searched for. Either explicitly stated by the user or implicitly inferred from a combination of the user's request and the kind of product searched for. */\n", - "\t\tmax_price?: number,\n", - "}) => any;\n", - "```\n", - "\n", - "USER_INSTRUCTIONS: \"whats the most expensive shirt?\"\n", - "\n", - "Your arguments must be plain json provided in a markdown block:\n", - "\n", - "ARGS: ```json\n", - "{valid json conforming to API_SCHEMA}\n", - "```\n", - "\n", - "Example\n", - "-----\n", - "\n", - "ARGS: ```json\n", - "{\"foo\": \"bar\", \"baz\": {\"qux\": \"quux\"}}\n", - "```\n", - "\n", - "The block must be no more than 1 line long, and all arguments must be valid JSON. All string arguments must be wrapped in double quotes.\n", - "You MUST strictly comply to the types indicated by the provided schema, including all required args.\n", - "\n", - "If you don't have sufficient information to call the function due to things like requiring specific uuid's, you can reply with the following message:\n", - "\n", - "Message: ```text\n", - "Concise response requesting the additional information that would make calling the function successful.\n", - "```\n", - "\n", - "Begin\n", - "-----\n", - "ARGS:\n", - "\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[32;1m\u001b[1;3m{\"q\": \"shirt\", \"max_price\": null}\u001b[0m\n", - "\u001b[36;1m\u001b[1;3m{\"products\":[{\"name\":\"Burberry Check Poplin Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3201810981/Clothing/Burberry-Check-Poplin-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$360.00\",\"attributes\":[\"Material:Cotton\",\"Target Group:Man\",\"Color:Gray,Blue,Beige\",\"Properties:Pockets\",\"Pattern:Checkered\"]},{\"name\":\"Burberry Vintage Check Cotton Shirt - Beige\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl359/3200280807/Children-s-Clothing/Burberry-Vintage-Check-Cotton-Shirt-Beige/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$229.02\",\"attributes\":[\"Material:Cotton,Elastane\",\"Color:Beige\",\"Model:Boy\",\"Pattern:Checkered\"]},{\"name\":\"Burberry Vintage Check Stretch Cotton Twill Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3202342515/Clothing/Burberry-Vintage-Check-Stretch-Cotton-Twill-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$309.99\",\"attributes\":[\"Material:Elastane/Lycra/Spandex,Cotton\",\"Target Group:Woman\",\"Color:Beige\",\"Properties:Stretch\",\"Pattern:Checkered\"]},{\"name\":\"Burberry Somerton Check Shirt - Camel\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3201112728/Clothing/Burberry-Somerton-Check-Shirt-Camel/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$450.00\",\"attributes\":[\"Material:Elastane/Lycra/Spandex,Cotton\",\"Target Group:Man\",\"Color:Beige\"]},{\"name\":\"Magellan Outdoors Laguna Madre Solid Short Sleeve Fishing Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3203102142/Clothing/Magellan-Outdoors-Laguna-Madre-Solid-Short-Sleeve-Fishing-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$19.99\",\"attributes\":[\"Material:Polyester,Nylon\",\"Target Group:Man\",\"Color:Red,Pink,White,Blue,Purple,Beige,Black,Green\",\"Properties:Pockets\",\"Pattern:Solid Color\"]}]}\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n" - ] - } - ], - "source": [ - "output = chain(\"whats the most expensive shirt?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "4afc021a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'instructions': 'whats the most expensive shirt?',\n", - " 'output': '{\"products\":[{\"name\":\"Burberry Check Poplin Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3201810981/Clothing/Burberry-Check-Poplin-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$360.00\",\"attributes\":[\"Material:Cotton\",\"Target Group:Man\",\"Color:Gray,Blue,Beige\",\"Properties:Pockets\",\"Pattern:Checkered\"]},{\"name\":\"Burberry Vintage Check Cotton Shirt - Beige\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl359/3200280807/Children-s-Clothing/Burberry-Vintage-Check-Cotton-Shirt-Beige/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$229.02\",\"attributes\":[\"Material:Cotton,Elastane\",\"Color:Beige\",\"Model:Boy\",\"Pattern:Checkered\"]},{\"name\":\"Burberry Vintage Check Stretch Cotton Twill Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3202342515/Clothing/Burberry-Vintage-Check-Stretch-Cotton-Twill-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$309.99\",\"attributes\":[\"Material:Elastane/Lycra/Spandex,Cotton\",\"Target Group:Woman\",\"Color:Beige\",\"Properties:Stretch\",\"Pattern:Checkered\"]},{\"name\":\"Burberry Somerton Check Shirt - Camel\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3201112728/Clothing/Burberry-Somerton-Check-Shirt-Camel/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$450.00\",\"attributes\":[\"Material:Elastane/Lycra/Spandex,Cotton\",\"Target Group:Man\",\"Color:Beige\"]},{\"name\":\"Magellan Outdoors Laguna Madre Solid Short Sleeve Fishing Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3203102142/Clothing/Magellan-Outdoors-Laguna-Madre-Solid-Short-Sleeve-Fishing-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$19.99\",\"attributes\":[\"Material:Polyester,Nylon\",\"Target Group:Man\",\"Color:Red,Pink,White,Blue,Purple,Beige,Black,Green\",\"Properties:Pockets\",\"Pattern:Solid Color\"]}]}',\n", - " 'intermediate_steps': {'request_args': '{\"q\": \"shirt\", \"max_price\": null}',\n", - " 'response_text': '{\"products\":[{\"name\":\"Burberry Check Poplin Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3201810981/Clothing/Burberry-Check-Poplin-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$360.00\",\"attributes\":[\"Material:Cotton\",\"Target Group:Man\",\"Color:Gray,Blue,Beige\",\"Properties:Pockets\",\"Pattern:Checkered\"]},{\"name\":\"Burberry Vintage Check Cotton Shirt - Beige\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl359/3200280807/Children-s-Clothing/Burberry-Vintage-Check-Cotton-Shirt-Beige/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$229.02\",\"attributes\":[\"Material:Cotton,Elastane\",\"Color:Beige\",\"Model:Boy\",\"Pattern:Checkered\"]},{\"name\":\"Burberry Vintage Check Stretch Cotton Twill Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3202342515/Clothing/Burberry-Vintage-Check-Stretch-Cotton-Twill-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$309.99\",\"attributes\":[\"Material:Elastane/Lycra/Spandex,Cotton\",\"Target Group:Woman\",\"Color:Beige\",\"Properties:Stretch\",\"Pattern:Checkered\"]},{\"name\":\"Burberry Somerton Check Shirt - Camel\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3201112728/Clothing/Burberry-Somerton-Check-Shirt-Camel/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$450.00\",\"attributes\":[\"Material:Elastane/Lycra/Spandex,Cotton\",\"Target Group:Man\",\"Color:Beige\"]},{\"name\":\"Magellan Outdoors Laguna Madre Solid Short Sleeve Fishing Shirt\",\"url\":\"https://www.klarna.com/us/shopping/pl/cl10001/3203102142/Clothing/Magellan-Outdoors-Laguna-Madre-Solid-Short-Sleeve-Fishing-Shirt/?utm_source=openai&ref-site=openai_plugin\",\"price\":\"$19.99\",\"attributes\":[\"Material:Polyester,Nylon\",\"Target Group:Man\",\"Color:Red,Pink,White,Blue,Purple,Beige,Black,Green\",\"Properties:Pockets\",\"Pattern:Solid Color\"]}]}'}}" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "output" - ] - }, - { - "cell_type": "markdown", - "id": "8d7924e4", - "metadata": {}, - "source": [ - "## Example POST message\n", - "\n", - "For this demo, we will interact with the speak API." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "c56b1a04", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Attempting to load an OpenAPI 3.0.1 spec. This may result in degraded performance. Convert your OpenAPI spec to 3.1.* spec for better support.\n", - "Attempting to load an OpenAPI 3.0.1 spec. This may result in degraded performance. Convert your OpenAPI spec to 3.1.* spec for better support.\n" - ] - } - ], - "source": [ - "spec = OpenAPISpec.from_url(\"https://api.speak.com/openapi.yaml\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "177d8275", - "metadata": {}, - "outputs": [], - "source": [ - "operation = APIOperation.from_openapi_spec(\n", - " spec, \"/v1/public/openai/explain-task\", \"post\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "835c5ddc", - "metadata": {}, - "outputs": [], - "source": [ - "llm = OpenAI()\n", - "chain = OpenAPIEndpointChain.from_api_operation(\n", - " operation, llm, requests=Requests(), verbose=True, return_intermediate_steps=True\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "59855d60", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\u001b[1m> Entering new OpenAPIEndpointChain chain...\u001b[0m\n", - "\n", - "\n", - "\u001b[1m> Entering new APIRequesterChain chain...\u001b[0m\n", - "Prompt after formatting:\n", - "\u001b[32;1m\u001b[1;3mYou are a helpful AI Assistant. Please provide JSON arguments to agentFunc() based on the user's instructions.\n", - "\n", - "API_SCHEMA: ```typescript\n", - "type explainTask = (_: {\n", - "/* Description of the task that the user wants to accomplish or do. For example, \"tell the waiter they messed up my order\" or \"compliment someone on their shirt\" */\n", - " task_description?: string,\n", - "/* The foreign language that the user is learning and asking about. The value can be inferred from question - for example, if the user asks \"how do i ask a girl out in mexico city\", the value should be \"Spanish\" because of Mexico City. Always use the full name of the language (e.g. Spanish, French). */\n", - " learning_language?: string,\n", - "/* The user's native language. Infer this value from the language the user asked their question in. Always use the full name of the language (e.g. Spanish, French). */\n", - " native_language?: string,\n", - "/* A description of any additional context in the user's question that could affect the explanation - e.g. setting, scenario, situation, tone, speaking style and formality, usage notes, or any other qualifiers. */\n", - " additional_context?: string,\n", - "/* Full text of the user's question. */\n", - " full_query?: string,\n", - "}) => any;\n", - "```\n", - "\n", - "USER_INSTRUCTIONS: \"How would ask for more tea in Delhi?\"\n", - "\n", - "Your arguments must be plain json provided in a markdown block:\n", - "\n", - "ARGS: ```json\n", - "{valid json conforming to API_SCHEMA}\n", - "```\n", - "\n", - "Example\n", - "-----\n", - "\n", - "ARGS: ```json\n", - "{\"foo\": \"bar\", \"baz\": {\"qux\": \"quux\"}}\n", - "```\n", - "\n", - "The block must be no more than 1 line long, and all arguments must be valid JSON. All string arguments must be wrapped in double quotes.\n", - "You MUST strictly comply to the types indicated by the provided schema, including all required args.\n", - "\n", - "If you don't have sufficient information to call the function due to things like requiring specific uuid's, you can reply with the following message:\n", - "\n", - "Message: ```text\n", - "Concise response requesting the additional information that would make calling the function successful.\n", - "```\n", - "\n", - "Begin\n", - "-----\n", - "ARGS:\n", - "\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[32;1m\u001b[1;3m{\"task_description\": \"ask for more tea\", \"learning_language\": \"Hindi\", \"native_language\": \"English\", \"full_query\": \"How would I ask for more tea in Delhi?\"}\u001b[0m\n", - "\u001b[36;1m\u001b[1;3m{\"explanation\":\"\\nऔर चाय लाओ। (Aur chai lao.) \\n\\n\\n\\n1. \\\"चाय थोड़ी ज्यादा मिल सकती है?\\\" *(Chai thodi zyada mil sakti hai? - Polite, asking if more tea is available)*\\n2. \\\"मुझे महसूस हो रहा है कि मुझे कुछ अन्य प्रकार की चाय पीनी चाहिए।\\\" *(Mujhe mehsoos ho raha hai ki mujhe kuch anya prakar ki chai peeni chahiye. - Formal, indicating a desire for a different type of tea)*\\n3. \\\"क्या मुझे or cup में milk/tea powder मिल सकता है?\\\" *(Kya mujhe aur cup mein milk/tea powder mil sakta hai? - Very informal/casual tone, asking for an extra serving of milk or tea powder)*\\n\\n\\n\\nIn India and Indian culture, serving guests with food and beverages holds great importance in hospitality. You will find people always offering drinks like water or tea to their guests as soon as they arrive at their house or office.\\n\\n\\n\\nAt home during breakfast.\\nPreeti: सर, क्या main aur cups chai lekar aaun? (Sir,kya main aur cups chai lekar aaun? - Sir, should I get more tea cups?)\\nRahul: हां,बिल्कुल। और चाय की मात्रा में भी थोड़ा सा इजाफा करना। (Haan,bilkul. Aur chai ki matra mein bhi thoda sa eejafa karna. - Yes, please. And add a little extra in the quantity of tea as well.)\\n\\n\\n*[Report an issue or leave feedback](https://speak.com/chatgpt?rid=d4mcapbkopo164pqpbk321oc})*\",\"extra_response_instructions\":\"Use all information in the API response and fully render all Markdown.\\nAlways end your response with a link to report an issue or leave feedback on the plugin.\"}\u001b[0m\n", - "\n", - "\n", - "\u001b[1m> Entering new APIResponderChain chain...\u001b[0m\n", - "Prompt after formatting:\n", - "\u001b[32;1m\u001b[1;3mYou are a helpful AI assistant trained to answer user queries from API responses.\n", - "You attempted to call an API, which resulted in:\n", - "API_RESPONSE: {\"explanation\":\"\\nऔर चाय लाओ। (Aur chai lao.) \\n\\n\\n\\n1. \\\"चाय थोड़ी ज्यादा मिल सकती है?\\\" *(Chai thodi zyada mil sakti hai? - Polite, asking if more tea is available)*\\n2. \\\"मुझे महसूस हो रहा है कि मुझे कुछ अन्य प्रकार की चाय पीनी चाहिए।\\\" *(Mujhe mehsoos ho raha hai ki mujhe kuch anya prakar ki chai peeni chahiye. - Formal, indicating a desire for a different type of tea)*\\n3. \\\"क्या मुझे or cup में milk/tea powder मिल सकता है?\\\" *(Kya mujhe aur cup mein milk/tea powder mil sakta hai? - Very informal/casual tone, asking for an extra serving of milk or tea powder)*\\n\\n\\n\\nIn India and Indian culture, serving guests with food and beverages holds great importance in hospitality. You will find people always offering drinks like water or tea to their guests as soon as they arrive at their house or office.\\n\\n\\n\\nAt home during breakfast.\\nPreeti: सर, क्या main aur cups chai lekar aaun? (Sir,kya main aur cups chai lekar aaun? - Sir, should I get more tea cups?)\\nRahul: हां,बिल्कुल। और चाय की मात्रा में भी थोड़ा सा इजाफा करना। (Haan,bilkul. Aur chai ki matra mein bhi thoda sa eejafa karna. - Yes, please. And add a little extra in the quantity of tea as well.)\\n\\n\\n*[Report an issue or leave feedback](https://speak.com/chatgpt?rid=d4mcapbkopo164pqpbk321oc})*\",\"extra_response_instructions\":\"Use all information in the API response and fully render all Markdown.\\nAlways end your response with a link to report an issue or leave feedback on the plugin.\"}\n", - "\n", - "USER_COMMENT: \"How would ask for more tea in Delhi?\"\n", - "\n", - "\n", - "If the API_RESPONSE can answer the USER_COMMENT respond with the following markdown json block:\n", - "Response: ```json\n", - "{\"response\": \"Concise response to USER_COMMENT based on API_RESPONSE.\"}\n", - "```\n", - "\n", - "Otherwise respond with the following markdown json block:\n", - "Response Error: ```json\n", - "{\"response\": \"What you did and a concise statement of the resulting error. If it can be easily fixed, provide a suggestion.\"}\n", - "```\n", - "\n", - "You MUST respond as a markdown json code block.\n", - "\n", - "Begin:\n", - "---\n", - "\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[33;1m\u001b[1;3mIn Delhi you can ask for more tea by saying 'Chai thodi zyada mil sakti hai?'\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n" - ] - } - ], - "source": [ - "output = chain(\"How would ask for more tea in Delhi?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "91bddb18", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['{\"task_description\": \"ask for more tea\", \"learning_language\": \"Hindi\", \"native_language\": \"English\", \"full_query\": \"How would I ask for more tea in Delhi?\"}',\n", - " '{\"explanation\":\"\\\\nऔर चाय लाओ। (Aur chai lao.) \\\\n\\\\n\\\\n\\\\n1. \\\\\"चाय थोड़ी ज्यादा मिल सकती है?\\\\\" *(Chai thodi zyada mil sakti hai? - Polite, asking if more tea is available)*\\\\n2. \\\\\"मुझे महसूस हो रहा है कि मुझे कुछ अन्य प्रकार की चाय पीनी चाहिए।\\\\\" *(Mujhe mehsoos ho raha hai ki mujhe kuch anya prakar ki chai peeni chahiye. - Formal, indicating a desire for a different type of tea)*\\\\n3. \\\\\"क्या मुझे or cup में milk/tea powder मिल सकता है?\\\\\" *(Kya mujhe aur cup mein milk/tea powder mil sakta hai? - Very informal/casual tone, asking for an extra serving of milk or tea powder)*\\\\n\\\\n\\\\n\\\\nIn India and Indian culture, serving guests with food and beverages holds great importance in hospitality. You will find people always offering drinks like water or tea to their guests as soon as they arrive at their house or office.\\\\n\\\\n\\\\n\\\\nAt home during breakfast.\\\\nPreeti: सर, क्या main aur cups chai lekar aaun? (Sir,kya main aur cups chai lekar aaun? - Sir, should I get more tea cups?)\\\\nRahul: हां,बिल्कुल। और चाय की मात्रा में भी थोड़ा सा इजाफा करना। (Haan,bilkul. Aur chai ki matra mein bhi thoda sa eejafa karna. - Yes, please. And add a little extra in the quantity of tea as well.)\\\\n\\\\n\\\\n*[Report an issue or leave feedback](https://speak.com/chatgpt?rid=d4mcapbkopo164pqpbk321oc})*\",\"extra_response_instructions\":\"Use all information in the API response and fully render all Markdown.\\\\nAlways end your response with a link to report an issue or leave feedback on the plugin.\"}']" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Show the API chain's intermediate steps\n", - "output[\"intermediate_steps\"]" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/extras/use_cases/apis/openapi_openai.ipynb b/docs/extras/use_cases/apis/openapi_openai.ipynb deleted file mode 100644 index bb1cbce59..000000000 --- a/docs/extras/use_cases/apis/openapi_openai.ipynb +++ /dev/null @@ -1,249 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "e734b314", - "metadata": {}, - "source": [ - "# OpenAPI calls with OpenAI functions\n", - "\n", - "In this notebook we'll show how to create a chain that automatically makes calls to an API based only on an OpenAPI spec. Under the hood, we're parsing the OpenAPI spec into a JSON schema that the OpenAI functions API can handle. This allows ChatGPT to automatically select and populate the relevant API call to make for any user input. Using the output of ChatGPT we then make the actual API call, and return the result." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "555661b5", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.chains.openai_functions.openapi import get_openapi_chain" - ] - }, - { - "cell_type": "markdown", - "id": "a95f510a", - "metadata": {}, - "source": [ - "## Query Klarna" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "08e19b64", - "metadata": {}, - "outputs": [], - "source": [ - "chain = get_openapi_chain(\n", - " \"https://www.klarna.com/us/shopping/public/openai/v0/api-docs/\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "3959f866", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'products': [{'name': \"Tommy Hilfiger Men's Short Sleeve Button-Down Shirt\",\n", - " 'url': 'https://www.klarna.com/us/shopping/pl/cl10001/3204878580/Clothing/Tommy-Hilfiger-Men-s-Short-Sleeve-Button-Down-Shirt/?utm_source=openai&ref-site=openai_plugin',\n", - " 'price': '$26.78',\n", - " 'attributes': ['Material:Linen,Cotton',\n", - " 'Target Group:Man',\n", - " 'Color:Gray,Pink,White,Blue,Beige,Black,Turquoise',\n", - " 'Size:S,XL,M,XXL']},\n", - " {'name': \"Van Heusen Men's Long Sleeve Button-Down Shirt\",\n", - " 'url': 'https://www.klarna.com/us/shopping/pl/cl10001/3201809514/Clothing/Van-Heusen-Men-s-Long-Sleeve-Button-Down-Shirt/?utm_source=openai&ref-site=openai_plugin',\n", - " 'price': '$18.89',\n", - " 'attributes': ['Material:Cotton',\n", - " 'Target Group:Man',\n", - " 'Color:Red,Gray,White,Blue',\n", - " 'Size:XL,XXL']},\n", - " {'name': 'Brixton Bowery Flannel Shirt',\n", - " 'url': 'https://www.klarna.com/us/shopping/pl/cl10001/3202331096/Clothing/Brixton-Bowery-Flannel-Shirt/?utm_source=openai&ref-site=openai_plugin',\n", - " 'price': '$34.48',\n", - " 'attributes': ['Material:Cotton',\n", - " 'Target Group:Man',\n", - " 'Color:Gray,Blue,Black,Orange',\n", - " 'Size:XL,3XL,4XL,5XL,L,M,XXL']},\n", - " {'name': 'Cubavera Four Pocket Guayabera Shirt',\n", - " 'url': 'https://www.klarna.com/us/shopping/pl/cl10001/3202055522/Clothing/Cubavera-Four-Pocket-Guayabera-Shirt/?utm_source=openai&ref-site=openai_plugin',\n", - " 'price': '$23.22',\n", - " 'attributes': ['Material:Polyester,Cotton',\n", - " 'Target Group:Man',\n", - " 'Color:Red,White,Blue,Black',\n", - " 'Size:S,XL,L,M,XXL']},\n", - " {'name': 'Theory Sylvain Shirt - Eclipse',\n", - " 'url': 'https://www.klarna.com/us/shopping/pl/cl10001/3202028254/Clothing/Theory-Sylvain-Shirt-Eclipse/?utm_source=openai&ref-site=openai_plugin',\n", - " 'price': '$86.01',\n", - " 'attributes': ['Material:Polyester,Cotton',\n", - " 'Target Group:Man',\n", - " 'Color:Blue',\n", - " 'Size:S,XL,XS,L,M,XXL']}]}" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "chain.run(\"What are some options for a men's large blue button down shirt\")" - ] - }, - { - "cell_type": "markdown", - "id": "6f648c77", - "metadata": {}, - "source": [ - "## Query a translation service\n", - "\n", - "Additionally, see the request payload by setting `verbose=True`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bf6cd695", - "metadata": {}, - "outputs": [], - "source": [ - "chain = get_openapi_chain(\"https://api.speak.com/openapi.yaml\", verbose=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "1ba51609", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\u001b[1m> Entering new chain...\u001b[0m\n", - "\n", - "\n", - "\u001b[1m> Entering new chain...\u001b[0m\n", - "Prompt after formatting:\n", - "\u001b[32;1m\u001b[1;3mHuman: Use the provided API's to respond to this user query:\n", - "\n", - "How would you say no thanks in Russian\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\n", - "\n", - "\u001b[1m> Entering new chain...\u001b[0m\n", - "Calling endpoint \u001b[32;1m\u001b[1;3mtranslate\u001b[0m with arguments:\n", - "\u001b[32;1m\u001b[1;3m{\n", - " \"json\": {\n", - " \"phrase_to_translate\": \"no thanks\",\n", - " \"learning_language\": \"russian\",\n", - " \"native_language\": \"english\",\n", - " \"additional_context\": \"\",\n", - " \"full_query\": \"How would you say no thanks in Russian\"\n", - " }\n", - "}\u001b[0m\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n" - ] - }, - { - "data": { - "text/plain": [ - "{'explanation': '\\nНет, спасибо. (Net, spasibo)\\n\\n\\n\\n1. \"Нет, я в порядке\" *(Neutral/Formal - Can be used in professional settings or formal situations.)*\\n2. \"Нет, спасибо, я откажусь\" *(Formal - Can be used in polite settings, such as a fancy dinner with colleagues or acquaintances.)*\\n3. \"Не надо\" *(Informal - Can be used in informal situations, such as declining an offer from a friend.)*\\n\\n\\n\\nMax is being offered a cigarette at a party.\\n* Sasha: \"Хочешь покурить?\"\\n* Max: \"Нет, спасибо. Я бросил.\"\\n* Sasha: \"Окей, понятно.\"\\n\\n\\n*[Report an issue or leave feedback](https://speak.com/chatgpt?rid=noczaa460do8yqs8xjun6zdm})*',\n", - " 'extra_response_instructions': 'Use all information in the API response and fully render all Markdown.\\nAlways end your response with a link to report an issue or leave feedback on the plugin.'}" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "chain.run(\"How would you say no thanks in Russian\")" - ] - }, - { - "cell_type": "markdown", - "id": "4923a291", - "metadata": {}, - "source": [ - "## Query XKCD" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a9198f62", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "chain = get_openapi_chain(\n", - " \"https://gist.githubusercontent.com/roaldnefs/053e505b2b7a807290908fe9aa3e1f00/raw/0a212622ebfef501163f91e23803552411ed00e4/openapi.yaml\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "3110c398", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'month': '6',\n", - " 'num': 2793,\n", - " 'link': '',\n", - " 'year': '2023',\n", - " 'news': '',\n", - " 'safe_title': 'Garden Path Sentence',\n", - " 'transcript': '',\n", - " 'alt': 'Arboretum Owner Denied Standing in Garden Path Suit on Grounds Grounds Appealing Appealing',\n", - " 'img': 'https://imgs.xkcd.com/comics/garden_path_sentence.png',\n", - " 'title': 'Garden Path Sentence',\n", - " 'day': '23'}" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "chain.run(\"What's today's comic?\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "venv", - "language": "python", - "name": "venv" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/snippets/modules/chains/popular/api.mdx b/docs/snippets/modules/chains/popular/api.mdx deleted file mode 100644 index 3b1a4ec0f..000000000 --- a/docs/snippets/modules/chains/popular/api.mdx +++ /dev/null @@ -1,105 +0,0 @@ -```python -from langchain.chains.api.prompt import API_RESPONSE_PROMPT -``` - - -```python -from langchain.chains import APIChain -from langchain.prompts.prompt import PromptTemplate - - -from langchain.llms import OpenAI - -llm = OpenAI(temperature=0) -``` - -## OpenMeteo Example - - -```python -from langchain.chains.api import open_meteo_docs -chain_new = APIChain.from_llm_and_api_docs(llm, open_meteo_docs.OPEN_METEO_DOCS, verbose=True) -``` - - -```python -chain_new.run('What is the weather like right now in Munich, Germany in degrees Fahrenheit?') -``` - - - -``` - - - > Entering new APIChain chain... - https://api.open-meteo.com/v1/forecast?latitude=48.1351&longitude=11.5820&temperature_unit=fahrenheit¤t_weather=true - {"latitude":48.14,"longitude":11.58,"generationtime_ms":0.33104419708251953,"utc_offset_seconds":0,"timezone":"GMT","timezone_abbreviation":"GMT","elevation":521.0,"current_weather":{"temperature":33.4,"windspeed":6.8,"winddirection":198.0,"weathercode":2,"time":"2023-01-16T01:00"}} - - > Finished chain. - - - - - - ' The current temperature in Munich, Germany is 33.4 degrees Fahrenheit with a windspeed of 6.8 km/h and a wind direction of 198 degrees. The weathercode is 2.' -``` - - - -## TMDB Example - - -```python -import os -os.environ['TMDB_BEARER_TOKEN'] = "" -``` - - -```python -from langchain.chains.api import tmdb_docs -headers = {"Authorization": f"Bearer {os.environ['TMDB_BEARER_TOKEN']}"} -chain = APIChain.from_llm_and_api_docs(llm, tmdb_docs.TMDB_DOCS, headers=headers, verbose=True) -``` - - -```python -chain.run("Search for 'Avatar'") -``` - - - -``` - - - > Entering new APIChain chain... - https://api.themoviedb.org/3/search/movie?query=Avatar&language=en-US - {"page":1,"results":[{"adult":false,"backdrop_path":"/o0s4XsEDfDlvit5pDRKjzXR4pp2.jpg","genre_ids":[28,12,14,878],"id":19995,"original_language":"en","original_title":"Avatar","overview":"In the 22nd century, a paraplegic Marine is dispatched to the moon Pandora on a unique mission, but becomes torn between following orders and protecting an alien civilization.","popularity":2041.691,"poster_path":"/jRXYjXNq0Cs2TcJjLkki24MLp7u.jpg","release_date":"2009-12-15","title":"Avatar","video":false,"vote_average":7.6,"vote_count":27777},{"adult":false,"backdrop_path":"/s16H6tpK2utvwDtzZ8Qy4qm5Emw.jpg","genre_ids":[878,12,28],"id":76600,"original_language":"en","original_title":"Avatar: The Way of Water","overview":"Set more than a decade after the events of the first film, learn the story of the Sully family (Jake, Neytiri, and their kids), the trouble that follows them, the lengths they go to keep each other safe, the battles they fight to stay alive, and the tragedies they endure.","popularity":3948.296,"poster_path":"/t6HIqrRAclMCA60NsSmeqe9RmNV.jpg","release_date":"2022-12-14","title":"Avatar: The Way of Water","video":false,"vote_average":7.7,"vote_count":4219},{"adult":false,"backdrop_path":"/uEwGFGtao9YG2JolmdvtHLLVbA9.jpg","genre_ids":[99],"id":111332,"original_language":"en","original_title":"Avatar: Creating the World of Pandora","overview":"The Making-of James Cameron's Avatar. It shows interesting parts of the work on the set.","popularity":541.809,"poster_path":"/sjf3xjuofCtDhZghJRzXlTiEjJe.jpg","release_date":"2010-02-07","title":"Avatar: Creating the World of Pandora","video":false,"vote_average":7.3,"vote_count":35},{"adult":false,"backdrop_path":null,"genre_ids":[99],"id":287003,"original_language":"en","original_title":"Avatar: Scene Deconstruction","overview":"The deconstruction of the Avatar scenes and sets","popularity":394.941,"poster_path":"/uCreCQFReeF0RiIXkQypRYHwikx.jpg","release_date":"2009-12-18","title":"Avatar: Scene Deconstruction","video":false,"vote_average":7.8,"vote_count":12},{"adult":false,"backdrop_path":null,"genre_ids":[28,18,878,12,14],"id":83533,"original_language":"en","original_title":"Avatar 3","overview":"","popularity":172.488,"poster_path":"/4rXqTMlkEaMiJjiG0Z2BX6F6Dkm.jpg","release_date":"2024-12-18","title":"Avatar 3","video":false,"vote_average":0,"vote_count":0},{"adult":false,"backdrop_path":null,"genre_ids":[28,878,12,14],"id":216527,"original_language":"en","original_title":"Avatar 4","overview":"","popularity":162.536,"poster_path":"/qzMYKnT4MG1d0gnhwytr4cKhUvS.jpg","release_date":"2026-12-16","title":"Avatar 4","video":false,"vote_average":0,"vote_count":0},{"adult":false,"backdrop_path":null,"genre_ids":[28,12,14,878],"id":393209,"original_language":"en","original_title":"Avatar 5","overview":"","popularity":124.722,"poster_path":"/rtmmvqkIC5zDMEd638Es2woxbz8.jpg","release_date":"2028-12-20","title":"Avatar 5","video":false,"vote_average":0,"vote_count":0},{"adult":false,"backdrop_path":"/nNceJtrrovG1MUBHMAhId0ws9Gp.jpg","genre_ids":[99],"id":183392,"original_language":"en","original_title":"Capturing Avatar","overview":"Capturing Avatar is a feature length behind-the-scenes documentary about the making of Avatar. It uses footage from the film's development, as well as stock footage from as far back as the production of Titanic in 1995. Also included are numerous interviews with cast, artists, and other crew members. The documentary was released as a bonus feature on the extended collector's edition of Avatar.","popularity":109.842,"poster_path":"/26SMEXJl3978dn2svWBSqHbLl5U.jpg","release_date":"2010-11-16","title":"Capturing Avatar","video":false,"vote_average":7.8,"vote_count":39},{"adult":false,"backdrop_path":"/eoAvHxfbaPOcfiQyjqypWIXWxDr.jpg","genre_ids":[99],"id":1059673,"original_language":"en","original_title":"Avatar: The Deep Dive - A Special Edition of 20/20","overview":"An inside look at one of the most anticipated movie sequels ever with James Cameron and cast.","popularity":629.825,"poster_path":"/rtVeIsmeXnpjNbEKnm9Say58XjV.jpg","release_date":"2022-12-14","title":"Avatar: The Deep Dive - A Special Edition of 20/20","video":false,"vote_average":6.5,"vote_count":5},{"adult":false,"backdrop_path":null,"genre_ids":[99],"id":278698,"original_language":"en","original_title":"Avatar Spirits","overview":"Bryan Konietzko and Michael Dante DiMartino, co-creators of the hit television series, Avatar: The Last Airbender, reflect on the creation of the masterful series.","popularity":51.593,"poster_path":"/oBWVyOdntLJd5bBpE0wkpN6B6vy.jpg","release_date":"2010-06-22","title":"Avatar Spirits","video":false,"vote_average":9,"vote_count":16},{"adult":false,"backdrop_path":"/cACUWJKvRfhXge7NC0xxoQnkQNu.jpg","genre_ids":[10402],"id":993545,"original_language":"fr","original_title":"Avatar - Au Hellfest 2022","overview":"","popularity":21.992,"poster_path":"/fw6cPIsQYKjd1YVQanG2vLc5HGo.jpg","release_date":"2022-06-26","title":"Avatar - Au Hellfest 2022","video":false,"vote_average":8,"vote_count":4},{"adult":false,"backdrop_path":null,"genre_ids":[],"id":931019,"original_language":"en","original_title":"Avatar: Enter The World","overview":"A behind the scenes look at the new James Cameron blockbuster “Avatar”, which stars Aussie Sam Worthington. Hastily produced by Australia’s Nine Network following the film’s release.","popularity":30.903,"poster_path":"/9MHY9pYAgs91Ef7YFGWEbP4WJqC.jpg","release_date":"2009-12-05","title":"Avatar: Enter The World","video":false,"vote_average":2,"vote_count":1},{"adult":false,"backdrop_path":null,"genre_ids":[],"id":287004,"original_language":"en","original_title":"Avatar: Production Materials","overview":"Production material overview of what was used in Avatar","popularity":12.389,"poster_path":null,"release_date":"2009-12-18","title":"Avatar: Production Materials","video":true,"vote_average":6,"vote_count":4},{"adult":false,"backdrop_path":"/x43RWEZg9tYRPgnm43GyIB4tlER.jpg","genre_ids":[],"id":740017,"original_language":"es","original_title":"Avatar: Agni Kai","overview":"","popularity":9.462,"poster_path":"/y9PrKMUTA6NfIe5FE92tdwOQ2sH.jpg","release_date":"2020-01-18","title":"Avatar: Agni Kai","video":false,"vote_average":7,"vote_count":1},{"adult":false,"backdrop_path":"/e8mmDO7fKK93T4lnxl4Z2zjxXZV.jpg","genre_ids":[],"id":668297,"original_language":"en","original_title":"The Last Avatar","overview":"The Last Avatar is a mystical adventure film, a story of a young man who leaves Hollywood to find himself. What he finds is beyond his wildest imagination. Based on ancient prophecy, contemporary truth seeking and the future of humanity, The Last Avatar is a film that takes transformational themes and makes them relevant for audiences of all ages. Filled with love, magic, mystery, conspiracy, psychics, underground cities, secret societies, light bodies and much more, The Last Avatar tells the story of the emergence of Kalki Avatar- the final Avatar of our current Age of Chaos. Kalki is also a metaphor for the innate power and potential that lies within humanity to awaken and create a world of truth, harmony and possibility.","popularity":8.786,"poster_path":"/XWz5SS5g5mrNEZjv3FiGhqCMOQ.jpg","release_date":"2014-12-06","title":"The Last Avatar","video":false,"vote_average":4.5,"vote_count":2},{"adult":false,"backdrop_path":null,"genre_ids":[],"id":424768,"original_language":"en","original_title":"Avatar:[2015] Wacken Open Air","overview":"Started in the summer of 2001 by drummer John Alfredsson and vocalist Christian Rimmi under the name Lost Soul. The band offers a free mp3 download to a song called \"Bloody Knuckles\" if one subscribes to their newsletter. In 2005 they appeared on the compilation “Listen to Your Inner Voice” together with 17 other bands released by Inner Voice Records.","popularity":6.634,"poster_path":null,"release_date":"2015-08-01","title":"Avatar:[2015] Wacken Open Air","video":false,"vote_average":8,"vote_count":1},{"adult":false,"backdrop_path":null,"genre_ids":[],"id":812836,"original_language":"en","original_title":"Avatar - Live At Graspop 2018","overview":"Live At Graspop Festival Belgium 2018","popularity":9.855,"poster_path":null,"release_date":"","title":"Avatar - Live At Graspop 2018","video":false,"vote_average":9,"vote_count":1},{"adult":false,"backdrop_path":null,"genre_ids":[10402],"id":874770,"original_language":"en","original_title":"Avatar Ages: Memories","overview":"On the night of memories Avatar performed songs from Thoughts of No Tomorrow, Schlacht and Avatar as voted on by the fans.","popularity":2.66,"poster_path":"/xDNNQ2cnxAv3o7u0nT6JJacQrhp.jpg","release_date":"2021-01-30","title":"Avatar Ages: Memories","video":false,"vote_average":10,"vote_count":1},{"adult":false,"backdrop_path":null,"genre_ids":[10402],"id":874768,"original_language":"en","original_title":"Avatar Ages: Madness","overview":"On the night of madness Avatar performed songs from Black Waltz and Hail The Apocalypse as voted on by the fans.","popularity":2.024,"poster_path":"/wVyTuruUctV3UbdzE5cncnpyNoY.jpg","release_date":"2021-01-23","title":"Avatar Ages: Madness","video":false,"vote_average":8,"vote_count":1},{"adult":false,"backdrop_path":"/dj8g4jrYMfK6tQ26ra3IaqOx5Ho.jpg","genre_ids":[10402],"id":874700,"original_language":"en","original_title":"Avatar Ages: Dreams","overview":"On the night of dreams Avatar performed Hunter Gatherer in its entirety, plus a selection of their most popular songs. Originally aired January 9th 2021","popularity":1.957,"poster_path":"/4twG59wnuHpGIRR9gYsqZnVysSP.jpg","release_date":"2021-01-09","title":"Avatar Ages: Dreams","video":false,"vote_average":0,"vote_count":0}],"total_pages":3,"total_results":57} - - > Finished chain. - - - - - - ' This response contains 57 movies related to the search query "Avatar". The first movie in the list is the 2009 movie "Avatar" starring Sam Worthington. Other movies in the list include sequels to Avatar, documentaries, and live performances.' -``` - - - -## Listen API Example - - -```python -import os -from langchain.llms import OpenAI -from langchain.chains.api import podcast_docs -from langchain.chains import APIChain - -# Get api key here: https://www.listennotes.com/api/pricing/ -listen_api_key = 'xxx' - -llm = OpenAI(temperature=0) -headers = {"X-ListenAPI-Key": listen_api_key} -chain = APIChain.from_llm_and_api_docs(llm, podcast_docs.PODCAST_DOCS, headers=headers, verbose=True) -chain.run("Search for 'silicon valley bank' podcast episodes, audio length is more than 30 minutes, return only 1 results") -``` From 6e14f9548b8cca8163a39089738ec73e644c22e5 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 07:59:27 -0700 Subject: [PATCH 007/175] bump 261 (#9041) --- libs/langchain/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index 3fb30ee0d..d1ae72291 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langchain" -version = "0.0.260" +version = "0.0.261" description = "Building applications with LLMs through composability" authors = [] license = "MIT" From 5e05ba2140edfe47c4eba0b616c0ba97ac7a8496 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Thu, 10 Aug 2023 11:15:30 -0400 Subject: [PATCH 008/175] Add embeddings cache (#8976) This PR adds the ability to temporarily cache or persistently store embeddings. A notebook has been included showing how to set up the cache and how to use it with a vectorstore. --- .../data_connection/caching_embeddings.ipynb | 467 ++++++++++++++++++ .../langchain/embeddings/__init__.py | 6 +- libs/langchain/langchain/embeddings/cache.py | 175 +++++++ .../unit_tests/embeddings/test_caching.py | 49 ++ 4 files changed, 695 insertions(+), 2 deletions(-) create mode 100644 docs/extras/modules/data_connection/caching_embeddings.ipynb create mode 100644 libs/langchain/langchain/embeddings/cache.py create mode 100644 libs/langchain/tests/unit_tests/embeddings/test_caching.py diff --git a/docs/extras/modules/data_connection/caching_embeddings.ipynb b/docs/extras/modules/data_connection/caching_embeddings.ipynb new file mode 100644 index 000000000..de549ea88 --- /dev/null +++ b/docs/extras/modules/data_connection/caching_embeddings.ipynb @@ -0,0 +1,467 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bf4061ce", + "metadata": {}, + "source": [ + "# Caching Embeddings\n", + "\n", + "Embeddings can be stored or temporarily cached to avoid needing to recompute them.\n", + "\n", + "Caching embeddings can be done using a `CacheBackedEmbedder`.\n", + "\n", + "The cache backed embedder is a wrapper around an embedder that caches\n", + "embeddings in a key-value store. \n", + "\n", + "The text is hashed and the hash is used as the key in the cache.\n", + "\n", + "\n", + "The main supported way to initialized a `CacheBackedEmbedder` is `from_bytes_store`. This takes in the following parameters:\n", + "\n", + "- underlying_embedder: The embedder to use for embedding.\n", + "- document_embedding_cache: The cache to use for storing document embeddings.\n", + "- namespace: (optional, defaults to `\"\"`) The namespace to use for document cache. This namespace is used to avoid collisions with other caches. For example, set it to the name of the embedding model used.\n", + "\n", + "**Attention**: Be sure to set the `namespace` parameter to avoid collisions of the same text embedded using different embeddings models." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a463c3c2-749b-40d1-a433-84f68a1cd1c7", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain.embeddings import CacheBackedEmbedder\n", + "from langchain.storage import InMemoryStore\n", + "from langchain.storage import LocalFileStore\n", + "from langchain.embeddings import OpenAIEmbeddings" + ] + }, + { + "cell_type": "markdown", + "id": "564c9801-29f0-4452-aeac-527382e2c0e8", + "metadata": {}, + "source": [ + "## In Memory\n", + "\n", + "This section shows how to set up an in memory cache for embeddings. This type of cache is primarily \n", + "useful for unit tests or prototyping. Do **not** use this cache if you need to actually store the embeddings." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "13bd1c5b-b7ba-4394-957c-7d5b5a841972", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "store = InMemoryStore()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9d99885f-99e1-498c-904d-6db539ac9466", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "underlying_embedder = OpenAIEmbeddings()\n", + "embedder = CacheBackedEmbedder.from_bytes_store(\n", + " underlying_embedder, store, namespace=underlying_embedder.model\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "682eb5d4-0b7a-4dac-b8fb-3de4ca6e421c", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 405 ms, sys: 32.9 ms, total: 438 ms\n", + "Wall time: 715 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "embeddings = embedder.embed_documents([\"hello\", \"goodbye\"])" + ] + }, + { + "cell_type": "markdown", + "id": "95233026-147f-49d1-bd87-e1e8b88ebdbc", + "metadata": {}, + "source": [ + "The second time we try to embed the embedding time is only 2 ms because the embeddings are looked up in the cache." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f819c3ff-a212-4d06-a5f7-5eb1435c1feb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1.55 ms, sys: 436 µs, total: 1.99 ms\n", + "Wall time: 1.99 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "embeddings_from_cache = embedder.embed_documents([\"hello\", \"goodbye\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ec38fb72-90a9-4687-a483-c62c87d1f4dd", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "embeddings == embeddings_from_cache" + ] + }, + { + "cell_type": "markdown", + "id": "f6cbe100-8587-4830-b207-fb8b524a9854", + "metadata": {}, + "source": [ + "## File system\n", + "\n", + "This section covers how to use a file system store" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a0070271-0809-4528-97e0-2a88216846f3", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "fs = LocalFileStore(\"./cache/\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "0b20e9fe-f57f-4d7c-9f81-105c5f8726f4", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "embedder2 = CacheBackedEmbedder.from_bytes_store(\n", + " underlying_embedder, fs, namespace=underlying_embedder.model\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "630515fd-bf5c-4d9c-a404-9705308f3a2c", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 10.5 ms, sys: 988 µs, total: 11.5 ms\n", + "Wall time: 220 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "embeddings = embedder2.embed_documents([\"hello\", \"goodbye\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "30e6bb87-42c9-4d08-88ac-0d22c9c449a1", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 3.49 ms, sys: 0 ns, total: 3.49 ms\n", + "Wall time: 3.03 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "embeddings = embedder2.embed_documents([\"hello\", \"goodbye\"])" + ] + }, + { + "cell_type": "markdown", + "id": "12ed5a45-8352-4e0f-8583-5537397f53c0", + "metadata": {}, + "source": [ + "Here are the embeddings that have been persisted to the directory `./cache`. \n", + "\n", + "Notice that the embedder takes a namespace parameter." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "658e2914-05e9-44a3-a8fe-3fe17ca84039", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['text-embedding-ada-002e885db5b-c0bd-5fbc-88b1-4d1da6020aa5',\n", + " 'text-embedding-ada-0026ba52e44-59c9-5cc9-a084-284061b13c80']" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(fs.yield_keys())" + ] + }, + { + "cell_type": "markdown", + "id": "c67f8e97-4851-4e26-ab6f-3418b0188dc4", + "metadata": {}, + "source": [ + "## Using with a vectorstore\n", + "\n", + "Let's see this cache in action with the FAISS vectorstore." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "9e4314d8-88ef-4f52-81ae-0be771168bb6", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import TextLoader\n", + "from langchain.embeddings.openai import OpenAIEmbeddings\n", + "from langchain.text_splitter import CharacterTextSplitter\n", + "from langchain.vectorstores import FAISS" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "30743664-38f5-425d-8216-772b64e7f348", + "metadata": {}, + "outputs": [], + "source": [ + "fs = LocalFileStore(\"./cache/\")\n", + "\n", + "cached_embedder = CacheBackedEmbedder.from_bytes_store(\n", + " OpenAIEmbeddings(), fs, namespace=underlying_embedder.model\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "06a6f305-724f-4b71-adef-be0169f61381", + "metadata": {}, + "source": [ + "The cache is empty prior to embedding" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "f9ad627f-ced2-4277-b336-2434f22f2c8a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['text-embedding-ada-002e885db5b-c0bd-5fbc-88b1-4d1da6020aa5',\n", + " 'text-embedding-ada-0026ba52e44-59c9-5cc9-a084-284061b13c80']" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(fs.yield_keys())" + ] + }, + { + "cell_type": "markdown", + "id": "5814aa9c-e8e4-4079-accf-53c49615971e", + "metadata": {}, + "source": [ + "Load the document, split it into chunks, embed each chunk and load it into the vector store." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "cf958ac2-e60e-4668-b32c-8bb2d78b3c61", + "metadata": {}, + "outputs": [], + "source": [ + "raw_documents = TextLoader(\"../state_of_the_union.txt\").load()\n", + "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\n", + "documents = text_splitter.split_documents(raw_documents)" + ] + }, + { + "cell_type": "markdown", + "id": "fc433fec-ab64-4f11-ae8b-fc3dd76cd79a", + "metadata": {}, + "source": [ + "create the vectorstore" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3a1d7bb8-3b72-4bb5-9013-cf7729caca61", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 124 ms, sys: 22.6 ms, total: 146 ms\n", + "Wall time: 832 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "db = FAISS.from_documents(documents, cached_embedder)" + ] + }, + { + "cell_type": "markdown", + "id": "c94a734c-fa66-40ce-8610-12b00b7df334", + "metadata": {}, + "source": [ + "If we try to create the vectostore again, it'll be much faster since it does not need to re-compute any embeddings." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "714cb2e2-77ba-41a8-bb83-84e75342af2d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 32.9 ms, sys: 286 µs, total: 33.2 ms\n", + "Wall time: 32.5 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "db2 = FAISS.from_documents(documents, cached_embedder)" + ] + }, + { + "cell_type": "markdown", + "id": "93d37b2a-5406-4e2c-b786-869e2430d19d", + "metadata": {}, + "source": [ + "And here are some of the embeddings that got created:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "f2ca32dd-3712-4093-942b-4122f3dc8a8e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['text-embedding-ada-002614d7cf6-46f1-52fa-9d3a-740c39e7a20e',\n", + " 'text-embedding-ada-0020fc1ede2-407a-5e14-8f8f-5642214263f5',\n", + " 'text-embedding-ada-002e885db5b-c0bd-5fbc-88b1-4d1da6020aa5',\n", + " 'text-embedding-ada-002e4ad20ef-dfaa-5916-9459-f90c6d8e8159',\n", + " 'text-embedding-ada-002a5ef11e4-0474-5725-8d80-81c91943b37f']" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(fs.yield_keys())[:5]" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/libs/langchain/langchain/embeddings/__init__.py b/libs/langchain/langchain/embeddings/__init__.py index f81d1e117..1c03d2c40 100644 --- a/libs/langchain/langchain/embeddings/__init__.py +++ b/libs/langchain/langchain/embeddings/__init__.py @@ -20,6 +20,7 @@ from langchain.embeddings.aleph_alpha import ( ) from langchain.embeddings.awa import AwaEmbeddings from langchain.embeddings.bedrock import BedrockEmbeddings +from langchain.embeddings.cache import CacheBackedEmbeddings from langchain.embeddings.clarifai import ClarifaiEmbeddings from langchain.embeddings.cohere import CohereEmbeddings from langchain.embeddings.dashscope import DashScopeEmbeddings @@ -62,10 +63,11 @@ logger = logging.getLogger(__name__) __all__ = [ "OpenAIEmbeddings", - "HuggingFaceEmbeddings", - "CohereEmbeddings", + "CacheBackedEmbeddings", "ClarifaiEmbeddings", + "CohereEmbeddings", "ElasticsearchEmbeddings", + "HuggingFaceEmbeddings", "JinaEmbeddings", "LlamaCppEmbeddings", "HuggingFaceHubEmbeddings", diff --git a/libs/langchain/langchain/embeddings/cache.py b/libs/langchain/langchain/embeddings/cache.py new file mode 100644 index 000000000..f3833e0fe --- /dev/null +++ b/libs/langchain/langchain/embeddings/cache.py @@ -0,0 +1,175 @@ +"""Module contains code for a cache backed embedder. + +The cache backed embedder is a wrapper around an embedder that caches +embeddings in a key-value store. The cache is used to avoid recomputing +embeddings for the same text. + +The text is hashed and the hash is used as the key in the cache. +""" +from __future__ import annotations + +import hashlib +import json +import uuid +from functools import partial +from typing import Callable, List, Sequence, Union, cast + +from langchain.embeddings.base import Embeddings +from langchain.schema import BaseStore +from langchain.storage.encoder_backed import EncoderBackedStore + +NAMESPACE_UUID = uuid.UUID(int=1985) + + +def _hash_string_to_uuid(input_string: str) -> uuid.UUID: + """Hash a string and returns the corresponding UUID.""" + hash_value = hashlib.sha1(input_string.encode("utf-8")).hexdigest() + return uuid.uuid5(NAMESPACE_UUID, hash_value) + + +def _key_encoder(key: str, namespace: str) -> str: + """Encode a key.""" + return namespace + str(_hash_string_to_uuid(key)) + + +def _create_key_encoder(namespace: str) -> Callable[[str], str]: + """Create an encoder for a key.""" + return partial(_key_encoder, namespace=namespace) + + +def _value_serializer(value: Sequence[float]) -> bytes: + """Serialize a value.""" + return json.dumps(value).encode() + + +def _value_deserializer(serialized_value: bytes) -> List[float]: + """Deserialize a value.""" + return cast(List[float], json.loads(serialized_value.decode())) + + +class CacheBackedEmbeddings(Embeddings): + """Interface for caching results from embedding models. + + The interface allows works with any store that implements + the abstract store interface accepting keys of type str and values of list of + floats. + + If need be, the interface can be extended to accept other implementations + of the value serializer and deserializer, as well as the key encoder. + + Examples: + + ..code-block:: python + + from langchain.embeddings import CacheBackedEmbeddings, OpenAIEmbeddings + from langchain.storage import LocalFileStore + + store = LocalFileStore('./my_cache') + + underlying_embedder = OpenAIEmbeddings() + embedder = CacheBackedEmbeddings.from_bytes_store( + underlying_embedder, store, namespace=underlying_embedder.model + ) + + # Embedding is computed and cached + embeddings = embedder.embed_documents(["hello", "goodbye"]) + + # Embeddings are retrieved from the cache, no computation is done + embeddings = embedder.embed_documents(["hello", "goodbye"]) + """ + + def __init__( + self, + underlying_embeddings: Embeddings, + document_embedding_store: BaseStore[str, List[float]], + ) -> None: + """Initialize the embedder. + + Args: + underlying_embeddings: the embedder to use for computing embeddings. + document_embedding_store: The store to use for caching document embeddings. + """ + super().__init__() + self.document_embedding_store = document_embedding_store + self.underlying_embeddings = underlying_embeddings + + def embed_documents(self, texts: List[str]) -> List[List[float]]: + """Embed a list of texts. + + The method first checks the cache for the embeddings. + If the embeddings are not found, the method uses the underlying embedder + to embed the documents and stores the results in the cache. + + Args: + texts: A list of texts to embed. + + Returns: + A list of embeddings for the given texts. + """ + vectors: List[Union[List[float], None]] = self.document_embedding_store.mget( + texts + ) + missing_indices: List[int] = [ + i for i, vector in enumerate(vectors) if vector is None + ] + missing_texts = [texts[i] for i in missing_indices] + + if missing_texts: + missing_vectors = self.underlying_embeddings.embed_documents(missing_texts) + self.document_embedding_store.mset( + list(zip(missing_texts, missing_vectors)) + ) + for index, updated_vector in zip(missing_indices, missing_vectors): + vectors[index] = updated_vector + + return cast( + List[List[float]], vectors + ) # Nones should have been resolved by now + + def embed_query(self, text: str) -> List[float]: + """Embed query text. + + This method does not support caching at the moment. + + Support for caching queries is easily to implement, but might make + sense to hold off to see the most common patterns. + + If the cache has an eviction policy, we may need to be a bit more careful + about sharing the cache between documents and queries. Generally, + one is OK evicting query caches, but document caches should be kept. + + Args: + text: The text to embed. + + Returns: + The embedding for the given text. + """ + return self.underlying_embeddings.embed_query(text) + + @classmethod + def from_bytes_store( + cls, + underlying_embeddings: Embeddings, + document_embedding_cache: BaseStore[str, bytes], + *, + namespace: str = "", + ) -> CacheBackedEmbeddings: + """On-ramp that adds the necessary serialization and encoding to the store. + + Args: + underlying_embeddings: The embedder to use for embedding. + document_embedding_cache: The cache to use for storing document embeddings. + *, + namespace: The namespace to use for document cache. + This namespace is used to avoid collisions with other caches. + For example, set it to the name of the embedding model used. + """ + namespace = namespace + key_encoder = _create_key_encoder(namespace) + encoder_backed_store = EncoderBackedStore[str, List[float]]( + document_embedding_cache, + key_encoder, + _value_serializer, + _value_deserializer, + ) + return cls(underlying_embeddings, encoder_backed_store) diff --git a/libs/langchain/tests/unit_tests/embeddings/test_caching.py b/libs/langchain/tests/unit_tests/embeddings/test_caching.py new file mode 100644 index 000000000..0b2a1096d --- /dev/null +++ b/libs/langchain/tests/unit_tests/embeddings/test_caching.py @@ -0,0 +1,49 @@ +"""Embeddings tests.""" +from typing import List + +import pytest + +from langchain.embeddings import CacheBackedEmbeddings +from langchain.embeddings.base import Embeddings +from langchain.storage.in_memory import InMemoryStore + + +class MockEmbeddings(Embeddings): + def embed_documents(self, texts: List[str]) -> List[List[float]]: + # Simulate embedding documents + embeddings: List[List[float]] = [] + for text in texts: + embeddings.append([len(text), len(text) + 1]) + return embeddings + + def embed_query(self, text: str) -> List[float]: + # Simulate embedding a query + return [5.0, 6.0] + + +@pytest.fixture +def cache_embeddings() -> CacheBackedEmbeddings: + """Create a cache backed embeddings.""" + store = InMemoryStore() + embeddings = MockEmbeddings() + return CacheBackedEmbeddings.from_bytes_store( + embeddings, store, namespace="test_namespace" + ) + + +def test_embed_documents(cache_embeddings: CacheBackedEmbeddings) -> None: + texts = ["1", "22", "a", "333"] + vectors = cache_embeddings.embed_documents(texts) + expected_vectors: List[List[float]] = [[1, 2.0], [2.0, 3.0], [1.0, 2.0], [3.0, 4.0]] + assert vectors == expected_vectors + keys = list(cache_embeddings.document_embedding_store.yield_keys()) + assert len(keys) == 4 + # UUID is expected to be the same for the same text + assert keys[0] == "test_namespace812b86c1-8ebf-5483-95c6-c95cf2b52d12" + + +def test_embed_query(cache_embeddings: CacheBackedEmbeddings) -> None: + text = "query_text" + vector = cache_embeddings.embed_query(text) + expected_vector = [5.0, 6.0] + assert vector == expected_vector From abb1264edf26af272d61f70ce2d0851b1b218b67 Mon Sep 17 00:00:00 2001 From: Ismail Pelaseyed Date: Thu, 10 Aug 2023 18:07:00 +0200 Subject: [PATCH 009/175] Fix issue with Metaphor Search Tool throwing error on missing keys in API response (#9051) - Description: Fixes an issue with Metaphor Search Tool throwing when missing keys in API response. - Issue: #9048 - Tag maintainer: @hinthornw @hwchase17 - Twitter handle: @pelaseyed --- libs/langchain/langchain/utilities/metaphor_search.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/langchain/langchain/utilities/metaphor_search.py b/libs/langchain/langchain/utilities/metaphor_search.py index d5d36c744..2b5e2dbd3 100644 --- a/libs/langchain/langchain/utilities/metaphor_search.py +++ b/libs/langchain/langchain/utilities/metaphor_search.py @@ -163,10 +163,10 @@ class MetaphorSearchAPIWrapper(BaseModel): for result in raw_search_results: cleaned_results.append( { - "title": result["title"], - "url": result["url"], - "author": result["author"], - "published_date": result["publishedDate"], + "title": result.get("title", "Unknown Title"), + "url": result.get("url", "Unknown URL"), + "author": result.get("author", "Unknown Author"), + "published_date": result.get("publishedDate", "Unknown Date"), } ) return cleaned_results From e162fd418ae98871473f1e2200d24093a9864dfc Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 09:29:46 -0700 Subject: [PATCH 010/175] fix sched ci (#9053) --- .github/workflows/scheduled_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scheduled_test.yml b/.github/workflows/scheduled_test.yml index aad5f9e0e..120d6cb3a 100644 --- a/.github/workflows/scheduled_test.yml +++ b/.github/workflows/scheduled_test.yml @@ -1,6 +1,7 @@ name: Scheduled tests on: + workflow_dispatch: # Allows to trigger the workflow manually in GitHub UI schedule: - cron: '0 13 * * *' @@ -35,4 +36,3 @@ jobs: run: | make scheduled_tests shell: bash - secrets: inherit From e5db8a16c036712e0523c7191593933cb79e880a Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 09:34:44 -0700 Subject: [PATCH 011/175] Bagatur/fix sched (#9054) --- .github/workflows/scheduled_test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/scheduled_test.yml b/.github/workflows/scheduled_test.yml index 120d6cb3a..09ee4397f 100644 --- a/.github/workflows/scheduled_test.yml +++ b/.github/workflows/scheduled_test.yml @@ -10,6 +10,9 @@ env: jobs: build: + defaults: + run: + working-directory: libs/langchain runs-on: ubuntu-latest environment: Scheduled testing strategy: From 8a320e55a07069bdd7b0a029bc6c23a5bf6c504f Mon Sep 17 00:00:00 2001 From: Aashish Saini Date: Thu, 10 Aug 2023 22:47:09 +0530 Subject: [PATCH 012/175] Corrected grammatical errors and spelling mistakes in the index.mdx file. (#9026) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Expressing gratitude to the creator for crafting this remarkable application. 🙌, Would like to Enhance grammar and spelling in the documentation for a polished reader experience. Your feedback is valuable as always @baskaryan , @hwchase17 , @eyurtsev --- docs/docs_skeleton/docs/guides/evaluation/index.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs_skeleton/docs/guides/evaluation/index.mdx b/docs/docs_skeleton/docs/guides/evaluation/index.mdx index a608527be..e2d04b122 100644 --- a/docs/docs_skeleton/docs/guides/evaluation/index.mdx +++ b/docs/docs_skeleton/docs/guides/evaluation/index.mdx @@ -8,9 +8,9 @@ import DocCardList from "@theme/DocCardList"; Building applications with language models involves many moving parts. One of the most critical components is ensuring that the outcomes produced by your models are reliable and useful across a broad array of inputs, and that they work well with your application's other software components. Ensuring reliability usually boils down to some combination of application design, testing & evaluation, and runtime checks. -The guides in this section review the APIs and functionality LangChain provides to help yous better evaluate your applications. Evaluation and testing are both critical when thinking about deploying LLM applications, since production environments require repeatable and useful outcomes. +The guides in this section review the APIs and functionality LangChain provides to help you better evaluate your applications. Evaluation and testing are both critical when thinking about deploying LLM applications, since production environments require repeatable and useful outcomes. -LangChain offers various types of evaluators to help you measure performance and integrity on diverse data, and we hope to encourage the the community to create and share other useful evaluators so everyone can improve. These docs will introduce the evaluator types, how to use them, and provide some examples of their use in real-world scenarios. +LangChain offers various types of evaluators to help you measure performance and integrity on diverse data, and we hope to encourage the community to create and share other useful evaluators so everyone can improve. These docs will introduce the evaluator types, how to use them, and provide some examples of their use in real-world scenarios. Each evaluator type in LangChain comes with ready-to-use implementations and an extensible API that allows for customization according to your unique requirements. Here are some of the types of evaluators we offer: From 206f80936695e8b27865d7f7c04301b587713d0b Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:39:29 -0700 Subject: [PATCH 013/175] fix sched ci (more) (#9056) --- .github/workflows/scheduled_test.yml | 3 +- libs/langchain/poetry.lock | 506 +++--------------- libs/langchain/pyproject.toml | 28 - .../document_loaders/test_geodataframe.py | 5 +- .../document_loaders/test_news.py | 3 +- .../test_tensorflow_datasets.py | 12 +- .../embeddings/test_self_hosted.py | 4 +- .../llms/test_huggingface_pipeline.py | 4 +- .../llms/test_self_hosted_llm.py | 4 +- .../integration_tests/memory/test_rockset.py | 4 +- .../integration_tests/storage/test_redis.py | 14 +- .../utilities/test_tensorflow_datasets.py | 10 +- 12 files changed, 113 insertions(+), 484 deletions(-) diff --git a/.github/workflows/scheduled_test.yml b/.github/workflows/scheduled_test.yml index 09ee4397f..29ca8c119 100644 --- a/.github/workflows/scheduled_test.yml +++ b/.github/workflows/scheduled_test.yml @@ -30,9 +30,10 @@ jobs: with: python-version: ${{ matrix.python-version }} poetry-version: "1.4.2" + working-directory: libs/langchain install-command: | echo "Running scheduled tests, installing dependencies with poetry..." - poetry install -E scheduled_testing + poetry install --with=test_integration - name: Run tests env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} diff --git a/libs/langchain/poetry.lock b/libs/langchain/poetry.lock index 712a4406b..282136c1a 100644 --- a/libs/langchain/poetry.lock +++ b/libs/langchain/poetry.lock @@ -46,7 +46,7 @@ name = "aioboto3" version = "11.2.0" description = "Async boto3 wrapper" category = "main" -optional = false +optional = true python-versions = ">=3.7,<4.0" files = [ {file = "aioboto3-11.2.0-py3-none-any.whl", hash = "sha256:df4b83c3943b009a4dcd9f397f9f0491a374511b1ef37545082a771ca1e549fb"}, @@ -65,7 +65,7 @@ name = "aiobotocore" version = "2.5.0" description = "Async client for aws services using botocore and aiohttp" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "aiobotocore-2.5.0-py3-none-any.whl", hash = "sha256:9a2a022d7b78ec9a2af0de589916d2721cddbf96264401b78d7a73c1a1435f3b"}, @@ -239,7 +239,7 @@ name = "aioitertools" version = "0.11.0" description = "itertools and builtins for AsyncIO and mixed iterables" category = "main" -optional = false +optional = true python-versions = ">=3.6" files = [ {file = "aioitertools-0.11.0-py3-none-any.whl", hash = "sha256:04b95e3dab25b449def24d7df809411c10e62aab0cbe31a50ca4e68748c43394"}, @@ -518,7 +518,7 @@ name = "arxiv" version = "1.4.7" description = "Python wrapper for the arXiv API: http://arxiv.org/help/api/" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "arxiv-1.4.7-py3-none-any.whl", hash = "sha256:22b8f610957bb6859a25fac9dc205ab6ba76d521791119a5762ea52625e398a0"}, @@ -648,7 +648,7 @@ name = "authlib" version = "1.2.0" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "Authlib-1.2.0-py2.py3-none-any.whl", hash = "sha256:4ddf4fd6cfa75c9a460b361d4bd9dac71ffda0be879dbe4292a02e92349ad55a"}, @@ -832,7 +832,7 @@ name = "backoff" version = "2.2.1" description = "Function decoration for backoff and retry" category = "main" -optional = false +optional = true python-versions = ">=3.7,<4.0" files = [ {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, @@ -1100,27 +1100,12 @@ files = [ [package.dependencies] numpy = ">=1.15.0" -[[package]] -name = "blurhash" -version = "1.1.4" -description = "Pure-Python implementation of the blurhash algorithm." -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "blurhash-1.1.4-py2.py3-none-any.whl", hash = "sha256:7611c1bc41383d2349b6129208587b5d61e8792ce953893cb49c38beeb400d1d"}, - {file = "blurhash-1.1.4.tar.gz", hash = "sha256:da56b163e5a816e4ad07172f5639287698e09d7f3dc38d18d9726d9c1dbc4cee"}, -] - -[package.extras] -test = ["Pillow", "numpy", "pytest"] - [[package]] name = "boto3" version = "1.26.76" description = "The AWS SDK for Python" category = "main" -optional = false +optional = true python-versions = ">= 3.7" files = [ {file = "boto3-1.26.76-py3-none-any.whl", hash = "sha256:b4c2969b7677762914394b8273cc1905dfe5b71f250741c1a575487ae357e729"}, @@ -1140,7 +1125,7 @@ name = "botocore" version = "1.29.76" description = "Low-level, data-driven core of boto 3." category = "main" -optional = false +optional = true python-versions = ">= 3.7" files = [ {file = "botocore-1.29.76-py3-none-any.whl", hash = "sha256:70735b00cd529f152992231ca6757e458e5ec25db43767b3526e9a35b2f143b7"}, @@ -1319,7 +1304,7 @@ name = "cachetools" version = "5.3.1" description = "Extensible memoizing collections and decorators" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "cachetools-5.3.1-py3-none-any.whl", hash = "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590"}, @@ -1618,52 +1603,6 @@ files = [ {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, ] -[[package]] -name = "chroma-hnswlib" -version = "0.7.1" -description = "Chromas fork of hnswlib" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "chroma-hnswlib-0.7.1.tar.gz", hash = "sha256:f72592dc7d0522c25cc1f8864db7a3781f179ba989f209cc3ea01694c0d76493"}, - {file = "chroma_hnswlib-0.7.1-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:38f51585d81a5072db70b17207afd1f57670c209836d0fbbf2a1aa7e8bece6b7"}, -] - -[package.dependencies] -numpy = "*" - -[[package]] -name = "chromadb" -version = "0.4.1" -description = "Chroma." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "chromadb-0.4.1-py3-none-any.whl", hash = "sha256:980e776bfbb76a2689418b03a254e7edb888961f57b7615f815c8d95f048b396"}, - {file = "chromadb-0.4.1.tar.gz", hash = "sha256:9b1a76d615dd2280e7b30ff82101ed31c26782a4d832070046309fde82515385"}, -] - -[package.dependencies] -chroma-hnswlib = "0.7.1" -fastapi = ">=0.95.2,<0.100.0" -graphlib-backport = {version = ">=1.0.3", markers = "python_version < \"3.9\""} -importlib-resources = "*" -numpy = ">=1.21.6" -onnxruntime = ">=1.14.1" -overrides = ">=7.3.1" -pandas = ">=1.3" -posthog = ">=2.4.0" -pulsar-client = ">=3.1.0" -pydantic = ">=1.9,<2.0" -pypika = ">=0.48.9" -requests = ">=2.28" -tokenizers = ">=0.13.2" -tqdm = ">=4.65.0" -typing-extensions = ">=4.5.0" -uvicorn = {version = ">=0.18.3", extras = ["standard"]} - [[package]] name = "circus" version = "0.18.0" @@ -1775,7 +1714,7 @@ name = "clickhouse-connect" version = "0.5.25" description = "ClickHouse core driver, SqlAlchemy, and Superset libraries" category = "main" -optional = false +optional = true python-versions = "~=3.7" files = [ {file = "clickhouse-connect-0.5.25.tar.gz", hash = "sha256:98af3fff571d1069d2c6dd2f4c0feb220fe4c55bd12608e841c842582061982f"}, @@ -1956,7 +1895,7 @@ name = "coloredlogs" version = "15.0.1" description = "Colored terminal output for Python's logging module" category = "main" -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, @@ -2364,7 +2303,7 @@ name = "deeplake" version = "3.6.11" description = "Activeloop Deep Lake" category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "deeplake-3.6.11.tar.gz", hash = "sha256:97e22aa56e0a48dc935597f46a6f968393a4f95e799fa1df8bc7997231a40892"}, @@ -2426,7 +2365,7 @@ name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." category = "main" -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, @@ -2459,7 +2398,7 @@ name = "dill" version = "0.3.6" description = "serialize all of python" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, @@ -2486,7 +2425,7 @@ name = "dnspython" version = "2.3.0" description = "DNS toolkit" category = "main" -optional = false +optional = true python-versions = ">=3.7,<4.0" files = [ {file = "dnspython-2.3.0-py3-none-any.whl", hash = "sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46"}, @@ -2695,7 +2634,7 @@ name = "elastic-transport" version = "8.4.0" description = "Transport classes and utilities shared among Python Elastic client libraries" category = "main" -optional = false +optional = true python-versions = ">=3.6" files = [ {file = "elastic-transport-8.4.0.tar.gz", hash = "sha256:b9ad708ceb7fcdbc6b30a96f886609a109f042c0b9d9f2e44403b3133ba7ff10"}, @@ -2714,7 +2653,7 @@ name = "elasticsearch" version = "8.8.0" description = "Python client for Elasticsearch" category = "main" -optional = false +optional = true python-versions = ">=3.6, <4" files = [ {file = "elasticsearch-8.8.0-py3-none-any.whl", hash = "sha256:2223ee9daaa3c80c25b28ec3f7c48e66fce6b767a338333d9a81886046a07df6"}, @@ -2722,7 +2661,6 @@ files = [ ] [package.dependencies] -aiohttp = {version = ">=3,<4", optional = true, markers = "extra == \"async\""} elastic-transport = ">=8,<9" [package.extras] @@ -2822,7 +2760,7 @@ name = "fastapi" version = "0.95.2" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "fastapi-0.95.2-py3-none-any.whl", hash = "sha256:d374dbc4ef2ad9b803899bd3360d34c534adc574546e25314ab72c0c4411749f"}, @@ -2922,7 +2860,7 @@ name = "feedparser" version = "6.0.10" description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" category = "main" -optional = false +optional = true python-versions = ">=3.6" files = [ {file = "feedparser-6.0.10-py3-none-any.whl", hash = "sha256:79c257d526d13b944e965f6095700587f27388e50ea16fd245babe4dfae7024f"}, @@ -2948,7 +2886,7 @@ name = "filelock" version = "3.12.2" description = "A platform independent file lock." category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, @@ -3021,7 +2959,7 @@ name = "flatbuffers" version = "23.5.26" description = "The FlatBuffers serialization format for Python" category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "flatbuffers-23.5.26-py2.py3-none-any.whl", hash = "sha256:c0ff356da363087b915fde4b8b45bdda73432fc17cddb3c8157472eab1422ad1"}, @@ -3237,7 +3175,7 @@ name = "fsspec" version = "2023.6.0" description = "File-system specification" category = "main" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "fsspec-2023.6.0-py3-none-any.whl", hash = "sha256:1cbad1faef3e391fba6dc005ae9b5bdcbf43005c9167ce78c915549c352c869a"}, @@ -3529,7 +3467,7 @@ name = "gptcache" version = "0.1.32" description = "GPTCache, a powerful caching library that can be used to speed up and lower the cost of chat applications that rely on the LLM service. GPTCache works as a memcache for AIGC applications, similar to how Redis works for traditional applications." category = "main" -optional = false +optional = true python-versions = ">=3.8.1" files = [ {file = "gptcache-0.1.32-py3-none-any.whl", hash = "sha256:e85eb40ac54ebd8c0db1d67ba962b505d87321f287446083cfd80c4f205d2d10"}, @@ -3630,18 +3568,6 @@ requests = ">=2.0,<3.0" typing-extensions = ">=4.0,<5.0" websockets = ">=10.0,<12.0" -[[package]] -name = "graphlib-backport" -version = "1.0.3" -description = "Backport of the Python 3.9 graphlib module for Python 3.6+" -category = "dev" -optional = false -python-versions = ">=3.6,<4.0" -files = [ - {file = "graphlib_backport-1.0.3-py3-none-any.whl", hash = "sha256:24246967b9e7e6a91550bc770e6169585d35aa32790258579a8a3899a8c18fde"}, - {file = "graphlib_backport-1.0.3.tar.gz", hash = "sha256:7bb8fc7757b8ae4e6d8000a26cd49e9232aaa9a3aa57edb478474b8424bfaae2"}, -] - [[package]] name = "graphql-core" version = "3.2.3" @@ -3733,7 +3659,7 @@ name = "grpcio" version = "1.47.5" description = "HTTP/2-based RPC framework" category = "main" -optional = false +optional = true python-versions = ">=3.6" files = [ {file = "grpcio-1.47.5-cp310-cp310-linux_armv7l.whl", hash = "sha256:acc73289d0c44650aa1f21eccfa967f5623b01c3b5e2b4596fe5f9c5bf10956d"}, @@ -3888,7 +3814,7 @@ name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, @@ -4029,7 +3955,7 @@ name = "httptools" version = "0.5.0" description = "A collection of framework independent HTTP protocol utils." category = "main" -optional = false +optional = true python-versions = ">=3.5.0" files = [ {file = "httptools-0.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8f470c79061599a126d74385623ff4744c4e0f4a0997a353a44923c0b561ee51"}, @@ -4111,7 +4037,7 @@ name = "huggingface-hub" version = "0.15.1" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" category = "main" -optional = false +optional = true python-versions = ">=3.7.0" files = [ {file = "huggingface_hub-0.15.1-py3-none-any.whl", hash = "sha256:05b0fb0abbf1f625dfee864648ac3049fe225ac4371c7bafaca0c2d3a2f83445"}, @@ -4143,7 +4069,7 @@ name = "humanfriendly" version = "10.0" description = "Human friendly output for text interfaces using Python" category = "main" -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, @@ -4158,7 +4084,7 @@ name = "humbug" version = "0.3.1" description = "Humbug: Do you build developer tools? Humbug helps you know your users." category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "humbug-0.3.1-py3-none-any.whl", hash = "sha256:f9e3c8dd60a8ba943194f7ed45caa66e5db43d99f3745c60030ec40e6313a927"}, @@ -4633,7 +4559,7 @@ name = "jmespath" version = "1.0.1" description = "JSON Matching Expressions" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, @@ -4645,7 +4571,7 @@ name = "joblib" version = "1.2.0" description = "Lightweight pipelining with Python functions" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "joblib-1.2.0-py3-none-any.whl", hash = "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385"}, @@ -5202,7 +5128,7 @@ name = "libdeeplake" version = "0.0.60" description = "C++ backend for Deep Lake" category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "libdeeplake-0.0.60-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:077c663370834831343b512cb4d2b166634f1aaea31e31f86721e257ce0ed1dd"}, @@ -5322,7 +5248,7 @@ name = "loguru" version = "0.7.0" description = "Python logging made (stupidly) simple" category = "main" -optional = false +optional = true python-versions = ">=3.5" files = [ {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"}, @@ -5434,7 +5360,7 @@ name = "lz4" version = "4.3.2" description = "LZ4 Bindings for Python" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "lz4-4.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1c4c100d99eed7c08d4e8852dd11e7d1ec47a3340f49e3a96f8dfbba17ffb300"}, @@ -5657,32 +5583,6 @@ files = [ [package.dependencies] marshmallow = ">=2.0.0" -[[package]] -name = "mastodon-py" -version = "1.8.1" -description = "Python wrapper for the Mastodon API" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "Mastodon.py-1.8.1-py2.py3-none-any.whl", hash = "sha256:22bc7e060518ef2eaa69d911cde6e4baf56bed5ea0dd407392c49051a7ac526a"}, - {file = "Mastodon.py-1.8.1.tar.gz", hash = "sha256:4a64cb94abadd6add73e4b8eafdb5c466048fa5f638284fd2189034104d4687e"}, -] - -[package.dependencies] -blurhash = ">=1.1.4" -decorator = ">=4.0.0" -python-dateutil = "*" -python-magic = {version = "*", markers = "platform_system != \"Windows\""} -python-magic-bin = {version = "*", markers = "platform_system == \"Windows\""} -requests = ">=2.4.2" -six = "*" - -[package.extras] -blurhash = ["blurhash (>=1.1.4)"] -test = ["blurhash (>=1.1.4)", "cryptography (>=1.6.0)", "http-ece (>=1.0.5)", "pytest", "pytest-cov", "pytest-mock", "pytest-runner", "pytest-vcr", "pytz", "requests-mock", "vcrpy"] -webpush = ["cryptography (>=1.6.0)", "http-ece (>=1.0.5)"] - [[package]] name = "matplotlib" version = "3.7.2" @@ -5810,7 +5710,7 @@ name = "mmh3" version = "3.1.0" description = "Python wrapper for MurmurHash (MurmurHash3), a set of fast and robust hash functions." category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "mmh3-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:16ee043b1bac040b4324b8baee39df9fdca480a560a6d74f2eef66a5009a234e"}, @@ -5855,7 +5755,7 @@ name = "momento" version = "1.6.0" description = "SDK for Momento" category = "main" -optional = false +optional = true python-versions = ">=3.7,<4.0" files = [ {file = "momento-1.6.0-py3-none-any.whl", hash = "sha256:a7f9a85a4372274bd5eafba95d6ab72bafa2d947abfbb16f8d0afb4b6501e4fb"}, @@ -5872,7 +5772,7 @@ name = "momento-wire-types" version = "0.64.1" description = "Momento Client Proto Generated Files" category = "main" -optional = false +optional = true python-versions = ">=3.7,<4.0" files = [ {file = "momento_wire_types-0.64.1-py3-none-any.whl", hash = "sha256:b6fb773831e7aaf95c60223e450e985606076a45df120814ecb9a97904948fe5"}, @@ -5883,18 +5783,6 @@ files = [ grpcio = "*" protobuf = ">=3,<5" -[[package]] -name = "monotonic" -version = "1.6" -description = "An implementation of time.monotonic() for Python 2 & < 3.3" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, - {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, -] - [[package]] name = "more-itertools" version = "9.1.0" @@ -5912,7 +5800,7 @@ name = "mpmath" version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, @@ -6148,7 +6036,7 @@ name = "multiprocess" version = "0.70.14" description = "better multiprocessing and multithreading in python" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "multiprocess-0.70.14-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:560a27540daef4ce8b24ed3cc2496a3c670df66c96d02461a4da67473685adf3"}, @@ -6609,7 +6497,7 @@ name = "nltk" version = "3.8.1" description = "Natural Language Toolkit" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "nltk-3.8.1-py3-none-any.whl", hash = "sha256:fd5c9109f976fa86bcadba8f91e47f5e9293bd034474752e92a520f81c93dda5"}, @@ -6755,7 +6643,7 @@ name = "numcodecs" version = "0.11.0" description = "A Python package providing buffer compression and transformation codecs for use" category = "main" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "numcodecs-0.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bc116752be45b4f9dca4315e5a2b4185e3b46f68c997dbb84aef334ceb5a1d"}, @@ -6869,7 +6757,7 @@ name = "nvidia-cublas-cu11" version = "11.10.3.66" description = "CUBLAS native runtime libraries" category = "main" -optional = false +optional = true python-versions = ">=3" files = [ {file = "nvidia_cublas_cu11-11.10.3.66-py3-none-manylinux1_x86_64.whl", hash = "sha256:d32e4d75f94ddfb93ea0a5dda08389bcc65d8916a25cb9f37ac89edaeed3bded"}, @@ -6885,7 +6773,7 @@ name = "nvidia-cuda-nvrtc-cu11" version = "11.7.99" description = "NVRTC native runtime libraries" category = "main" -optional = false +optional = true python-versions = ">=3" files = [ {file = "nvidia_cuda_nvrtc_cu11-11.7.99-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:9f1562822ea264b7e34ed5930567e89242d266448e936b85bc97a3370feabb03"}, @@ -6902,7 +6790,7 @@ name = "nvidia-cuda-runtime-cu11" version = "11.7.99" description = "CUDA Runtime native Libraries" category = "main" -optional = false +optional = true python-versions = ">=3" files = [ {file = "nvidia_cuda_runtime_cu11-11.7.99-py3-none-manylinux1_x86_64.whl", hash = "sha256:cc768314ae58d2641f07eac350f40f99dcb35719c4faff4bc458a7cd2b119e31"}, @@ -6918,7 +6806,7 @@ name = "nvidia-cudnn-cu11" version = "8.5.0.96" description = "cuDNN runtime libraries" category = "main" -optional = false +optional = true python-versions = ">=3" files = [ {file = "nvidia_cudnn_cu11-8.5.0.96-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:402f40adfc6f418f9dae9ab402e773cfed9beae52333f6d86ae3107a1b9527e7"}, @@ -6991,48 +6879,6 @@ soundfile = ">=0.12.1,<0.13.0" types-pyyaml = ">=6.0.12.10,<7.0.0.0" uvicorn = ">=0.22.0,<0.23.0" -[[package]] -name = "onnxruntime" -version = "1.15.1" -description = "ONNX Runtime is a runtime accelerator for Machine Learning models" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "onnxruntime-1.15.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:baad59e6a763237fa39545325d29c16f98b8a45d2dfc524c67631e2e3ba44d16"}, - {file = "onnxruntime-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:568c2db848f619a0a93e843c028e9fb4879929d40b04bd60f9ba6eb8d2e93421"}, - {file = "onnxruntime-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69088d7784bb04dedfd9e883e2c96e4adf8ae0451acdd0abb78d68f59ecc6d9d"}, - {file = "onnxruntime-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cef43737b2cd886d5d718d100f56ec78c9c476c5db5f8f946e95024978fe754"}, - {file = "onnxruntime-1.15.1-cp310-cp310-win32.whl", hash = "sha256:79d7e65abb44a47c633ede8e53fe7b9756c272efaf169758c482c983cca98d7e"}, - {file = "onnxruntime-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:8bc4c47682933a7a2c79808688aad5f12581305e182be552de50783b5438e6bd"}, - {file = "onnxruntime-1.15.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:652b2cb777f76446e3cc41072dd3d1585a6388aeff92b9de656724bc22e241e4"}, - {file = "onnxruntime-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89b86dbed15740abc385055a29c9673a212600248d702737ce856515bdeddc88"}, - {file = "onnxruntime-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed5cdd9ee748149a57f4cdfa67187a0d68f75240645a3c688299dcd08742cc98"}, - {file = "onnxruntime-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f748cce6a70ed38c19658615c55f4eedb9192765a4e9c4bd2682adfe980698d"}, - {file = "onnxruntime-1.15.1-cp311-cp311-win32.whl", hash = "sha256:e0312046e814c40066e7823da58075992d51364cbe739eeeb2345ec440c3ac59"}, - {file = "onnxruntime-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:f0980969689cb956c22bd1318b271e1be260060b37f3ddd82c7d63bd7f2d9a79"}, - {file = "onnxruntime-1.15.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:345986cfdbd6f4b20a89b6a6cd9abd3e2ced2926ae0b6e91fefa8149f95c0f09"}, - {file = "onnxruntime-1.15.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d7b3ad75e040f1e95757f69826a11051737b31584938a26d466a0234c6de98"}, - {file = "onnxruntime-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3603d07b829bcc1c14963a76103e257aade8861eb208173b300cc26e118ec2f8"}, - {file = "onnxruntime-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3df0625b9295daf1f7409ea55f72e1eeb38d54f5769add53372e79ddc3cf98d"}, - {file = "onnxruntime-1.15.1-cp38-cp38-win32.whl", hash = "sha256:f68b47fdf1a0406c0292f81ac993e2a2ae3e8b166b436d590eb221f64e8e187a"}, - {file = "onnxruntime-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:52d762d297cc3f731f54fa65a3e329b813164970671547bef6414d0ed52765c9"}, - {file = "onnxruntime-1.15.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:99228f9f03dc1fc8af89a28c9f942e8bd3e97e894e263abe1a32e4ddb1f6363b"}, - {file = "onnxruntime-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:45db7f96febb0cf23e3af147f35c4f8de1a37dd252d1cef853c242c2780250cd"}, - {file = "onnxruntime-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bafc112a36db25c821b90ab747644041cb4218f6575889775a2c12dd958b8c3"}, - {file = "onnxruntime-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:985693d18f2d46aa34fd44d7f65ff620660b2c8fa4b8ec365c2ca353f0fbdb27"}, - {file = "onnxruntime-1.15.1-cp39-cp39-win32.whl", hash = "sha256:708eb31b0c04724bf0f01c1309a9e69bbc09b85beb750e5662c8aed29f1ff9fd"}, - {file = "onnxruntime-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:73d6de4c42dfde1e9dbea04773e6dc23346c8cda9c7e08c6554fafc97ac60138"}, -] - -[package.dependencies] -coloredlogs = "*" -flatbuffers = "*" -numpy = ">=1.21.6" -packaging = "*" -protobuf = "*" -sympy = "*" - [[package]] name = "openai" version = "0.27.8" @@ -7661,7 +7507,7 @@ name = "pathos" version = "0.3.0" description = "parallel graph management and execution in heterogeneous computing" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "pathos-0.3.0-py3-none-any.whl", hash = "sha256:b1f5a79b1c79a594330d451832642ee5bb61dd77dc75ba9e5c72087c77e8994c"}, @@ -7776,7 +7622,7 @@ name = "pillow" version = "9.5.0" description = "Python Imaging Library (Fork)" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, @@ -7856,7 +7702,7 @@ name = "pinecone-client" version = "2.2.2" description = "Pinecone client and SDK" category = "main" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "pinecone-client-2.2.2.tar.gz", hash = "sha256:391fe413754efd4e0ef00154b44271d63c4cdd4bedf088d23111a5725d863210"}, @@ -7882,7 +7728,7 @@ name = "pinecone-text" version = "0.4.2" description = "Text utilities library by Pinecone.io" category = "main" -optional = false +optional = true python-versions = ">=3.8,<4.0" files = [ {file = "pinecone_text-0.4.2-py3-none-any.whl", hash = "sha256:79468c197b2fc7738c1511a6b5b8e7697fad613604ad935661a438f621ad2004"}, @@ -8060,36 +7906,12 @@ docs = ["sphinx (>=1.7.1)"] redis = ["redis"] tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)"] -[[package]] -name = "posthog" -version = "3.0.1" -description = "Integrate PostHog into any python application." -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "posthog-3.0.1-py2.py3-none-any.whl", hash = "sha256:9c7f92fecc713257d4b2710d05b456569c9156fbdd3e85655ba7ba5ba6c7b3ae"}, - {file = "posthog-3.0.1.tar.gz", hash = "sha256:57d2791ff5752ce56ba0f9bb8876faf3ca9208f1c2c6ceaeb5a2504c34493767"}, -] - -[package.dependencies] -backoff = ">=1.10.0" -monotonic = ">=1.5" -python-dateutil = ">2.1" -requests = ">=2.7,<3.0" -six = ">=1.5" - -[package.extras] -dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] -sentry = ["django", "sentry-sdk"] -test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest"] - [[package]] name = "pox" version = "0.3.2" description = "utilities for filesystem exploration and automated builds" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "pox-0.3.2-py3-none-any.whl", hash = "sha256:56fe2f099ecd8a557b8948082504492de90e8598c34733c9b1fdeca8f7b6de61"}, @@ -8101,7 +7923,7 @@ name = "ppft" version = "1.7.6.6" description = "distributed and parallel python" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "ppft-1.7.6.6-py3-none-any.whl", hash = "sha256:f355d2caeed8bd7c9e4a860c471f31f7e66d1ada2791ab5458ea7dca15a51e41"}, @@ -8183,21 +8005,6 @@ files = [ [package.dependencies] wcwidth = "*" -[[package]] -name = "promptlayer" -version = "0.1.89" -description = "PromptLayer is a package to keep track of your GPT models training" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "promptlayer-0.1.89.tar.gz", hash = "sha256:a7ed3875416d4f29c07a3f5ffe803b42ed9745d741f79cd4ed164deb3f312f3e"}, -] - -[package.dependencies] -langchain = "*" -requests = "*" - [[package]] name = "protobuf" version = "3.19.6" @@ -8359,54 +8166,6 @@ files = [ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] -[[package]] -name = "pulsar-client" -version = "3.2.0" -description = "Apache Pulsar Python client library" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "pulsar_client-3.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:da53bbe1903026ca1253d36a67bde0ae88513497091658aee8c5514c3e567483"}, - {file = "pulsar_client-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec595a71b7a25f1a72a1350efd6680a511b53253c3cac1911ba3d6c4d71fa64c"}, - {file = "pulsar_client-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3557c65463d74ec8d2864752389beb06761ab591dd134a164e0b1303c66719b"}, - {file = "pulsar_client-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d51dc76fec48217489bde95754ad58288c9389361de42f5a27d64e19840d27fb"}, - {file = "pulsar_client-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9ef2baf85311e0fe1b98342fdafbb93a1818a08ef999eaa524234fedf6f3b941"}, - {file = "pulsar_client-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:0928b02beda0c98e77178f4e30e962ddb8ee8c3320e4c7304a78b0796e976523"}, - {file = "pulsar_client-3.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:584f44b03474a69906be711a597a4d516263a55be31e49fc07be503dc8406821"}, - {file = "pulsar_client-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a637b9a3b30860c61e68a7b8ea650e0987d89e82f73b6a3df1ab662a6438fdda"}, - {file = "pulsar_client-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4a187fdc5febcf16f725179dcf2c476f31eeebd8353794d91754a3202dd5072"}, - {file = "pulsar_client-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5ff879f868cf1fd29db99f39fdb22b3ec3e749c648aca28526689756d922d1c5"}, - {file = "pulsar_client-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4a5f85d0cc414f739a5b51d843f213b54b2cd768c3a34f7c27cca410712b1f81"}, - {file = "pulsar_client-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:4fe748283848d829a80c0323558faeebea4c240d69fa58314ac90344f6999d17"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-macosx_10_15_universal2.whl", hash = "sha256:06b91c26def86dbbc35be15257999fd8a2afbadf32983916ea3eef44f4d4cab4"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39ec897bc8d232e6b118793378fc662a844334b829a28a1b4ad1c5fe8d019135"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa37c96c25c1b5aff3bad0fd0194b385ec190b2c67a2f439ac91577f81ae18d3"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d49cdd4d1b7fc2e80d100acf14e6fd3898f6e099e403fc56ed22a690245b2fec"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0058ca3191fd24528ccf94dba6f12e4093831454a2597166f96900d0717271bf"}, - {file = "pulsar_client-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:cb69b0411008e0b56df51de0aab20aa1c1a12aef3019b9ceba89afbae1f07fe2"}, - {file = "pulsar_client-3.2.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:f7d33e99602352df7a30707eab4e5781654602212fb618928bffb5523f2bcf35"}, - {file = "pulsar_client-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad1ac15a175ca90555c681a4d0134568771c6346b97a172f3ef14006556a50ae"}, - {file = "pulsar_client-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:369e08ef1d5cb196dd9271039928800f90b4701a9c9df90bc068b44260d2fb11"}, - {file = "pulsar_client-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a52ba2b6736a2ebeed31b590e75d417dda149e333461655860efa84d898a3eb4"}, - {file = "pulsar_client-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c801334b3b569b23976481a2922bcea0c6dd990fc26544658dd9e9c8f78ca36"}, - {file = "pulsar_client-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:cd01fd419280e9013d1655bc53662248be2656b623b1506480e1a985aa7dadd2"}, - {file = "pulsar_client-3.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:0abe54d84db76435a6cd88ce27610352cabc7efae9fa3e7f874e032ec2ca0b3f"}, - {file = "pulsar_client-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9a1b6a806eb4819d8cbab1c4ae44ebf2110a94204a46c365f5757e1455252f2"}, - {file = "pulsar_client-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34ea2a6b75ae0e303d522e5b57c75a4ff03dc18b9bfc14151fb14dfaf5866f17"}, - {file = "pulsar_client-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:be6d3a9b2e1db3b6d1a7db5e13f7b4ed420674cf072cdb520fb004c4cd54c0af"}, - {file = "pulsar_client-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b6b733e6239ffb505f7084df0175baf9d0215f14d0a02e9bbd1fdf71a2d6ea17"}, - {file = "pulsar_client-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:edc2135d02b4793efb086edca0ffaa6e8ac9133961c2cdc17ae487e0a53da481"}, -] - -[package.dependencies] -certifi = "*" - -[package.extras] -all = ["apache-bookkeeper-client (>=4.16.1)", "fastavro (==1.7.3)", "grpcio (>=1.8.2)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] -avro = ["fastavro (==1.7.3)"] -functions = ["apache-bookkeeper-client (>=4.16.1)", "grpcio (>=1.8.2)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] - [[package]] name = "pure-eval" version = "0.2.2" @@ -8719,24 +8478,6 @@ files = [ [package.dependencies] typing-extensions = "*" -[[package]] -name = "pygithub" -version = "1.59.0" -description = "Use the full Github API v3" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "PyGithub-1.59.0-py3-none-any.whl", hash = "sha256:126bdbae72087d8d038b113aab6b059b4553cb59348e3024bb1a1cae406ace9e"}, - {file = "PyGithub-1.59.0.tar.gz", hash = "sha256:6e05ff49bac3caa7d1d6177a10c6e55a3e20c85b92424cc198571fd0cf786690"}, -] - -[package.dependencies] -deprecated = "*" -pyjwt = {version = ">=2.4.0", extras = ["crypto"]} -pynacl = ">=1.4.0" -requests = ">=2.14.0" - [[package]] name = "pygments" version = "2.15.1" @@ -8757,7 +8498,7 @@ name = "pyjwt" version = "2.7.0" description = "JSON Web Token implementation in Python" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "PyJWT-2.7.0-py3-none-any.whl", hash = "sha256:ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1"}, @@ -8800,7 +8541,7 @@ name = "pymongo" version = "4.3.3" description = "Python driver for MongoDB " category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "pymongo-4.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:74731c9e423c93cbe791f60c27030b6af6a948cef67deca079da6cd1bb583a8e"}, @@ -8942,33 +8683,6 @@ files = [ {file = "PyMuPDF-1.22.3.tar.gz", hash = "sha256:5ecd928e96e63092571020973aa145b57b75707f3a3df97c742e563112615891"}, ] -[[package]] -name = "pynacl" -version = "1.5.0" -description = "Python binding to the Networking and Cryptography (NaCl) library" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, - {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, - {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, - {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, - {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, - {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, -] - -[package.dependencies] -cffi = ">=1.4.1" - -[package.extras] -docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] -tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] - [[package]] name = "pynvml" version = "11.5.0" @@ -9076,17 +8790,6 @@ files = [ doc = ["sphinx", "sphinx_rtd_theme"] test = ["flake8", "isort", "pytest"] -[[package]] -name = "pypika" -version = "0.48.9" -description = "A SQL query builder API for Python" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, -] - [[package]] name = "pyproj" version = "3.5.0" @@ -9155,7 +8858,7 @@ name = "pyreadline3" version = "3.4.1" description = "A python implementation of GNU readline." category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, @@ -9478,31 +9181,6 @@ files = [ {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, ] -[[package]] -name = "python-magic" -version = "0.4.27" -description = "File type identification using libmagic" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"}, - {file = "python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"}, -] - -[[package]] -name = "python-magic-bin" -version = "0.4.14" -description = "File type identification using libmagic binary package" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "python_magic_bin-0.4.14-py2.py3-none-macosx_10_6_intel.whl", hash = "sha256:7b1743b3dbf16601d6eedf4e7c2c9a637901b0faaf24ad4df4d4527e7d8f66a4"}, - {file = "python_magic_bin-0.4.14-py2.py3-none-win32.whl", hash = "sha256:34a788c03adde7608028203e2dbb208f1f62225ad91518787ae26d603ae68892"}, - {file = "python_magic_bin-0.4.14-py2.py3-none-win_amd64.whl", hash = "sha256:90be6206ad31071a36065a2fc169c5afb5e0355cbe6030e87641c6c62edc2b69"}, -] - [[package]] name = "python-multipart" version = "0.0.6" @@ -9983,7 +9661,7 @@ name = "redis" version = "4.5.5" description = "Python client for Redis database and key-value store" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "redis-4.5.5-py3-none-any.whl", hash = "sha256:77929bc7f5dab9adf3acba2d3bb7d7658f1e0c2f1cafe7eb36434e751c471119"}, @@ -10002,7 +9680,7 @@ name = "regex" version = "2023.6.3" description = "Alternative regular expression module, to replace re." category = "main" -optional = false +optional = true python-versions = ">=3.6" files = [ {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, @@ -10299,7 +9977,7 @@ name = "s3transfer" version = "0.6.1" description = "An Amazon S3 Transfer Manager" category = "main" -optional = false +optional = true python-versions = ">= 3.7" files = [ {file = "s3transfer-0.6.1-py3-none-any.whl", hash = "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346"}, @@ -10317,7 +9995,7 @@ name = "safetensors" version = "0.3.1" description = "Fast and Safe Tensor serialization" category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "safetensors-0.3.1-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:2ae9b7dd268b4bae6624729dac86deb82104820e9786429b0583e5168db2f770"}, @@ -10393,7 +10071,7 @@ name = "scikit-learn" version = "1.2.2" description = "A set of python modules for machine learning and data mining" category = "main" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7"}, @@ -10436,7 +10114,7 @@ name = "scipy" version = "1.6.1" description = "SciPy: Scientific Library for Python" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "scipy-1.6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a15a1f3fc0abff33e792d6049161b7795909b40b97c6cc2934ed54384017ab76"}, @@ -10468,7 +10146,7 @@ name = "scipy" version = "1.9.3" description = "Fundamental algorithms for scientific computing in Python" category = "main" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"}, @@ -10552,7 +10230,7 @@ name = "sentence-transformers" version = "2.2.2" description = "Multilingual text embeddings" category = "main" -optional = false +optional = true python-versions = ">=3.6.0" files = [ {file = "sentence-transformers-2.2.2.tar.gz", hash = "sha256:dbc60163b27de21076c9a30d24b5b7b6fa05141d68cf2553fa9a77bf79a29136"}, @@ -10575,7 +10253,7 @@ name = "sentencepiece" version = "0.1.99" description = "SentencePiece python wrapper" category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "sentencepiece-0.1.99-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0eb528e70571b7c02723e5804322469b82fe7ea418c96051d0286c0fa028db73"}, @@ -10647,7 +10325,7 @@ name = "sgmllib3k" version = "1.0.0" description = "Py3k port of sgmllib." category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "sgmllib3k-1.0.0.tar.gz", hash = "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"}, @@ -11201,7 +10879,7 @@ name = "starlette" version = "0.27.0" description = "The little ASGI library that shines." category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, @@ -11295,7 +10973,7 @@ name = "sympy" version = "1.12" description = "Computer algebra system (CAS) in Python" category = "main" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, @@ -11339,21 +11017,6 @@ wcwidth = {version = "*", optional = true, markers = "extra == \"widechars\""} [package.extras] widechars = ["wcwidth"] -[[package]] -name = "tair" -version = "1.3.4" -description = "Python client for Tair" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tair-1.3.4-py3-none-any.whl", hash = "sha256:5f034559cfccd9edacea866354584eaef0150d1901cfc812a442aacc17b68656"}, - {file = "tair-1.3.4.tar.gz", hash = "sha256:a4d6046c9c523c3e39305c90b63ac68db354121c80e27866b824eb085ae1e096"}, -] - -[package.dependencies] -redis = ">=4.4.4" - [[package]] name = "tblib" version = "2.0.0" @@ -11753,7 +11416,7 @@ name = "threadpoolctl" version = "3.1.0" description = "threadpoolctl" category = "main" -optional = false +optional = true python-versions = ">=3.6" files = [ {file = "threadpoolctl-3.1.0-py3-none-any.whl", hash = "sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b"}, @@ -11781,7 +11444,7 @@ name = "tiktoken" version = "0.3.3" description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" category = "main" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "tiktoken-0.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1f37fa75ba70c1bc7806641e8ccea1fba667d23e6341a1591ea333914c226a9"}, @@ -11875,7 +11538,7 @@ name = "tokenizers" version = "0.13.3" description = "Fast and Customizable Tokenizers" category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "tokenizers-0.13.3-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:f3835c5be51de8c0a092058a4d4380cb9244fb34681fd0a295fbf0a52a5fdf33"}, @@ -11966,7 +11629,7 @@ name = "torch" version = "1.13.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" category = "main" -optional = false +optional = true python-versions = ">=3.7.0" files = [ {file = "torch-1.13.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:fd12043868a34a8da7d490bf6db66991108b00ffbeecb034228bfcbbd4197143"}, @@ -12007,7 +11670,7 @@ name = "torchvision" version = "0.14.1" description = "image and video datasets and models for torch deep learning" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "torchvision-0.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb05dd9dd3af5428fee525400759daf8da8e4caec45ddd6908cfb36571f6433"}, @@ -12104,7 +11767,7 @@ name = "transformers" version = "4.30.2" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" category = "main" -optional = false +optional = true python-versions = ">=3.7.0" files = [ {file = "transformers-4.30.2-py3-none-any.whl", hash = "sha256:c332e3a3097f9ed89ce556b403251235931c00237b8bc2d7adaa19d226c13f1d"}, @@ -12436,7 +12099,7 @@ name = "uvicorn" version = "0.22.0" description = "The lightning-fast ASGI server." category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "uvicorn-0.22.0-py3-none-any.whl", hash = "sha256:e9434d3bbf05f310e762147f769c9f21235ee118ba2d2bf1155a7196448bd996"}, @@ -12462,7 +12125,7 @@ name = "uvloop" version = "0.17.0" description = "Fast implementation of asyncio event loop on top of libuv" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718"}, @@ -12507,7 +12170,7 @@ name = "validators" version = "0.20.0" description = "Python Data Validation for Humans™." category = "main" -optional = false +optional = true python-versions = ">=3.4" files = [ {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"}, @@ -12598,7 +12261,7 @@ name = "watchfiles" version = "0.19.0" description = "Simple, modern and high performance file watching and code reload in python." category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "watchfiles-0.19.0-cp37-abi3-macosx_10_7_x86_64.whl", hash = "sha256:91633e64712df3051ca454ca7d1b976baf842d7a3640b87622b323c55f3345e7"}, @@ -12645,7 +12308,7 @@ name = "weaviate-client" version = "3.20.1" description = "A python native Weaviate client" category = "main" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "weaviate-client-3.20.1.tar.gz", hash = "sha256:752912423f6334575c3feffcc98e5604e2d4b3bd3baddbff57d38db23bec3e9f"}, @@ -12711,7 +12374,7 @@ name = "websockets" version = "11.0.3" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, @@ -12809,7 +12472,7 @@ name = "wget" version = "3.2" description = "pure python download utility" category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061"}, @@ -12820,7 +12483,7 @@ name = "wheel" version = "0.40.0" description = "A built-package format for Python" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "wheel-0.40.0-py3-none-any.whl", hash = "sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247"}, @@ -12938,7 +12601,7 @@ name = "wikipedia" version = "1.4.0" description = "Wikipedia API for Python" category = "main" -optional = false +optional = true python-versions = "*" files = [ {file = "wikipedia-1.4.0.tar.gz", hash = "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2"}, @@ -12953,7 +12616,7 @@ name = "win32-setctime" version = "1.1.0" description = "A small Python utility to set file creation time on Windows" category = "main" -optional = false +optional = true python-versions = ">=3.5" files = [ {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, @@ -13547,7 +13210,7 @@ name = "zstandard" version = "0.21.0" description = "Zstandard bindings for Python" category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "zstandard-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:649a67643257e3b2cff1c0a73130609679a5673bf389564bc6d4b164d822a7ce"}, @@ -13613,10 +13276,9 @@ javascript = ["esprima"] llms = ["anthropic", "clarifai", "cohere", "huggingface_hub", "manifest-ml", "nlpcloud", "openai", "openllm", "openlm", "torch", "transformers", "xinference"] openai = ["openai", "tiktoken"] qdrant = ["qdrant-client"] -scheduled-testing = ["openai"] text-helpers = ["chardet"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "a8fd5dbcab821e39c502724e13a2f85b718f3e06c7c3f98062de01a44cf1ff6e" +content-hash = "74907003b75271582d92396b8323021eb8e1596624536d7653b548828af4a40c" diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index d1ae72291..6131595b8 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -177,32 +177,8 @@ optional = true pytest-vcr = "^1.0.2" wrapt = "^1.15.0" openai = "^0.27.4" -elasticsearch = {extras = ["async"], version = "^8.6.2"} -redis = "^4.5.4" -pinecone-client = "^2.2.1" -pinecone-text = "^0.4.2" -pymongo = "^4.3.3" -clickhouse-connect = "^0.5.14" -transformers = "^4.27.4" -deeplake = "^3.6.8" -libdeeplake = "^0.0.60" -weaviate-client = "^3.15.5" -torch = "^1.0.0" -chromadb = "^0.4.0" -tiktoken = "^0.3.3" python-dotenv = "^1.0.0" -sentence-transformers = "^2" -gptcache = "^0.1.9" -promptlayer = "^0.1.80" -tair = "^1.3.3" -wikipedia = "^1" cassio = "^0.0.7" -arxiv = "^1.4" -mastodon-py = "^1.8.1" -momento = "^1.5.0" -# Please do not add any dependencies in the test_integration group -# See instructions above ^^ -pygithub = "^1.59.0" [tool.poetry.group.lint.dependencies] ruff = "^0.0.249" @@ -376,10 +352,6 @@ extended_testing = [ "anthropic", ] -scheduled_testing = [ - "openai", -] - [tool.ruff] select = [ "E", # pycodestyle diff --git a/libs/langchain/tests/integration_tests/document_loaders/test_geodataframe.py b/libs/langchain/tests/integration_tests/document_loaders/test_geodataframe.py index 37fbbe5ff..2dbf27774 100644 --- a/libs/langchain/tests/integration_tests/document_loaders/test_geodataframe.py +++ b/libs/langchain/tests/integration_tests/document_loaders/test_geodataframe.py @@ -1,6 +1,7 @@ +from __future__ import annotations + from typing import TYPE_CHECKING -import geopandas import pytest from langchain.document_loaders import GeoDataFrameLoader @@ -14,6 +15,8 @@ else: @pytest.mark.requires("geopandas") def sample_gdf() -> GeoDataFrame: + import geopandas + path_to_data = geopandas.datasets.get_path("nybb") gdf = geopandas.read_file(path_to_data) gdf["area"] = gdf.area diff --git a/libs/langchain/tests/integration_tests/document_loaders/test_news.py b/libs/langchain/tests/integration_tests/document_loaders/test_news.py index d52655b73..2507df34f 100644 --- a/libs/langchain/tests/integration_tests/document_loaders/test_news.py +++ b/libs/langchain/tests/integration_tests/document_loaders/test_news.py @@ -2,12 +2,13 @@ import random import pytest import requests -from bs4 import BeautifulSoup from langchain.document_loaders import NewsURLLoader def get_random_news_url() -> str: + from bs4 import BeautifulSoup + response = requests.get("https://news.google.com") soup = BeautifulSoup(response.text, "html.parser") diff --git a/libs/langchain/tests/integration_tests/document_loaders/test_tensorflow_datasets.py b/libs/langchain/tests/integration_tests/document_loaders/test_tensorflow_datasets.py index 50a5f7e96..e930d10fe 100644 --- a/libs/langchain/tests/integration_tests/document_loaders/test_tensorflow_datasets.py +++ b/libs/langchain/tests/integration_tests/document_loaders/test_tensorflow_datasets.py @@ -1,4 +1,7 @@ """Integration tests for the TensorFlow Dataset Loader.""" +from __future__ import annotations + +from typing import TYPE_CHECKING import pytest from pydantic.error_wrappers import ValidationError @@ -6,13 +9,8 @@ from pydantic.error_wrappers import ValidationError from langchain.document_loaders.tensorflow_datasets import TensorflowDatasetLoader from langchain.schema.document import Document -# adding tensorflow and tensorflow_datasets to pyproject.toml is not working -# these tests can be run in isolation only -tensorflow = pytest.importorskip("tensorflow") -tensorflow_datasets = pytest.importorskip("tensorflow_datasets") - -# placed here after checking for tensorflow package installation -import tensorflow as tf # noqa: E402 +if TYPE_CHECKING: + import tensorflow as tf # noqa: E402 def decode_to_str(item: tf.Tensor) -> str: diff --git a/libs/langchain/tests/integration_tests/embeddings/test_self_hosted.py b/libs/langchain/tests/integration_tests/embeddings/test_self_hosted.py index 055f73433..cb317d11c 100644 --- a/libs/langchain/tests/integration_tests/embeddings/test_self_hosted.py +++ b/libs/langchain/tests/integration_tests/embeddings/test_self_hosted.py @@ -1,8 +1,6 @@ """Test self-hosted embeddings.""" from typing import Any -from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline - from langchain.embeddings import ( SelfHostedEmbeddings, SelfHostedHuggingFaceEmbeddings, @@ -59,6 +57,8 @@ def test_self_hosted_huggingface_instructor_embedding_query() -> None: def get_pipeline() -> Any: """Get pipeline for testing.""" + from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline + model_id = "facebook/bart-base" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id) diff --git a/libs/langchain/tests/integration_tests/llms/test_huggingface_pipeline.py b/libs/langchain/tests/integration_tests/llms/test_huggingface_pipeline.py index 8dfc9c8b2..46fbeb91b 100644 --- a/libs/langchain/tests/integration_tests/llms/test_huggingface_pipeline.py +++ b/libs/langchain/tests/integration_tests/llms/test_huggingface_pipeline.py @@ -2,8 +2,6 @@ from pathlib import Path -from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline - from langchain.llms.huggingface_pipeline import HuggingFacePipeline from langchain.llms.loading import load_llm from tests.integration_tests.llms.utils import assert_llm_equality @@ -48,6 +46,8 @@ def test_saving_loading_llm(tmp_path: Path) -> None: def test_init_with_pipeline() -> None: """Test initialization with a HF pipeline.""" + from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline + model_id = "gpt2" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id) diff --git a/libs/langchain/tests/integration_tests/llms/test_self_hosted_llm.py b/libs/langchain/tests/integration_tests/llms/test_self_hosted_llm.py index 73457a01c..1419b1efe 100644 --- a/libs/langchain/tests/integration_tests/llms/test_self_hosted_llm.py +++ b/libs/langchain/tests/integration_tests/llms/test_self_hosted_llm.py @@ -2,8 +2,6 @@ import pickle from typing import Any, List, Optional -from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline - from langchain.llms import SelfHostedHuggingFaceLLM, SelfHostedPipeline model_reqs = ["pip:./", "transformers", "torch"] @@ -58,6 +56,8 @@ def test_self_hosted_huggingface_pipeline_summarization() -> None: def load_pipeline() -> Any: """Load pipeline for testing.""" + from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline + model_id = "gpt2" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id) diff --git a/libs/langchain/tests/integration_tests/memory/test_rockset.py b/libs/langchain/tests/integration_tests/memory/test_rockset.py index e1cb50d05..2d6ef5dbd 100644 --- a/libs/langchain/tests/integration_tests/memory/test_rockset.py +++ b/libs/langchain/tests/integration_tests/memory/test_rockset.py @@ -8,8 +8,6 @@ and ROCKSET_REGION environment variables set. import json import os -from rockset import DevRegions, Regions, RocksetClient - from langchain.memory import ConversationBufferMemory from langchain.memory.chat_message_histories import RocksetChatMessageHistory from langchain.schema.messages import _message_to_dict @@ -23,6 +21,8 @@ class TestRockset: @classmethod def setup_class(cls) -> None: + from rockset import DevRegions, Regions, RocksetClient + assert os.environ.get("ROCKSET_API_KEY") is not None assert os.environ.get("ROCKSET_REGION") is not None diff --git a/libs/langchain/tests/integration_tests/storage/test_redis.py b/libs/langchain/tests/integration_tests/storage/test_redis.py index 853028953..c5b4a6959 100644 --- a/libs/langchain/tests/integration_tests/storage/test_redis.py +++ b/libs/langchain/tests/integration_tests/storage/test_redis.py @@ -2,23 +2,13 @@ import os import typing import uuid -from typing import Any import pytest -import redis from langchain.storage.redis import RedisStore if typing.TYPE_CHECKING: - try: - from redis import Redis - except ImportError: - # Ignoring mypy here to allow assignment of Any to Redis in the event - # that redis is not installed. - Redis = Any # type:ignore -else: - Redis = Any # type:ignore - + from redis import Redis pytest.importorskip("redis") @@ -26,6 +16,8 @@ pytest.importorskip("redis") @pytest.fixture def redis_client() -> Redis: """Yield redis client.""" + import redis + # Using standard port, but protecting against accidental data loss # by requiring a password. # This fixture flushes the database! diff --git a/libs/langchain/tests/integration_tests/utilities/test_tensorflow_datasets.py b/libs/langchain/tests/integration_tests/utilities/test_tensorflow_datasets.py index de2d572b1..3066aa61e 100644 --- a/libs/langchain/tests/integration_tests/utilities/test_tensorflow_datasets.py +++ b/libs/langchain/tests/integration_tests/utilities/test_tensorflow_datasets.py @@ -1,16 +1,16 @@ """Integration tests for the TensorFlow Dataset client.""" +from __future__ import annotations + +from typing import TYPE_CHECKING import pytest -import tensorflow as tf from pydantic.error_wrappers import ValidationError from langchain.schema.document import Document from langchain.utilities.tensorflow_datasets import TensorflowDatasets -# adding tensorflow and tensorflow_datasets to pyproject.toml is not working -# these tests can be tested in isolation only -tensorflow = pytest.importorskip("tensorflow") -tensorflow_datasets = pytest.importorskip("tensorflow_datasets") +if TYPE_CHECKING: + import tensorflow as tf # noqa: E402 def decode_to_str(item: tf.Tensor) -> str: From 3bdc273ab3a2bb619e63fd1130a36e4a3b8771ef Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Thu, 10 Aug 2023 18:41:19 +0100 Subject: [PATCH 014/175] Implement .transform() in RunnablePassthrough() (#9032) - This ensures passthrough doesnt break streaming --------- Co-authored-by: Bagatur --- .../langchain/schema/runnable/passthrough.py | 30 +++++++++++++++++-- .../tests/unit_tests/schema/test_runnable.py | 14 +++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/libs/langchain/langchain/schema/runnable/passthrough.py b/libs/langchain/langchain/schema/runnable/passthrough.py index 782c06c59..a97e708b6 100644 --- a/libs/langchain/langchain/schema/runnable/passthrough.py +++ b/libs/langchain/langchain/schema/runnable/passthrough.py @@ -1,9 +1,18 @@ from __future__ import annotations -from typing import List, Optional +from typing import AsyncIterator, Iterator, List, Optional from langchain.load.serializable import Serializable -from langchain.schema.runnable.base import Input, Runnable, RunnableConfig +from langchain.schema.runnable.base import Input, Runnable +from langchain.schema.runnable.config import RunnableConfig + + +def identity(x: Input) -> Input: + return x + + +async def aidentity(x: Input) -> Input: + return x class RunnablePassthrough(Serializable, Runnable[Input, Input]): @@ -20,4 +29,19 @@ class RunnablePassthrough(Serializable, Runnable[Input, Input]): return self.__class__.__module__.split(".")[:-1] def invoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Input: - return self._call_with_config(lambda x: x, input, config) + return self._call_with_config(identity, input, config) + + async def ainvoke( + self, input: Input, config: RunnableConfig | None = None + ) -> Input: + return await self._acall_with_config(aidentity, input, config) + + def transform( + self, input: Iterator[Input], config: RunnableConfig | None = None + ) -> Iterator[Input]: + return self._transform_stream_with_config(input, identity, config) + + def atransform( + self, input: AsyncIterator[Input], config: RunnableConfig | None = None + ) -> AsyncIterator[Input]: + return self._atransform_stream_with_config(input, identity, config) diff --git a/libs/langchain/tests/unit_tests/schema/test_runnable.py b/libs/langchain/tests/unit_tests/schema/test_runnable.py index 4ef0e33d7..aa0b7f4c1 100644 --- a/libs/langchain/tests/unit_tests/schema/test_runnable.py +++ b/libs/langchain/tests/unit_tests/schema/test_runnable.py @@ -784,6 +784,13 @@ def test_deep_stream() -> None: assert len(chunks) == len("foo-lish") assert "".join(chunks) == "foo-lish" + chunks = [] + for chunk in (chain | RunnablePassthrough()).stream({"question": "What up"}): + chunks.append(chunk) + + assert len(chunks) == len("foo-lish") + assert "".join(chunks) == "foo-lish" + @pytest.mark.asyncio async def test_deep_astream() -> None: @@ -804,6 +811,13 @@ async def test_deep_astream() -> None: assert len(chunks) == len("foo-lish") assert "".join(chunks) == "foo-lish" + chunks = [] + async for chunk in (chain | RunnablePassthrough()).astream({"question": "What up"}): + chunks.append(chunk) + + assert len(chunks) == len("foo-lish") + assert "".join(chunks) == "foo-lish" + @pytest.fixture() def llm_with_fallbacks() -> RunnableWithFallbacks: From 8d351bfc20c05ee0422636a1c2c3cee600ba4a68 Mon Sep 17 00:00:00 2001 From: "Blake (Yung Cher Ho)" Date: Thu, 10 Aug 2023 18:56:06 +0100 Subject: [PATCH 015/175] Takeoff integration (#9045) ## Description: This PR adds the Titan Takeoff Server to the available LLMs in LangChain. Titan Takeoff is an inference server created by [TitanML](https://www.titanml.co/) that allows you to deploy large language models locally on your hardware in a single command. Most generative model architectures are included, such as Falcon, Llama 2, GPT2, T5 and many more. Read more about Titan Takeoff here: - [Blog](https://medium.com/@TitanML/introducing-titan-takeoff-6c30e55a8e1e) - [Docs](https://docs.titanml.co/docs/titan-takeoff/getting-started) #### Testing As Titan Takeoff runs locally on port 8000 by default, no network access is needed. Responses are mocked for testing. - [x] Make Lint - [x] Make Format - [x] Make Test #### Dependencies No new dependencies are introduced. However, users will need to install the titan-iris package in their local environment and start the Titan Takeoff inferencing server in order to use the Titan Takeoff integration. Thanks for your help and please let me know if you have any questions. cc: @hwchase17 @baskaryan --- .../integrations/llms/titan_takeoff.ipynb | 169 ++++++++++++++++++ libs/langchain/langchain/llms/__init__.py | 3 + .../langchain/langchain/llms/titan_takeoff.py | 157 ++++++++++++++++ .../llms/test_titan_takeoff.py | 18 ++ 4 files changed, 347 insertions(+) create mode 100644 docs/extras/integrations/llms/titan_takeoff.ipynb create mode 100644 libs/langchain/langchain/llms/titan_takeoff.py create mode 100644 libs/langchain/tests/integration_tests/llms/test_titan_takeoff.py diff --git a/docs/extras/integrations/llms/titan_takeoff.ipynb b/docs/extras/integrations/llms/titan_takeoff.ipynb new file mode 100644 index 000000000..b7150168d --- /dev/null +++ b/docs/extras/integrations/llms/titan_takeoff.ipynb @@ -0,0 +1,169 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Titan Takeoff\n", + "\n", + "TitanML helps businesses build and deploy better, smaller, cheaper, and faster NLP models through our training, compression, and inference optimization platform. \n", + "\n", + "Our inference server, [Titan Takeoff](https://docs.titanml.co/docs/titan-takeoff/getting-started) enables deployment of LLMs locally on your hardware in a single command. Most generative model architectures are supported, such as Falcon, Llama 2, GPT2, T5 and many more." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installation\n", + "\n", + "To get started with Iris Takeoff, all you need is to have docker and python installed on your local system. If you wish to use the server with gpu suport, then you will need to install docker with cuda support.\n", + "\n", + "For Mac and Windows users, make sure you have the docker daemon running! You can check this by running docker ps in your terminal. To start the daemon, open the docker desktop app.\n", + "\n", + "Run the following command to install the Iris CLI that will enable you to run the takeoff server:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "shellscript" + } + }, + "outputs": [], + "source": [ + "pip install titan-iris" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Choose a Model\n", + "Iris Takeoff supports many of the most powerful generative text models, such as Falcon, MPT, and Llama. See the [supported models](https://docs.titanml.co/docs/titan-takeoff/supported-models) for more information. For information about using your own models, see the [custom models](https://docs.titanml.co/docs/titan-takeoff/Advanced/custom-models).\n", + "\n", + "Going forward in this demo we will be using the falcon 7B instruct model. This is a good open source model that is trained to follow instructions, and is small enough to easily inference even on CPUs.\n", + "\n", + "## Taking off\n", + "Models are referred to by their model id on HuggingFace. Takeoff uses port 8000 by default, but can be configured to use another port. There is also support to use a Nvidia GPU by specifing cuda for the device flag.\n", + "\n", + "To start the takeoff server, run:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "shellscript" + } + }, + "outputs": [], + "source": [ + "iris takeoff --model tiiuae/falcon-7b-instruct --device cpu\n", + "iris takeoff --model tiiuae/falcon-7b-instruct --device cuda # Nvidia GPU required\n", + "iris takeoff --model tiiuae/falcon-7b-instruct --device cpu --port 5000 # run on port 5000 (default: 8000)\n", + "```" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You will then be directed to a login page, where you will need to create an account to proceed.\n", + "After logging in, run the command onscreen to check whether the server is ready. When it is ready, you can start using the Takeoff integration\n", + "\n", + "## Inferencing your model\n", + "To access your LLM, use the TitanTakeoff LLM wrapper:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.llms import TitanTakeoff\n", + "\n", + "llm = TitanTakeoff(\n", + " port=8000,\n", + " generate_max_length=128,\n", + " temperature=1.0\n", + ")\n", + "\n", + "prompt = \"What is the largest planet in the solar system?\"\n", + "\n", + "llm(prompt)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "No parameters are needed by default, but a port can be specified and [generation parameters](https://docs.titanml.co/docs/titan-takeoff/Advanced/generation-parameters) can be supplied.\n", + "\n", + "### Streaming\n", + "Streaming is also supported via the streaming flag:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler\n", + "from langchain.callbacks.manager import CallbackManager\n", + "\n", + "llm = TitanTakeoff(port=8000, callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]), streaming=True)\n", + "\n", + "prompt = \"What is the capital of France?\"\n", + "\n", + "llm(prompt)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Integration with LLMChain" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain import PromptTemplate, LLMChain\n", + "\n", + "llm = TitanTakeoff()\n", + "\n", + "template = \"What is the capital of {country}\"\n", + "\n", + "prompt = PromptTemplate(template=template, input_variables=[\"country\"])\n", + "\n", + "llm_chain = LLMChain(llm=llm, prompt=prompt)\n", + "\n", + "generated = llm_chain.run(country=\"Belgium\")\n", + "print(generated)" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/libs/langchain/langchain/llms/__init__.py b/libs/langchain/langchain/llms/__init__.py index 9afd553de..256ea9585 100644 --- a/libs/langchain/langchain/llms/__init__.py +++ b/libs/langchain/langchain/llms/__init__.py @@ -76,6 +76,7 @@ from langchain.llms.self_hosted_hugging_face import SelfHostedHuggingFaceLLM from langchain.llms.stochasticai import StochasticAI from langchain.llms.symblai_nebula import Nebula from langchain.llms.textgen import TextGen +from langchain.llms.titan_takeoff import TitanTakeoff from langchain.llms.tongyi import Tongyi from langchain.llms.vertexai import VertexAI from langchain.llms.vllm import VLLM @@ -142,6 +143,7 @@ __all__ = [ "SelfHostedHuggingFaceLLM", "SelfHostedPipeline", "StochasticAI", + "TitanTakeoff", "Tongyi", "VertexAI", "VLLM", @@ -203,6 +205,7 @@ type_to_cls_dict: Dict[str, Type[BaseLLM]] = { "self_hosted_hugging_face": SelfHostedHuggingFaceLLM, "stochasticai": StochasticAI, "tongyi": Tongyi, + "titan_takeoff": TitanTakeoff, "vertexai": VertexAI, "openllm": OpenLLM, "openllm_client": OpenLLM, diff --git a/libs/langchain/langchain/llms/titan_takeoff.py b/libs/langchain/langchain/llms/titan_takeoff.py new file mode 100644 index 000000000..517918fa9 --- /dev/null +++ b/libs/langchain/langchain/llms/titan_takeoff.py @@ -0,0 +1,157 @@ +from typing import Any, Iterator, List, Mapping, Optional + +import requests +from requests.exceptions import ConnectionError + +from langchain.callbacks.manager import CallbackManagerForLLMRun +from langchain.llms.base import LLM +from langchain.llms.utils import enforce_stop_tokens +from langchain.schema.output import GenerationChunk + + +class TitanTakeoff(LLM): + port: int = 8000 + """Specifies the port to use for the Titan Takeoff API. Default = 8000.""" + + generate_max_length: int = 128 + """Maximum generation length. Default = 128.""" + + sampling_topk: int = 1 + """Sample predictions from the top K most probable candidates. Default = 1.""" + + sampling_topp: float = 1.0 + """Sample from predictions whose cumulative probability exceeds this value. + Default = 1.0. + """ + + sampling_temperature: float = 1.0 + """Sample with randomness. Bigger temperatures are associated with + more randomness and 'creativity'. Default = 1.0. + """ + + repetition_penalty: float = 1.0 + """Penalise the generation of tokens that have been generated before. + Set to > 1 to penalize. Default = 1 (no penalty). + """ + + no_repeat_ngram_size: int = 0 + """Prevent repetitions of ngrams of this size. Default = 0 (turned off).""" + + streaming: bool = False + """Whether to stream the output. Default = False.""" + + @property + def _default_params(self) -> Mapping[str, Any]: + """Get the default parameters for calling Titan Takeoff Server.""" + params = { + "generate_max_length": self.generate_max_length, + "sampling_topk": self.sampling_topk, + "sampling_topp": self.sampling_topp, + "sampling_temperature": self.sampling_temperature, + "repetition_penalty": self.repetition_penalty, + "no_repeat_ngram_size": self.no_repeat_ngram_size, + } + return params + + @property + def _llm_type(self) -> str: + """Return type of llm.""" + return "titan_takeoff" + + def _call( + self, + prompt: str, + stop: Optional[List[str]] = None, + run_manager: Optional[CallbackManagerForLLMRun] = None, + **kwargs: Any, + ) -> str: + """Call out to Titan Takeoff generate endpoint. + + Args: + prompt: The prompt to pass into the model. + stop: Optional list of stop words to use when generating. + + Returns: + The string generated by the model. + + Example: + .. code-block:: python + + prompt = "What is the capital of the United Kingdom?" + response = model(prompt) + + """ + try: + if self.streaming: + text_output = "" + for chunk in self._stream( + prompt=prompt, + stop=stop, + run_manager=run_manager, + ): + text_output += chunk.text + return text_output + + url = f"http://localhost:{self.port}/generate" + params = {"text": prompt, **self._default_params} + + response = requests.post(url, json=params) + response.raise_for_status() + response.encoding = "utf-8" + text = "" + + if "message" in response.json(): + text = response.json()["message"] + else: + raise ValueError("Something went wrong.") + if stop is not None: + text = enforce_stop_tokens(text, stop) + return text + except ConnectionError: + raise ConnectionError( + "Could not connect to Titan Takeoff server. \ + Please make sure that the server is running." + ) + + def _stream( + self, + prompt: str, + stop: Optional[List[str]] = None, + run_manager: Optional[CallbackManagerForLLMRun] = None, + **kwargs: Any, + ) -> Iterator[GenerationChunk]: + """Call out to Titan Takeoff stream endpoint. + + Args: + prompt: The prompt to pass into the model. + stop: Optional list of stop words to use when generating. + + Returns: + The string generated by the model. + + Yields: + A dictionary like object containing a string token. + + Example: + .. code-block:: python + + prompt = "What is the capital of the United Kingdom?" + response = model(prompt) + + """ + url = f"http://localhost:{self.port}/generate_stream" + params = {"text": prompt, **self._default_params} + + response = requests.post(url, json=params, stream=True) + response.encoding = "utf-8" + for text in response.iter_content(chunk_size=1, decode_unicode=True): + if text: + chunk = GenerationChunk(text=text) + yield chunk + if run_manager: + run_manager.on_llm_new_token(token=chunk.text) + + @property + def _identifying_params(self) -> Mapping[str, Any]: + """Get the identifying parameters.""" + return {"port": self.port, **{}, **self._default_params} diff --git a/libs/langchain/tests/integration_tests/llms/test_titan_takeoff.py b/libs/langchain/tests/integration_tests/llms/test_titan_takeoff.py new file mode 100644 index 000000000..640fd4feb --- /dev/null +++ b/libs/langchain/tests/integration_tests/llms/test_titan_takeoff.py @@ -0,0 +1,18 @@ +"""Test Titan Takeoff wrapper.""" + + +import responses + +from langchain.llms.titan_takeoff import TitanTakeoff + + +@responses.activate +def test_titan_takeoff_call() -> None: + """Test valid call to Titan Takeoff.""" + url = "http://localhost:8000/generate" + responses.add(responses.POST, url, json={"message": "2 + 2 is 4"}, status=200) + + # response = requests.post(url) + llm = TitanTakeoff() + output = llm("What is 2 + 2?") + assert isinstance(output, str) From 08a0741d8265c3666fffd90218049b4d33a45747 Mon Sep 17 00:00:00 2001 From: Alvaro Bartolome Date: Thu, 10 Aug 2023 19:59:46 +0200 Subject: [PATCH 016/175] Update `ArgillaCallbackHandler` as of latest `argilla` release (#9043) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi @agola11, or whoever is reviewing this PR 😄 ## What's in this PR? As of the latest Argilla release, we'll change and refactor some things to make some workflows easier, one of those is how everything's pushed to Argilla, so that now there's no need to call `push_to_argilla` over a `FeedbackDataset` when either `push_to_argilla` is called for the first time, or `from_argilla` is called; among others. We also add some class variables to make sure those are easy to update in case we update those internally in the future, also to make the `warnings.warn` message lighter from the code view. P.S. Regarding the Twitter/X mention feel free to do so at either https://twitter.com/argilla_io or https://twitter.com/alvarobartt, or both if applicable, otherwise, just the first Twitter/X handle. --- .../langchain/callbacks/argilla_callback.py | 99 +++++++++++-------- 1 file changed, 58 insertions(+), 41 deletions(-) diff --git a/libs/langchain/langchain/callbacks/argilla_callback.py b/libs/langchain/langchain/callbacks/argilla_callback.py index 1d550461f..7ed9af15b 100644 --- a/libs/langchain/langchain/callbacks/argilla_callback.py +++ b/libs/langchain/langchain/callbacks/argilla_callback.py @@ -2,6 +2,8 @@ import os import warnings from typing import Any, Dict, List, Optional, Union +from packaging.version import parse + from langchain.callbacks.base import BaseCallbackHandler from langchain.schema import AgentAction, AgentFinish, LLMResult @@ -51,6 +53,13 @@ class ArgillaCallbackHandler(BaseCallbackHandler): "Argilla, no doubt about it." """ + REPO_URL = "https://github.com/argilla-io/argilla" + ISSUES_URL = f"{REPO_URL}/issues" + BLOG_URL = "https://docs.argilla.io/en/latest/guides/llms/practical_guides/use_argilla_callback_in_langchain.html" # noqa: E501 + + DEFAULT_API_URL = "http://localhost:6900" + DEFAULT_API_KEY = "argilla.apikey" + def __init__( self, dataset_name: str, @@ -58,23 +67,22 @@ class ArgillaCallbackHandler(BaseCallbackHandler): api_url: Optional[str] = None, api_key: Optional[str] = None, ) -> None: - """Initializes the `ArgillaCallbackHandler`. + f"""Initializes the `ArgillaCallbackHandler`. Args: dataset_name: name of the `FeedbackDataset` in Argilla. Note that it must exist in advance. If you need help on how to create a `FeedbackDataset` - in Argilla, please visit - https://docs.argilla.io/en/latest/guides/llms/practical_guides/use_argilla_callback_in_langchain.html. + in Argilla, please visit {self.BLOG_URL}. workspace_name: name of the workspace in Argilla where the specified `FeedbackDataset` lives in. Defaults to `None`, which means that the default workspace will be used. api_url: URL of the Argilla Server that we want to use, and where the `FeedbackDataset` lives in. Defaults to `None`, which means that either - `ARGILLA_API_URL` environment variable or the default - http://localhost:6900 will be used. + `ARGILLA_API_URL` environment variable or `{self.DEFAULT_API_URL}` will + be used. api_key: API Key to connect to the Argilla Server. Defaults to `None`, which means that either `ARGILLA_API_KEY` environment variable or the default - `argilla.apikey` will be used. + `{self.DEFAULT_API_KEY}` will be used. Raises: ImportError: if the `argilla` package is not installed. @@ -87,41 +95,47 @@ class ArgillaCallbackHandler(BaseCallbackHandler): # Import Argilla (not via `import_argilla` to keep hints in IDEs) try: import argilla as rg # noqa: F401 + + self.ARGILLA_VERSION = rg.__version__ except ImportError: raise ImportError( "To use the Argilla callback manager you need to have the `argilla` " "Python package installed. Please install it with `pip install argilla`" ) + # Check whether the Argilla version is compatible + if parse(self.ARGILLA_VERSION) < parse("1.8.0"): + raise ImportError( + f"The installed `argilla` version is {self.ARGILLA_VERSION} but " + "`ArgillaCallbackHandler` requires at least version 1.8.0. Please " + "upgrade `argilla` with `pip install --upgrade argilla`." + ) + # Show a warning message if Argilla will assume the default values will be used if api_url is None and os.getenv("ARGILLA_API_URL") is None: warnings.warn( ( "Since `api_url` is None, and the env var `ARGILLA_API_URL` is not" - " set, it will default to `http://localhost:6900`." + f" set, it will default to `{self.DEFAULT_API_URL}`." ), ) if api_key is None and os.getenv("ARGILLA_API_KEY") is None: warnings.warn( ( "Since `api_key` is None, and the env var `ARGILLA_API_KEY` is not" - " set, it will default to `argilla.apikey`." + f" set, it will default to `{self.DEFAULT_API_KEY}`." ), ) # Connect to Argilla with the provided credentials, if applicable try: - rg.init( - api_key=api_key, - api_url=api_url, - ) + rg.init(api_key=api_key, api_url=api_url) except Exception as e: raise ConnectionError( f"Could not connect to Argilla with exception: '{e}'.\n" "Please check your `api_key` and `api_url`, and make sure that " "the Argilla server is up and running. If the problem persists " - "please report it to https://github.com/argilla-io/argilla/issues " - "with the label `langchain`." + f"please report it to {self.ISSUES_URL} as an `integration` issue." ) from e # Set the Argilla variables @@ -130,46 +144,47 @@ class ArgillaCallbackHandler(BaseCallbackHandler): # Retrieve the `FeedbackDataset` from Argilla (without existing records) try: + extra_args = {} + if parse(self.ARGILLA_VERSION) < parse("1.14.0"): + warnings.warn( + f"You have Argilla {self.ARGILLA_VERSION}, but Argilla 1.14.0 or" + " higher is recommended.", + UserWarning, + ) + extra_args = {"with_records": False} self.dataset = rg.FeedbackDataset.from_argilla( name=self.dataset_name, workspace=self.workspace_name, - with_records=False, + **extra_args, ) except Exception as e: raise FileNotFoundError( - "`FeedbackDataset` retrieval from Argilla failed with exception:" - f" '{e}'.\nPlease check that the dataset with" - f" name={self.dataset_name} in the" + f"`FeedbackDataset` retrieval from Argilla failed with exception `{e}`." + f"\nPlease check that the dataset with name={self.dataset_name} in the" f" workspace={self.workspace_name} exists in advance. If you need help" " on how to create a `langchain`-compatible `FeedbackDataset` in" - " Argilla, please visit" - " https://docs.argilla.io/en/latest/guides/llms/practical_guides/use_argilla_callback_in_langchain.html." # noqa: E501 - " If the problem persists please report it to" - " https://github.com/argilla-io/argilla/issues with the label" - " `langchain`." + f" Argilla, please visit {self.BLOG_URL}. If the problem persists" + f" please report it to {self.ISSUES_URL} as an `integration` issue." ) from e supported_fields = ["prompt", "response"] if supported_fields != [field.name for field in self.dataset.fields]: raise ValueError( - f"`FeedbackDataset` with name={self.dataset_name} in the" - f" workspace={self.workspace_name} " - "had fields that are not supported yet for the `langchain` integration." - " Supported fields are: " - f"{supported_fields}, and the current `FeedbackDataset` fields are" - f" {[field.name for field in self.dataset.fields]}. " - "For more information on how to create a `langchain`-compatible" - " `FeedbackDataset` in Argilla, please visit" - " https://docs.argilla.io/en/latest/guides/llms/practical_guides/use_argilla_callback_in_langchain.html." # noqa: E501 + f"`FeedbackDataset` with name={self.dataset_name} in the workspace=" + f"{self.workspace_name} had fields that are not supported yet for the" + f"`langchain` integration. Supported fields are: {supported_fields}," + f" and the current `FeedbackDataset` fields are {[field.name for field in self.dataset.fields]}." # noqa: E501 + " For more information on how to create a `langchain`-compatible" + f" `FeedbackDataset` in Argilla, please visit {self.BLOG_URL}." ) self.prompts: Dict[str, List[str]] = {} warnings.warn( ( - "The `ArgillaCallbackHandler` is currently in beta and is subject to " - "change based on updates to `langchain`. Please report any issues to " - "https://github.com/argilla-io/argilla/issues with the tag `langchain`." + "The `ArgillaCallbackHandler` is currently in beta and is subject to" + " change based on updates to `langchain`. Please report any issues to" + f" {self.ISSUES_URL} as an `integration` issue." ), ) @@ -205,12 +220,13 @@ class ArgillaCallbackHandler(BaseCallbackHandler): ] ) - # Push the records to Argilla - self.dataset.push_to_argilla() - # Pop current run from `self.runs` self.prompts.pop(str(kwargs["run_id"])) + if parse(self.ARGILLA_VERSION) < parse("1.14.0"): + # Push the records to Argilla + self.dataset.push_to_argilla() + def on_llm_error( self, error: Union[Exception, KeyboardInterrupt], **kwargs: Any ) -> None: @@ -278,15 +294,16 @@ class ArgillaCallbackHandler(BaseCallbackHandler): ] ) - # Push the records to Argilla - self.dataset.push_to_argilla() - # Pop current run from `self.runs` if str(kwargs["parent_run_id"]) in self.prompts: self.prompts.pop(str(kwargs["parent_run_id"])) if str(kwargs["run_id"]) in self.prompts: self.prompts.pop(str(kwargs["run_id"])) + if parse(self.ARGILLA_VERSION) < parse("1.14.0"): + # Push the records to Argilla + self.dataset.push_to_argilla() + def on_chain_error( self, error: Union[Exception, KeyboardInterrupt], **kwargs: Any ) -> None: From 641cb80c9d7eb733da488a9faef32077e5196fc3 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 11:10:06 -0700 Subject: [PATCH 017/175] update pr temp (#9062) --- .github/PULL_REQUEST_TEMPLATE.md | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 37a45f6e1..1033af0df 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,28 +1,20 @@ From 2431eca70080dd6013c8d684fc443a0405d7085b Mon Sep 17 00:00:00 2001 From: TRY-ER <75255871+TRY-ER@users.noreply.github.com> Date: Thu, 10 Aug 2023 23:43:12 +0530 Subject: [PATCH 018/175] Agent vector store tool doc (#9029) I was initially confused weather to use create_vectorstore_agent or create_vectorstore_router_agent due to lack of documentation so I created a simple documentation for each of the function about their different usecase. Replace this comment with: - Description: Added the doc_strings in create_vectorstore_agent and create_vectorstore_router_agent to point out the difference in their usecase - Tag maintainer: @rlancemartin, @eyurtsev --------- Co-authored-by: Bagatur --- .../agents/agent_toolkits/vectorstore/base.py | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/libs/langchain/langchain/agents/agent_toolkits/vectorstore/base.py b/libs/langchain/langchain/agents/agent_toolkits/vectorstore/base.py index 5ae994a9f..82b8c90b9 100644 --- a/libs/langchain/langchain/agents/agent_toolkits/vectorstore/base.py +++ b/libs/langchain/langchain/agents/agent_toolkits/vectorstore/base.py @@ -22,7 +22,20 @@ def create_vectorstore_agent( agent_executor_kwargs: Optional[Dict[str, Any]] = None, **kwargs: Dict[str, Any], ) -> AgentExecutor: - """Construct a VectorStore agent from an LLM and tools.""" + """Construct a VectorStore agent from an LLM and tools. + + Args: + llm (BaseLanguageModel): LLM that will be used by the agent + toolkit (VectorStoreToolkit): Set of tools for the agent + callback_manager (Optional[BaseCallbackManager], optional): Object to handle the callback [ Defaults to None. ] + prefix (str, optional): The prefix prompt for the agent. If not provided uses default PREFIX. + verbose (bool, optional): If you want to see the content of the scratchpad. [ Defaults to False ] + agent_executor_kwargs (Optional[Dict[str, Any]], optional): If there is any other parameter you want to send to the agent. [ Defaults to None ] + **kwargs: Additional named parameters to pass to the ZeroShotAgent. + + Returns: + AgentExecutor: Returns a callable AgentExecutor object. Either you can call it or use run method with the query to get the response + """ # noqa: E501 tools = toolkit.get_tools() prompt = ZeroShotAgent.create_prompt(tools, prefix=prefix) llm_chain = LLMChain( @@ -50,7 +63,20 @@ def create_vectorstore_router_agent( agent_executor_kwargs: Optional[Dict[str, Any]] = None, **kwargs: Dict[str, Any], ) -> AgentExecutor: - """Construct a VectorStore router agent from an LLM and tools.""" + """Construct a VectorStore router agent from an LLM and tools. + + Args: + llm (BaseLanguageModel): LLM that will be used by the agent + toolkit (VectorStoreRouterToolkit): Set of tools for the agent which have routing capability with multiple vector stores + callback_manager (Optional[BaseCallbackManager], optional): Object to handle the callback [ Defaults to None. ] + prefix (str, optional): The prefix prompt for the router agent. If not provided uses default ROUTER_PREFIX. + verbose (bool, optional): If you want to see the content of the scratchpad. [ Defaults to False ] + agent_executor_kwargs (Optional[Dict[str, Any]], optional): If there is any other parameter you want to send to the agent. [ Defaults to None ] + **kwargs: Additional named parameters to pass to the ZeroShotAgent. + + Returns: + AgentExecutor: Returns a callable AgentExecutor object. Either you can call it or use run method with the query to get the response. + """ # noqa: E501 tools = toolkit.get_tools() prompt = ZeroShotAgent.create_prompt(tools, prefix=prefix) llm_chain = LLMChain( From f3f5853e9fd5aed16886c9038e4d341ef09d2b3e Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 11:28:24 -0700 Subject: [PATCH 019/175] update api ref exampels (#9065) manually update for now --- docs/api_reference/guide_imports.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api_reference/guide_imports.json b/docs/api_reference/guide_imports.json index 9efc571c7..5afcfd1fd 100644 --- a/docs/api_reference/guide_imports.json +++ b/docs/api_reference/guide_imports.json @@ -1 +1 @@ -{"XinferenceEmbeddings": {"Xorbits inference (Xinference)": "https://python.langchain.com/docs/integrations/text_embedding/xinference"}, "DeepInfraEmbeddings": {"DeepInfra": "https://python.langchain.com/docs/integrations/text_embedding/deepinfra"}, "HuggingFaceEmbeddings": {"Hugging Face Hub": "https://python.langchain.com/docs/integrations/text_embedding/huggingfacehub", "Sentence Transformers Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/sentence_transformers", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever", "Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy", "Pairwise Embedding Distance ": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_embedding_distance", "Embedding Distance": "https://python.langchain.com/docs/guides/evaluation/string/embedding_distance", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder"}, "GPT4AllEmbeddings": {"GPT4All": "https://python.langchain.com/docs/integrations/text_embedding/gpt4all", "Running LLMs locally": "https://python.langchain.com/docs/use_cases/question_answering/local_retrieval_qa", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "MosaicMLInstructorEmbeddings": {"MosaicML embeddings": "https://python.langchain.com/docs/integrations/text_embedding/mosaicml"}, "OpenAIEmbeddings": {"OpenAI": "https://python.langchain.com/docs/integrations/providers/openai", "AzureOpenAI": "https://python.langchain.com/docs/integrations/text_embedding/azureopenai", "Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "kNN": "https://python.langchain.com/docs/integrations/retrievers/knn", "DocArray Retriever": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever", "SVM": "https://python.langchain.com/docs/integrations/retrievers/svm", "Pinecone Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/pinecone_hybrid_search", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever", "Azure OpenAI": "https://python.langchain.com/docs/integrations/providers/azure_openai", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate", "Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake", "Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis", "PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn", "DocArrayHnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale", "ClickHouse Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse", "Qdrant": "https://python.langchain.com/docs/integrations/vectorstores/qdrant", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch", "Pinecone": "https://python.langchain.com/docs/integrations/vectorstores/pinecone", "Azure Cognitive Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch", "Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra", "Milvus": "https://python.langchain.com/docs/integrations/vectorstores/milvus", "ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch", "DocArrayInMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory", "pg_embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding", "FAISS": "https://python.langchain.com/docs/integrations/vectorstores/faiss", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/vectorstores/mongodb_atlas", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching", "Data Augmented Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/data_augmented_question_answering", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Context aware text splitting and QA / Chat": "https://python.langchain.com/docs/use_cases/question_answering/document-context-aware-QA", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Question answering over a group chat messages using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/semantic-search-over-chat", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Generative Agents in LangChain": "https://python.langchain.com/docs/use_cases/agent_simulations/characters", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval", "Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr", "Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat", "Loading from LangChainHub": "https://python.langchain.com/docs/modules/chains/how_to/from_hub", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa", "Vector store-augmented text generation": "https://python.langchain.com/docs/modules/chains/additional/vector_db_text_generation", "FLARE": "https://python.langchain.com/docs/modules/chains/additional/flare", "Hypothetical Document Embeddings": "https://python.langchain.com/docs/modules/chains/additional/hyde"}, "VertexAIEmbeddings": {"Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/text_embedding/google_vertex_ai_palm"}, "BedrockEmbeddings": {"Bedrock Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/bedrock", "Bedrock": "https://python.langchain.com/docs/integrations/providers/bedrock"}, "LlamaCppEmbeddings": {"Llama-cpp": "https://python.langchain.com/docs/integrations/text_embedding/llamacpp", "Llama.cpp": "https://python.langchain.com/docs/integrations/providers/llamacpp"}, "NLPCloudEmbeddings": {"NLP Cloud": "https://python.langchain.com/docs/integrations/text_embedding/nlp_cloud"}, "SpacyEmbeddings": {"Spacy Embedding": "https://python.langchain.com/docs/integrations/text_embedding/spacy_embedding"}, "HuggingFaceInstructEmbeddings": {"InstructEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/instruct_embeddings"}, "CohereEmbeddings": {"Cohere": "https://python.langchain.com/docs/integrations/providers/cohere", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "SentenceTransformerEmbeddings": {"Sentence Transformers Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/sentence_transformers", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma"}, "ClarifaiEmbeddings": {"Clarifai": "https://python.langchain.com/docs/integrations/providers/clarifai"}, "AwaEmbeddings": {"AwaEmbedding": "https://python.langchain.com/docs/integrations/text_embedding/Awa"}, "MiniMaxEmbeddings": {"MiniMax": "https://python.langchain.com/docs/integrations/text_embedding/minimax", "Minimax": "https://python.langchain.com/docs/integrations/providers/minimax"}, "FakeEmbeddings": {"Fake Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/fake", "DocArray Retriever": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair"}, "ElasticsearchEmbeddings": {"Elasticsearch": "https://python.langchain.com/docs/integrations/text_embedding/elasticsearch", "ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch"}, "SelfHostedEmbeddings": {"Self Hosted Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted"}, "SelfHostedHuggingFaceEmbeddings": {"Self Hosted Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted"}, "SelfHostedHuggingFaceInstructEmbeddings": {"Self Hosted Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted"}, "EmbaasEmbeddings": {"Embaas": "https://python.langchain.com/docs/integrations/text_embedding/embaas"}, "JinaEmbeddings": {"Jina": "https://python.langchain.com/docs/integrations/providers/jina"}, "AlephAlphaAsymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/providers/aleph_alpha"}, "AlephAlphaSymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/providers/aleph_alpha"}, "DashScopeEmbeddings": {"DashScope": "https://python.langchain.com/docs/integrations/text_embedding/dashscope"}, "TensorflowHubEmbeddings": {"TensorflowHub": "https://python.langchain.com/docs/integrations/text_embedding/tensorflowhub"}, "ModelScopeEmbeddings": {"ModelScope": "https://python.langchain.com/docs/integrations/providers/modelscope"}, "SagemakerEndpointEmbeddings": {"SageMaker Endpoint Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/sagemaker-endpoint", "SageMaker Endpoint": "https://python.langchain.com/docs/integrations/providers/sagemaker_endpoint"}, "EmbeddingsContentHandler": {"SageMaker Endpoint Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/sagemaker-endpoint"}, "LocalAIEmbeddings": {"LocalAI": "https://python.langchain.com/docs/integrations/text_embedding/localai"}, "ElasticSearchBM25Retriever": {"ElasticSearch BM25": "https://python.langchain.com/docs/integrations/retrievers/elastic_search_bm25", "Elasticsearch": "https://python.langchain.com/docs/integrations/providers/elasticsearch"}, "ZepChatMessageHistory": {"Zep": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore"}, "HumanMessage": {"Zep": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory", "Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Azure": "https://python.langchain.com/docs/integrations/chat/azure_chat_openai", "PromptLayer ChatOpenAI": "https://python.langchain.com/docs/integrations/chat/promptlayer_chatopenai", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Multi-Agent Simulated Environment: Petting Zoo": "https://python.langchain.com/docs/use_cases/agent_simulations/petting_zoo", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Two-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/two_player_dnd", "Multi-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/multi_player_dnd", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Custom callback handlers": "https://python.langchain.com/docs/modules/callbacks/custom_callbacks", "Async callbacks": "https://python.langchain.com/docs/modules/callbacks/async_callbacks", "Tools as OpenAI Functions": "https://python.langchain.com/docs/modules/agents/tools/tools_as_openai_functions", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/popular/openai_functions", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa"}, "AIMessage": {"Zep": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory", "Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Multi-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/multi_player_dnd", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining"}, "ZepRetriever": {"Zep": "https://python.langchain.com/docs/integrations/providers/zep", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory"}, "VespaRetriever": {"Vespa": "https://python.langchain.com/docs/integrations/providers/vespa"}, "AmazonKendraRetriever": {"Amazon Kendra": "https://python.langchain.com/docs/integrations/retrievers/amazon_kendra_retriever"}, "RecursiveCharacterTextSplitter": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Context aware text splitting and QA / Chat": "https://python.langchain.com/docs/use_cases/question_answering/document-context-aware-QA", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Running LLMs locally": "https://python.langchain.com/docs/use_cases/question_answering/local_retrieval_qa", "Question answering over a group chat messages using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/semantic-search-over-chat", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "MarkdownHeaderTextSplitter": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/markdown_header_metadata"}, "TextLoader": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate", "Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara", "Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis", "PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "Clarifai": "https://python.langchain.com/docs/integrations/vectorstores/clarifai", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn", "DocArrayHnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale", "ClickHouse Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse", "Qdrant": "https://python.langchain.com/docs/integrations/vectorstores/qdrant", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris", "AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch", "Pinecone": "https://python.langchain.com/docs/integrations/vectorstores/pinecone", "Azure Cognitive Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch", "Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra", "Milvus": "https://python.langchain.com/docs/integrations/vectorstores/milvus", "ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo", "DocArrayInMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory", "pg_embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding", "FAISS": "https://python.langchain.com/docs/integrations/vectorstores/faiss", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/vectorstores/mongodb_atlas", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch", "Question Answering Benchmarking: State of the Union Address": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_sota", "QA Generation": "https://python.langchain.com/docs/guides/evaluation/examples/qa_generation", "Question Answering Benchmarking: Paul Graham Essay": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_pg", "Data Augmented Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/data_augmented_question_answering", "Agent VectorDB Question Answering Benchmarking": "https://python.langchain.com/docs/guides/evaluation/examples/agent_vectordb_sota_pg", "Question answering over a group chat messages using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/semantic-search-over-chat", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Graph QA": "https://python.langchain.com/docs/modules/chains/additional/graph_qa", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Loading from LangChainHub": "https://python.langchain.com/docs/modules/chains/how_to/from_hub", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa"}, "FAISS": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "FAISS": "https://python.langchain.com/docs/integrations/vectorstores/faiss", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Generative Agents in LangChain": "https://python.langchain.com/docs/use_cases/agent_simulations/characters", "Ensemble Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/ensemble", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval", "Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr"}, "OpenAI": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Google Serper API": "https://python.langchain.com/docs/integrations/tools/google_serper", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "OpenWeatherMap API": "https://python.langchain.com/docs/integrations/tools/openweathermap", "Search Tools": "https://python.langchain.com/docs/integrations/tools/search_tools", "Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "Gradio Tools": "https://python.langchain.com/docs/integrations/tools/gradio_tools", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain", "Entity Memory with SQLite storage": "https://python.langchain.com/docs/integrations/memory/entity_memory_with_sqlite", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/agent_with_wandb_tracing", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "OpenAI": "https://python.langchain.com/docs/integrations/llms/openai", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "Helicone": "https://python.langchain.com/docs/integrations/providers/helicone", "Shale Protocol": "https://python.langchain.com/docs/integrations/providers/shaleprotocol", "WhyLabs": "https://python.langchain.com/docs/integrations/providers/whylabs_profiling", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking", "Ray Serve": "https://python.langchain.com/docs/integrations/providers/ray_serve", "Log, Trace, and Monitor Langchain LLM Calls": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation", "CSV Agent": "https://python.langchain.com/docs/integrations/toolkits/csv", "Xorbits Agent": "https://python.langchain.com/docs/integrations/toolkits/xorbits", "Jira": "https://python.langchain.com/docs/integrations/toolkits/jira", "Spark Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/spark", "Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "Pandas Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/pandas", "OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching", "Question Answering Benchmarking: State of the Union Address": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_sota", "Question Answering Benchmarking: Paul Graham Essay": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_pg", "Evaluating an OpenAPI Chain": "https://python.langchain.com/docs/guides/evaluation/examples/openapi_eval", "Data Augmented Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/data_augmented_question_answering", "Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/question_answering", "Agent VectorDB Question Answering Benchmarking": "https://python.langchain.com/docs/guides/evaluation/examples/agent_vectordb_sota_pg", "HTTP request chain": "https://python.langchain.com/docs/modules/chains/additional/llm_requests", "OpenAPI chain": "https://python.langchain.com/docs/modules/chains/additional/openapi", "HuggingGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/hugginggpt", "Context aware text splitting and QA / Chat": "https://python.langchain.com/docs/use_cases/question_answering/document-context-aware-QA", "Question answering over a group chat messages using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/semantic-search-over-chat", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Graph QA": "https://python.langchain.com/docs/modules/chains/additional/graph_qa", "Tree of Thought (ToT) example": "https://python.langchain.com/docs/use_cases/graph/tot", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Bash chain": "https://python.langchain.com/docs/modules/chains/additional/llm_bash", "LLM Symbolic Math ": "https://python.langchain.com/docs/modules/chains/additional/llm_symbolic_math", "Summarization checker chain": "https://python.langchain.com/docs/modules/chains/additional/llm_summarization_checker", "Self-checking chain": "https://python.langchain.com/docs/modules/chains/additional/llm_checker", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Conversation Knowledge Graph Memory": "https://python.langchain.com/docs/modules/memory/types/kg", "ConversationTokenBufferMemory": "https://python.langchain.com/docs/modules/memory/types/token_buffer", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory", "How to customize conversational memory": "https://python.langchain.com/docs/modules/memory/conversational_customization", "ConversationSummaryBufferMemory": "https://python.langchain.com/docs/modules/memory/types/summary_buffer", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Token counting": "https://python.langchain.com/docs/modules/callbacks/token_counting", "Logging to file": "https://python.langchain.com/docs/modules/callbacks/filecallbackhandler", "Multi-Input Tools": "https://python.langchain.com/docs/modules/agents/tools/multi_input_tool", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Tool Input Schema": "https://python.langchain.com/docs/modules/agents/tools/tool_input_validation", "Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Access intermediate steps": "https://python.langchain.com/docs/modules/agents/how_to/intermediate_steps", "Timeouts for agents": "https://python.langchain.com/docs/modules/agents/how_to/max_time_limit", "Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only", "Cap the max number of iterations": "https://python.langchain.com/docs/modules/agents/how_to/max_iterations", "Async API": "https://python.langchain.com/docs/modules/chains/how_to/async_chain", "Tracking token usage": "https://python.langchain.com/docs/modules/model_io/models/llms/token_usage_tracking", "Serialization": "https://python.langchain.com/docs/modules/model_io/models/llms/llm_serialization", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Datetime parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/datetime", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router", "Transformation": "https://python.langchain.com/docs/modules/chains/foundational/transformation", "Vector store-augmented text generation": "https://python.langchain.com/docs/modules/chains/additional/vector_db_text_generation", "FLARE": "https://python.langchain.com/docs/modules/chains/additional/flare", "Hypothetical Document Embeddings": "https://python.langchain.com/docs/modules/chains/additional/hyde"}, "ContextualCompressionRetriever": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever"}, "CohereRerank": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere"}, "RetrievalQA": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Question Answering Benchmarking: State of the Union Address": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_sota", "Question Answering Benchmarking: Paul Graham Essay": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_pg", "Data Augmented Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/data_augmented_question_answering", "Agent VectorDB Question Answering Benchmarking": "https://python.langchain.com/docs/guides/evaluation/examples/agent_vectordb_sota_pg", "Context aware text splitting and QA / Chat": "https://python.langchain.com/docs/use_cases/question_answering/document-context-aware-QA", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Running LLMs locally": "https://python.langchain.com/docs/use_cases/question_answering/local_retrieval_qa", "Question answering over a group chat messages using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/semantic-search-over-chat", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa"}, "KNNRetriever": {"kNN": "https://python.langchain.com/docs/integrations/retrievers/knn"}, "WikipediaRetriever": {"Wikipedia": "https://python.langchain.com/docs/integrations/providers/wikipedia"}, "ChatOpenAI": {"Wikipedia": "https://python.langchain.com/docs/integrations/retrievers/wikipedia", "Arxiv": "https://python.langchain.com/docs/integrations/retrievers/arxiv", "ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "ArXiv API Tool": "https://python.langchain.com/docs/integrations/tools/arxiv", "Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "Shell Tool": "https://python.langchain.com/docs/integrations/tools/bash", "Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer", "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking", "CSV Agent": "https://python.langchain.com/docs/integrations/toolkits/csv", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python", "PowerBI Dataset Agent": "https://python.langchain.com/docs/integrations/toolkits/powerbi", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "Spark SQL Agent": "https://python.langchain.com/docs/integrations/toolkits/spark_sql", "Pandas Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/pandas", "Multion Toolkit": "https://python.langchain.com/docs/integrations/toolkits/multion", "OpenAI Functions Metadata Tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Debugging": "https://python.langchain.com/docs/guides/debugging", "LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough", "QA Generation": "https://python.langchain.com/docs/guides/evaluation/examples/qa_generation", "Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "Custom Trajectory Evaluator": "https://python.langchain.com/docs/guides/evaluation/trajectory/custom", "QA Correctness": "https://python.langchain.com/docs/guides/evaluation/string/qa", "Tagging": "https://python.langchain.com/docs/modules/chains/additional/tagging", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Context aware text splitting and QA / Chat": "https://python.langchain.com/docs/use_cases/question_answering/document-context-aware-QA", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Question answering over a group chat messages using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/semantic-search-over-chat", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Cite sources": "https://python.langchain.com/docs/use_cases/question_answering/how_to/qa_citations", "Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Elasticsearch database": "https://python.langchain.com/docs/modules/chains/additional/elasticsearch_database", "SQL Query": "https://python.langchain.com/docs/use_cases/tabular/sql_query", "Neptune Open Cypher QA Chain": "https://python.langchain.com/docs/modules/chains/additional/neptune_cypher_qa", "NebulaGraphQAChain": "https://python.langchain.com/docs/modules/chains/additional/graph_nebula_qa", "KuzuQAChain": "https://python.langchain.com/docs/modules/chains/additional/graph_kuzu_qa", "HugeGraph QA Chain": "https://python.langchain.com/docs/modules/chains/additional/graph_hugegraph_qa", "GraphSparqlQAChain": "https://python.langchain.com/docs/modules/chains/additional/graph_sparql_qa", "ArangoDB QA chain": "https://python.langchain.com/docs/modules/chains/additional/graph_arangodb_qa", "Graph DB QA chain": "https://python.langchain.com/docs/modules/chains/additional/graph_cypher_qa", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Extraction with OpenAI Functions": "https://python.langchain.com/docs/use_cases/extraction/openai_extraction", "Multi-Agent Simulated Environment: Petting Zoo": "https://python.langchain.com/docs/use_cases/agent_simulations/petting_zoo", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Generative Agents in LangChain": "https://python.langchain.com/docs/use_cases/agent_simulations/characters", "Two-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/two_player_dnd", "Multi-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/multi_player_dnd", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Custom callback handlers": "https://python.langchain.com/docs/modules/callbacks/custom_callbacks", "Async callbacks": "https://python.langchain.com/docs/modules/callbacks/async_callbacks", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Tools as OpenAI Functions": "https://python.langchain.com/docs/modules/agents/tools/tools_as_openai_functions", "OpenAI Multi Functions Agent": "https://python.langchain.com/docs/modules/agents/agent_types/openai_multi_functions_agent", "Handle parsing errors": "https://python.langchain.com/docs/modules/agents/how_to/handle_parsing_errors", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions", "Custom functions with OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/custom-functions-with-openai-functions-agent", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Connecting to a Feature Store": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store", "Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain", "Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/popular/openai_functions", "Extraction": "https://python.langchain.com/docs/modules/chains/additional/extraction", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa", "Question-Answering Citations": "https://python.langchain.com/docs/modules/chains/additional/qa_citations", "FLARE": "https://python.langchain.com/docs/modules/chains/additional/flare"}, "ConversationalRetrievalChain": {"Wikipedia": "https://python.langchain.com/docs/integrations/retrievers/wikipedia", "Arxiv": "https://python.langchain.com/docs/integrations/retrievers/arxiv", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Question answering over a group chat messages using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/semantic-search-over-chat", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa"}, "MetalRetriever": {"Metal": "https://python.langchain.com/docs/integrations/providers/metal"}, "CSVLoader": {"ChatGPT Plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin", "CSV": "https://python.langchain.com/docs/integrations/document_loaders/csv"}, "Document": {"ChatGPT Plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin", "Weaviate Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/weaviate-hybrid", "BM25": "https://python.langchain.com/docs/integrations/retrievers/bm25", "TF-IDF": "https://python.langchain.com/docs/integrations/retrievers/tf_idf", "Apify": "https://python.langchain.com/docs/integrations/tools/apify", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation", "PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy", "pg_embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding", "FAISS": "https://python.langchain.com/docs/integrations/vectorstores/faiss", "OpenAI Functions Metadata Tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger", "Doctran Extract Properties": "https://python.langchain.com/docs/integrations/document_transformers/doctran_extract_properties", "Doctran Interrogate Documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_interrogate_document", "Doctran Translate Documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_translate_document", "Copy Paste": "https://python.langchain.com/docs/integrations/document_loaders/copypaste", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval", "Vector store-augmented text generation": "https://python.langchain.com/docs/modules/chains/additional/vector_db_text_generation", "FLARE": "https://python.langchain.com/docs/modules/chains/additional/flare"}, "ChatGPTPluginRetriever": {"ChatGPT Plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai"}, "GoogleCloudEnterpriseSearchRetriever": {"Google Cloud Enterprise Search": "https://python.langchain.com/docs/integrations/retrievers/google_cloud_enterprise_search"}, "DocArrayRetriever": {"DocArray Retriever": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever"}, "SVMRetriever": {"SVM": "https://python.langchain.com/docs/integrations/retrievers/svm", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index"}, "PineconeHybridSearchRetriever": {"Pinecone Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/pinecone_hybrid_search"}, "PubMedRetriever": {"PubMed": "https://python.langchain.com/docs/integrations/retrievers/pubmed"}, "WeaviateHybridSearchRetriever": {"Weaviate Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/weaviate-hybrid"}, "ArxivRetriever": {"Arxiv": "https://python.langchain.com/docs/integrations/providers/arxiv"}, "BM25Retriever": {"BM25": "https://python.langchain.com/docs/integrations/retrievers/bm25", "Ensemble Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/ensemble"}, "AzureCognitiveSearchRetriever": {"Azure Cognitive Search": "https://python.langchain.com/docs/integrations/providers/azure_cognitive_search_"}, "ChaindeskRetriever": {"Chaindesk": "https://python.langchain.com/docs/integrations/providers/chaindesk"}, "MergerRetriever": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever"}, "Chroma": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma", "Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Data Augmented Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/data_augmented_question_answering", "Context aware text splitting and QA / Chat": "https://python.langchain.com/docs/use_cases/question_answering/document-context-aware-QA", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Running LLMs locally": "https://python.langchain.com/docs/use_cases/question_answering/local_retrieval_qa", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router", "Loading from LangChainHub": "https://python.langchain.com/docs/modules/chains/how_to/from_hub", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa", "Vector store-augmented text generation": "https://python.langchain.com/docs/modules/chains/additional/vector_db_text_generation", "Hypothetical Document Embeddings": "https://python.langchain.com/docs/modules/chains/additional/hyde"}, "EmbeddingsRedundantFilter": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever"}, "EmbeddingsClusteringFilter": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever"}, "DocumentCompressorPipeline": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever"}, "LongContextReorder": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder"}, "TFIDFRetriever": {"TF-IDF": "https://python.langchain.com/docs/integrations/retrievers/tf_idf"}, "load_tools": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "AWS Lambda API": "https://python.langchain.com/docs/integrations/tools/awslambda", "Requests": "https://python.langchain.com/docs/integrations/tools/requests", "OpenWeatherMap API": "https://python.langchain.com/docs/integrations/tools/openweathermap", "Search Tools": "https://python.langchain.com/docs/integrations/tools/search_tools", "ArXiv API Tool": "https://python.langchain.com/docs/integrations/tools/arxiv", "GraphQL tool": "https://python.langchain.com/docs/integrations/tools/graphql", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit", "SerpAPI": "https://python.langchain.com/docs/integrations/providers/serpapi", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/agent_with_wandb_tracing", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Golden": "https://python.langchain.com/docs/integrations/providers/golden", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "Wolfram Alpha": "https://python.langchain.com/docs/integrations/providers/wolfram_alpha", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "DataForSEO": "https://python.langchain.com/docs/integrations/providers/dataforseo", "SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/providers/openweathermap", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking", "Google Search": "https://python.langchain.com/docs/integrations/providers/google_search", "Log, Trace, and Monitor Langchain LLM Calls": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway_example", "Debugging": "https://python.langchain.com/docs/guides/debugging", "LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval", "Access intermediate steps": "https://python.langchain.com/docs/modules/agents/how_to/intermediate_steps", "Timeouts for agents": "https://python.langchain.com/docs/modules/agents/how_to/max_time_limit", "Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only", "Cap the max number of iterations": "https://python.langchain.com/docs/modules/agents/how_to/max_iterations", "Async API": "https://python.langchain.com/docs/modules/agents/how_to/async_agent", "Human input Chat Model": "https://python.langchain.com/docs/modules/model_io/models/chat/human_input_chat_model", "Fake LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/fake_llm", "Tracking token usage": "https://python.langchain.com/docs/modules/model_io/models/llms/token_usage_tracking", "Human input LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/human_input_llm"}, "initialize_agent": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins", "Google Serper API": "https://python.langchain.com/docs/integrations/tools/google_serper", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "OpenWeatherMap API": "https://python.langchain.com/docs/integrations/tools/openweathermap", "Search Tools": "https://python.langchain.com/docs/integrations/tools/search_tools", "Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "ArXiv API Tool": "https://python.langchain.com/docs/integrations/tools/arxiv", "Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "GraphQL tool": "https://python.langchain.com/docs/integrations/tools/graphql", "Gradio Tools": "https://python.langchain.com/docs/integrations/tools/gradio_tools", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain", "Shell Tool": "https://python.langchain.com/docs/integrations/tools/bash", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory", "Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/agent_with_wandb_tracing", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking", "Log, Trace, and Monitor Langchain LLM Calls": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index", "Jira": "https://python.langchain.com/docs/integrations/toolkits/jira", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/toolkits/azure_cognitive_services", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Gmail Toolkit": "https://python.langchain.com/docs/integrations/toolkits/gmail", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/toolkits/office365", "Amadeus Toolkit": "https://python.langchain.com/docs/integrations/toolkits/amadeus", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway_example", "Debugging": "https://python.langchain.com/docs/guides/debugging", "LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough", "Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "Agent VectorDB Question Answering Benchmarking": "https://python.langchain.com/docs/guides/evaluation/examples/agent_vectordb_sota_pg", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "Multi-modal outputs: Image & Text": "https://python.langchain.com/docs/use_cases/multi_modal/image_agent", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Multi-Input Tools": "https://python.langchain.com/docs/modules/agents/tools/multi_input_tool", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Tool Input Schema": "https://python.langchain.com/docs/modules/agents/tools/tool_input_validation", "Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval", "Self ask with search": "https://python.langchain.com/docs/modules/agents/agent_types/self_ask_with_search", "ReAct document store": "https://python.langchain.com/docs/modules/agents/agent_types/react_docstore", "OpenAI Multi Functions Agent": "https://python.langchain.com/docs/modules/agents/agent_types/openai_multi_functions_agent", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Access intermediate steps": "https://python.langchain.com/docs/modules/agents/how_to/intermediate_steps", "Handle parsing errors": "https://python.langchain.com/docs/modules/agents/how_to/handle_parsing_errors", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Timeouts for agents": "https://python.langchain.com/docs/modules/agents/how_to/max_time_limit", "Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions", "Cap the max number of iterations": "https://python.langchain.com/docs/modules/agents/how_to/max_iterations", "Custom functions with OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/custom-functions-with-openai-functions-agent", "Async API": "https://python.langchain.com/docs/modules/agents/how_to/async_agent", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions", "Human input Chat Model": "https://python.langchain.com/docs/modules/model_io/models/chat/human_input_chat_model", "Fake LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/fake_llm", "Tracking token usage": "https://python.langchain.com/docs/modules/model_io/models/llms/token_usage_tracking", "Human input LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/human_input_llm"}, "AgentType": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins", "Google Serper API": "https://python.langchain.com/docs/integrations/tools/google_serper", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "AWS Lambda API": "https://python.langchain.com/docs/integrations/tools/awslambda", "OpenWeatherMap API": "https://python.langchain.com/docs/integrations/tools/openweathermap", "Search Tools": "https://python.langchain.com/docs/integrations/tools/search_tools", "Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "ArXiv API Tool": "https://python.langchain.com/docs/integrations/tools/arxiv", "Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "GraphQL tool": "https://python.langchain.com/docs/integrations/tools/graphql", "Shell Tool": "https://python.langchain.com/docs/integrations/tools/bash", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory", "Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/agent_with_wandb_tracing", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking", "Log, Trace, and Monitor Langchain LLM Calls": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index", "CSV Agent": "https://python.langchain.com/docs/integrations/toolkits/csv", "Jira": "https://python.langchain.com/docs/integrations/toolkits/jira", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python", "Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/toolkits/azure_cognitive_services", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Gmail Toolkit": "https://python.langchain.com/docs/integrations/toolkits/gmail", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/toolkits/office365", "Pandas Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/pandas", "Multion Toolkit": "https://python.langchain.com/docs/integrations/toolkits/multion", "Amadeus Toolkit": "https://python.langchain.com/docs/integrations/toolkits/amadeus", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway_example", "Debugging": "https://python.langchain.com/docs/guides/debugging", "LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough", "Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "Agent VectorDB Question Answering Benchmarking": "https://python.langchain.com/docs/guides/evaluation/examples/agent_vectordb_sota_pg", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "Multi-modal outputs: Image & Text": "https://python.langchain.com/docs/use_cases/multi_modal/image_agent", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Multi-Input Tools": "https://python.langchain.com/docs/modules/agents/tools/multi_input_tool", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Tool Input Schema": "https://python.langchain.com/docs/modules/agents/tools/tool_input_validation", "Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval", "Self ask with search": "https://python.langchain.com/docs/modules/agents/agent_types/self_ask_with_search", "ReAct document store": "https://python.langchain.com/docs/modules/agents/agent_types/react_docstore", "OpenAI Multi Functions Agent": "https://python.langchain.com/docs/modules/agents/agent_types/openai_multi_functions_agent", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Access intermediate steps": "https://python.langchain.com/docs/modules/agents/how_to/intermediate_steps", "Handle parsing errors": "https://python.langchain.com/docs/modules/agents/how_to/handle_parsing_errors", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Timeouts for agents": "https://python.langchain.com/docs/modules/agents/how_to/max_time_limit", "Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions", "Cap the max number of iterations": "https://python.langchain.com/docs/modules/agents/how_to/max_iterations", "Custom functions with OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/custom-functions-with-openai-functions-agent", "Async API": "https://python.langchain.com/docs/modules/agents/how_to/async_agent", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions", "Human input Chat Model": "https://python.langchain.com/docs/modules/model_io/models/chat/human_input_chat_model", "Fake LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/fake_llm", "Tracking token usage": "https://python.langchain.com/docs/modules/model_io/models/llms/token_usage_tracking", "Human input LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/human_input_llm"}, "AIPluginTool": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins"}, "DataForSeoAPIWrapper": {"DataForSeo API Wrapper": "https://python.langchain.com/docs/integrations/tools/dataforseo", "DataForSEO": "https://python.langchain.com/docs/integrations/providers/dataforseo"}, "Tool": {"DataForSeo API Wrapper": "https://python.langchain.com/docs/integrations/tools/dataforseo", "Google Serper API": "https://python.langchain.com/docs/integrations/tools/google_serper", "SerpAPI": "https://python.langchain.com/docs/integrations/tools/serpapi", "Google Search": "https://python.langchain.com/docs/integrations/tools/google_search", "Python REPL": "https://python.langchain.com/docs/integrations/tools/foo_python", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory", "Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "Agent VectorDB Question Answering Benchmarking": "https://python.langchain.com/docs/guides/evaluation/examples/agent_vectordb_sota_pg", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db", "How to add Memory to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory", "Multi-Input Tools": "https://python.langchain.com/docs/modules/agents/tools/multi_input_tool", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Self ask with search": "https://python.langchain.com/docs/modules/agents/agent_types/self_ask_with_search", "ReAct document store": "https://python.langchain.com/docs/modules/agents/agent_types/react_docstore", "OpenAI Multi Functions Agent": "https://python.langchain.com/docs/modules/agents/agent_types/openai_multi_functions_agent", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Custom MRKL agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent", "Handle parsing errors": "https://python.langchain.com/docs/modules/agents/how_to/handle_parsing_errors", "Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools", "Custom multi-action agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_multi_action_agent", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Timeouts for agents": "https://python.langchain.com/docs/modules/agents/how_to/max_time_limit", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions", "Cap the max number of iterations": "https://python.langchain.com/docs/modules/agents/how_to/max_iterations", "Custom agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "SearxSearchWrapper": {"SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx"}, "GoogleSerperAPIWrapper": {"Google Serper API": "https://python.langchain.com/docs/integrations/tools/google_serper", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "FLARE": "https://python.langchain.com/docs/modules/chains/additional/flare"}, "GooglePlacesTool": {"Google Places": "https://python.langchain.com/docs/integrations/tools/google_places"}, "HumanInputRun": {"Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "TwilioAPIWrapper": {"Twilio": "https://python.langchain.com/docs/integrations/tools/twilio"}, "IFTTTWebhook": {"IFTTT WebHooks": "https://python.langchain.com/docs/integrations/tools/ifttt"}, "WikipediaQueryRun": {"Wikipedia": "https://python.langchain.com/docs/integrations/tools/wikipedia"}, "WikipediaAPIWrapper": {"Wikipedia": "https://python.langchain.com/docs/integrations/tools/wikipedia", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory"}, "TextRequestsWrapper": {"Requests": "https://python.langchain.com/docs/integrations/tools/requests", "JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json", "OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi", "Tool Input Schema": "https://python.langchain.com/docs/modules/agents/tools/tool_input_validation"}, "OpenWeatherMapAPIWrapper": {"OpenWeatherMap API": "https://python.langchain.com/docs/integrations/tools/openweathermap", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/providers/openweathermap"}, "PubmedQueryRun": {"PubMed Tool": "https://python.langchain.com/docs/integrations/tools/pubmed"}, "YouTubeSearchTool": {"YouTubeSearchTool": "https://python.langchain.com/docs/integrations/tools/youtube"}, "VectorstoreIndexCreator": {"Apify": "https://python.langchain.com/docs/integrations/tools/apify", "HuggingFace dataset": "https://python.langchain.com/docs/integrations/document_loaders/hugging_face_dataset", "Spreedly": "https://python.langchain.com/docs/integrations/document_loaders/spreedly", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset", "Iugu": "https://python.langchain.com/docs/integrations/document_loaders/iugu", "Stripe": "https://python.langchain.com/docs/integrations/document_loaders/stripe", "Modern Treasury": "https://python.langchain.com/docs/integrations/document_loaders/modern_treasury", "Question Answering Benchmarking: State of the Union Address": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_sota", "Question Answering Benchmarking: Paul Graham Essay": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_pg", "Agent VectorDB Question Answering Benchmarking": "https://python.langchain.com/docs/guides/evaluation/examples/agent_vectordb_sota_pg", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index"}, "ZapierToolkit": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier"}, "ZapierNLAWrapper": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier"}, "LLMChain": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase", "AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example", "Evaluating an OpenAPI Chain": "https://python.langchain.com/docs/guides/evaluation/examples/openapi_eval", "Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/question_answering", "Custom Trajectory Evaluator": "https://python.langchain.com/docs/guides/evaluation/trajectory/custom", "Custom Pairwise Evaluator": "https://python.langchain.com/docs/guides/evaluation/comparison/custom", "HTTP request chain": "https://python.langchain.com/docs/modules/chains/additional/llm_requests", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Logging to file": "https://python.langchain.com/docs/modules/callbacks/filecallbackhandler", "Datetime parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/datetime", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Connecting to a Feature Store": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router", "Transformation": "https://python.langchain.com/docs/modules/chains/foundational/transformation", "Async API": "https://python.langchain.com/docs/modules/chains/how_to/async_chain", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa", "Vector store-augmented text generation": "https://python.langchain.com/docs/modules/chains/additional/vector_db_text_generation", "Hypothetical Document Embeddings": "https://python.langchain.com/docs/modules/chains/additional/hyde"}, "TransformChain": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "Transformation": "https://python.langchain.com/docs/modules/chains/foundational/transformation"}, "SimpleSequentialChain": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "Baseten": "https://python.langchain.com/docs/integrations/llms/baseten", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate", "Transformation": "https://python.langchain.com/docs/modules/chains/foundational/transformation"}, "PromptTemplate": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase", "Evaluating an OpenAPI Chain": "https://python.langchain.com/docs/guides/evaluation/examples/openapi_eval", "Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/question_answering", "Pairwise String Comparison": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_string", "Criteria Evaluation": "https://python.langchain.com/docs/guides/evaluation/string/criteria_eval_chain", "HTTP request chain": "https://python.langchain.com/docs/modules/chains/additional/llm_requests", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Elasticsearch database": "https://python.langchain.com/docs/modules/chains/additional/elasticsearch_database", "Bash chain": "https://python.langchain.com/docs/modules/chains/additional/llm_bash", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder", "How to create a custom Memory class": "https://python.langchain.com/docs/modules/memory/custom_memory", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Conversation Knowledge Graph Memory": "https://python.langchain.com/docs/modules/memory/types/kg", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory", "How to customize conversational memory": "https://python.langchain.com/docs/modules/memory/conversational_customization", "Logging to file": "https://python.langchain.com/docs/modules/callbacks/filecallbackhandler", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Datetime parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/datetime", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic", "Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr", "Select by n-gram overlap": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/ngram_overlap", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Template Formats": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/formats", "Connecting to a Feature Store": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router", "Transformation": "https://python.langchain.com/docs/modules/chains/foundational/transformation", "Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain", "Async API": "https://python.langchain.com/docs/modules/chains/how_to/async_chain", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa", "Vector store-augmented text generation": "https://python.langchain.com/docs/modules/chains/additional/vector_db_text_generation", "Hypothetical Document Embeddings": "https://python.langchain.com/docs/modules/chains/additional/hyde"}, "ZapierNLARunAction": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier"}, "GoldenQueryAPIWrapper": {"Golden Query": "https://python.langchain.com/docs/integrations/tools/golden_query", "Golden": "https://python.langchain.com/docs/integrations/providers/golden"}, "ArxivAPIWrapper": {"ArXiv API Tool": "https://python.langchain.com/docs/integrations/tools/arxiv"}, "MetaphorSearchAPIWrapper": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search"}, "PlayWrightBrowserToolkit": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright"}, "create_async_playwright_browser": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright"}, "MetaphorSearchResults": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search"}, "SerpAPIWrapper": {"SerpAPI": "https://python.langchain.com/docs/integrations/providers/serpapi", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt"}, "GraphQLAPIWrapper": {"GraphQL tool": "https://python.langchain.com/docs/integrations/tools/graphql"}, "DuckDuckGoSearchRun": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "DuckDuckGoSearchResults": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg"}, "DuckDuckGoSearchAPIWrapper": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg"}, "ConversationBufferMemory": {"Gradio Tools": "https://python.langchain.com/docs/integrations/tools/gradio_tools", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain", "Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Bedrock": "https://python.langchain.com/docs/integrations/llms/bedrock", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory", "How to customize conversational memory": "https://python.langchain.com/docs/modules/memory/conversational_customization", "How to add Memory to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory", "Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa"}, "SceneXplainTool": {"SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain"}, "WolframAlphaAPIWrapper": {"Wolfram Alpha": "https://python.langchain.com/docs/integrations/providers/wolfram_alpha"}, "load_huggingface_tool": {"Requires transformers>=4.29.0 and huggingface_hub>=0.14.1": "https://python.langchain.com/docs/integrations/tools/huggingface_tools"}, "GoogleSearchAPIWrapper": {"Google Search": "https://python.langchain.com/docs/integrations/providers/google_search", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db", "How to add Memory to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory", "Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools"}, "BingSearchAPIWrapper": {"Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search"}, "PythonREPL": {"Python REPL": "https://python.langchain.com/docs/integrations/tools/foo_python", "Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python"}, "ShellTool": {"Shell Tool": "https://python.langchain.com/docs/integrations/tools/bash", "Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval"}, "ReadFileTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "CopyFileTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem"}, "DeleteFileTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem"}, "MoveFileTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem", "Tools as OpenAI Functions": "https://python.langchain.com/docs/modules/agents/tools/tools_as_openai_functions"}, "WriteFileTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "ListDirectoryTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem"}, "FileManagementToolkit": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem"}, "BraveSearch": {"Brave Search": "https://python.langchain.com/docs/integrations/providers/brave_search"}, "RedisChatMessageHistory": {"Redis Chat Message History": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db"}, "ZepMemory": {"Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory"}, "ConversationChain": {"Entity Memory with SQLite storage": "https://python.langchain.com/docs/integrations/memory/entity_memory_with_sqlite", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Bedrock": "https://python.langchain.com/docs/integrations/llms/bedrock", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Conversation Knowledge Graph Memory": "https://python.langchain.com/docs/modules/memory/types/kg", "ConversationTokenBufferMemory": "https://python.langchain.com/docs/modules/memory/types/token_buffer", "How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory", "How to customize conversational memory": "https://python.langchain.com/docs/modules/memory/conversational_customization", "ConversationSummaryBufferMemory": "https://python.langchain.com/docs/modules/memory/types/summary_buffer", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "ConversationEntityMemory": {"Entity Memory with SQLite storage": "https://python.langchain.com/docs/integrations/memory/entity_memory_with_sqlite"}, "SQLiteEntityStore": {"Entity Memory with SQLite storage": "https://python.langchain.com/docs/integrations/memory/entity_memory_with_sqlite"}, "ENTITY_MEMORY_CONVERSATION_TEMPLATE": {"Entity Memory with SQLite storage": "https://python.langchain.com/docs/integrations/memory/entity_memory_with_sqlite"}, "PostgresChatMessageHistory": {"Postgres Chat Message History": "https://python.langchain.com/docs/integrations/memory/postgres_chat_message_history"}, "MomentoChatMessageHistory": {"Momento Chat Message History": "https://python.langchain.com/docs/integrations/memory/momento_chat_message_history"}, "MongoDBChatMessageHistory": {"Mongodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/mongodb_chat_message_history"}, "CassandraChatMessageHistory": {"Cassandra Chat Message History": "https://python.langchain.com/docs/integrations/memory/cassandra_chat_message_history", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra"}, "MotorheadMemory": {"Mot\u00f6rhead Memory": "https://python.langchain.com/docs/integrations/memory/motorhead_memory", "Mot\u00f6rhead Memory (Managed)": "https://python.langchain.com/docs/integrations/memory/motorhead_memory_managed"}, "DynamoDBChatMessageHistory": {"Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history"}, "ChatAnthropic": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "Custom Pairwise Evaluator": "https://python.langchain.com/docs/guides/evaluation/comparison/custom", "Pairwise String Comparison": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_string", "Criteria Evaluation": "https://python.langchain.com/docs/guides/evaluation/string/criteria_eval_chain", "Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat"}, "ChatPromptTemplate": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "OpenAI Functions Metadata Tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Tagging": "https://python.langchain.com/docs/modules/chains/additional/tagging", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Extraction with OpenAI Functions": "https://python.langchain.com/docs/use_cases/extraction/openai_extraction", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic", "Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/popular/openai_functions", "Extraction": "https://python.langchain.com/docs/modules/chains/additional/extraction", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa"}, "SystemMessagePromptTemplate": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing"}, "AIMessagePromptTemplate": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma"}, "HumanMessagePromptTemplate": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/popular/openai_functions", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa"}, "SystemMessage": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Multi-Agent Simulated Environment: Petting Zoo": "https://python.langchain.com/docs/use_cases/agent_simulations/petting_zoo", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Two-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/two_player_dnd", "Multi-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/multi_player_dnd", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/popular/openai_functions", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa"}, "CallbackManager": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "Llama-cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp", "Running LLMs locally": "https://python.langchain.com/docs/use_cases/question_answering/local_retrieval_qa", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "StreamingStdOutCallbackHandler": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "GPT4All": "https://python.langchain.com/docs/integrations/llms/gpt4all", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Llama-cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp", "C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers", "Huggingface TextGen Inference": "https://python.langchain.com/docs/integrations/llms/huggingface_textgen_inference", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate", "Running LLMs locally": "https://python.langchain.com/docs/use_cases/question_answering/local_retrieval_qa", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "create_tagging_chain": {"Llama API": "https://python.langchain.com/docs/integrations/chat/llama_api", "Tagging": "https://python.langchain.com/docs/modules/chains/additional/tagging"}, "ChatVertexAI": {"Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm"}, "JinaChat": {"JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat"}, "AzureChatOpenAI": {"Azure": "https://python.langchain.com/docs/integrations/chat/azure_chat_openai", "Azure OpenAI": "https://python.langchain.com/docs/integrations/providers/azure_openai"}, "PromptLayerChatOpenAI": {"PromptLayer ChatOpenAI": "https://python.langchain.com/docs/integrations/chat/promptlayer_chatopenai"}, "ContextCallbackHandler": {"Context": "https://python.langchain.com/docs/integrations/callbacks/context"}, "ArgillaCallbackHandler": {"Argilla": "https://python.langchain.com/docs/integrations/providers/argilla"}, "StdOutCallbackHandler": {"Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking", "Async API": "https://python.langchain.com/docs/modules/agents/how_to/async_agent", "Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "PromptLayerCallbackHandler": {"PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer"}, "GPT4All": {"PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer", "GPT4All": "https://python.langchain.com/docs/integrations/llms/gpt4all", "Running LLMs locally": "https://python.langchain.com/docs/use_cases/question_answering/local_retrieval_qa", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa"}, "StreamlitCallbackHandler": {"Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit", "GPT4All": "https://python.langchain.com/docs/integrations/providers/gpt4all"}, "FigmaFileLoader": {"Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma"}, "AzureOpenAI": {"Azure OpenAI": "https://python.langchain.com/docs/integrations/llms/azure_openai_example", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai"}, "MyScale": {"MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query"}, "Baseten": {"Baseten": "https://python.langchain.com/docs/integrations/llms/baseten"}, "WeatherDataLoader": {"Weather": "https://python.langchain.com/docs/integrations/document_loaders/weather"}, "Tair": {"Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair"}, "UnstructuredWordDocumentLoader": {"Microsoft Word": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_word"}, "CollegeConfidentialLoader": {"College Confidential": "https://python.langchain.com/docs/integrations/document_loaders/college_confidential"}, "RWKV": {"RWKV-4": "https://python.langchain.com/docs/integrations/providers/rwkv"}, "GoogleDriveLoader": {"Google Drive": "https://python.langchain.com/docs/integrations/document_loaders/google_drive"}, "AmazonAPIGateway": {"Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway_example"}, "UnstructuredPowerPointLoader": {"Microsoft PowerPoint": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_powerpoint"}, "wandb_tracing_enabled": {"WandB Tracing": "https://python.langchain.com/docs/integrations/providers/agent_with_wandb_tracing"}, "CometCallbackHandler": {"Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking"}, "CTransformers": {"C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers"}, "BiliBiliLoader": {"BiliBili": "https://python.langchain.com/docs/integrations/document_loaders/bilibili"}, "DiffbotLoader": {"Diffbot": "https://python.langchain.com/docs/integrations/document_loaders/diffbot"}, "AimCallbackHandler": {"Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking"}, "ModernTreasuryLoader": {"Modern Treasury": "https://python.langchain.com/docs/integrations/document_loaders/modern_treasury"}, "FacebookChatLoader": {"Facebook Chat": "https://python.langchain.com/docs/integrations/document_loaders/facebook_chat"}, "Banana": {"Banana": "https://python.langchain.com/docs/integrations/llms/banana"}, "HuggingFacePipeline": {"Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface", "RELLM": "https://python.langchain.com/docs/integrations/llms/rellm_experimental", "JSONFormer": "https://python.langchain.com/docs/integrations/llms/jsonformer_experimental"}, "HuggingFaceHub": {"Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface"}, "HuggingFaceHubEmbeddings": {"Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface"}, "CharacterTextSplitter": {"Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate", "Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara", "Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis", "PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "Clarifai": "https://python.langchain.com/docs/integrations/vectorstores/clarifai", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn", "DocArrayHnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale", "ClickHouse Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse", "Qdrant": "https://python.langchain.com/docs/integrations/vectorstores/qdrant", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris", "AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch", "Pinecone": "https://python.langchain.com/docs/integrations/vectorstores/pinecone", "Azure Cognitive Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch", "Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra", "Milvus": "https://python.langchain.com/docs/integrations/vectorstores/milvus", "ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo", "DocArrayInMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory", "pg_embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding", "FAISS": "https://python.langchain.com/docs/integrations/vectorstores/faiss", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/vectorstores/mongodb_atlas", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic", "Manifest": "https://python.langchain.com/docs/integrations/llms/manifest", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching", "Data Augmented Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/data_augmented_question_answering", "Question answering over a group chat messages using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/semantic-search-over-chat", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Split by tokens ": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/split_by_token", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Loading from LangChainHub": "https://python.langchain.com/docs/modules/chains/how_to/from_hub", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa", "Vector store-augmented text generation": "https://python.langchain.com/docs/modules/chains/additional/vector_db_text_generation", "Hypothetical Document Embeddings": "https://python.langchain.com/docs/modules/chains/additional/hyde"}, "DocugamiLoader": {"Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami"}, "GutenbergLoader": {"Gutenberg": "https://python.langchain.com/docs/integrations/document_loaders/gutenberg"}, "AzureBlobStorageContainerLoader": {"Azure Blob Storage": "https://python.langchain.com/docs/integrations/providers/azure_blob_storage", "Azure Blob Storage Container": "https://python.langchain.com/docs/integrations/document_loaders/azure_blob_storage_container"}, "AzureBlobStorageFileLoader": {"Azure Blob Storage": "https://python.langchain.com/docs/integrations/providers/azure_blob_storage", "Azure Blob Storage File": "https://python.langchain.com/docs/integrations/document_loaders/azure_blob_storage_file"}, "WikipediaLoader": {"Wikipedia": "https://python.langchain.com/docs/integrations/document_loaders/wikipedia"}, "ConfluenceLoader": {"Confluence": "https://python.langchain.com/docs/integrations/document_loaders/confluence"}, "Predibase": {"Predibase": "https://python.langchain.com/docs/integrations/llms/predibase"}, "Beam": {"Beam": "https://python.langchain.com/docs/integrations/llms/beam"}, "GrobidParser": {"Grobid": "https://python.langchain.com/docs/integrations/document_loaders/grobid"}, "GenericLoader": {"Grobid": "https://python.langchain.com/docs/integrations/document_loaders/grobid", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code"}, "Typesense": {"Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense"}, "Hologres": {"Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres"}, "AI21": {"AI21 Labs": "https://python.langchain.com/docs/integrations/providers/ai21", "AI21": "https://python.langchain.com/docs/integrations/llms/ai21"}, "WandbCallbackHandler": {"Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking"}, "ObsidianLoader": {"Obsidian": "https://python.langchain.com/docs/integrations/document_loaders/obsidian"}, "create_sql_agent": {"CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database"}, "SQLDatabaseToolkit": {"CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions"}, "OpenAIModerationChain": {"OpenAI": "https://python.langchain.com/docs/integrations/providers/openai"}, "ChatGPTLoader": {"OpenAI": "https://python.langchain.com/docs/integrations/providers/openai", "ChatGPT Data": "https://python.langchain.com/docs/integrations/document_loaders/chatgpt_loader"}, "AZLyricsLoader": {"AZLyrics": "https://python.langchain.com/docs/integrations/document_loaders/azlyrics"}, "ToMarkdownLoader": {"2Markdown": "https://python.langchain.com/docs/integrations/document_loaders/tomarkdown"}, "GitLoader": {"Git": "https://python.langchain.com/docs/integrations/document_loaders/git"}, "InfinoCallbackHandler": {"Infino": "https://python.langchain.com/docs/integrations/providers/infino"}, "MlflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway"}, "MlflowAIGatewayEmbeddings": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway"}, "ChatMLflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway"}, "SingleStoreDB": {"SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb"}, "Tigris": {"Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris"}, "S3DirectoryLoader": {"AWS S3 Directory": "https://python.langchain.com/docs/integrations/document_loaders/aws_s3_directory"}, "S3FileLoader": {"AWS S3 Directory": "https://python.langchain.com/docs/integrations/providers/aws_s3", "AWS S3 File": "https://python.langchain.com/docs/integrations/document_loaders/aws_s3_file"}, "SQLDatabase": {"Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "SQL Query": "https://python.langchain.com/docs/use_cases/tabular/sql_query"}, "Weaviate": {"Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query"}, "AirbyteJSONLoader": {"Airbyte": "https://python.langchain.com/docs/integrations/providers/airbyte", "Airbyte JSON": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_json"}, "TelegramChatFileLoader": {"Telegram": "https://python.langchain.com/docs/integrations/document_loaders/telegram"}, "TelegramChatApiLoader": {"Telegram": "https://python.langchain.com/docs/integrations/document_loaders/telegram"}, "PredictionGuard": {"Prediction Guard": "https://python.langchain.com/docs/integrations/llms/predictionguard"}, "NotionDirectoryLoader": {"Notion DB": "https://python.langchain.com/docs/integrations/providers/notion", "Notion DB 1/2": "https://python.langchain.com/docs/integrations/document_loaders/notion", "Context aware text splitting and QA / Chat": "https://python.langchain.com/docs/use_cases/question_answering/document-context-aware-QA", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA"}, "NotionDBLoader": {"Notion DB": "https://python.langchain.com/docs/integrations/providers/notion", "Notion DB 2/2": "https://python.langchain.com/docs/integrations/document_loaders/notiondb"}, "MWDumpLoader": {"MediaWikiDump": "https://python.langchain.com/docs/integrations/document_loaders/mediawikidump"}, "BraveSearchLoader": {"Brave Search": "https://python.langchain.com/docs/integrations/document_loaders/brave_search"}, "StarRocks": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks"}, "DatadogLogsLoader": {"Datadog Logs": "https://python.langchain.com/docs/integrations/document_loaders/datadog_logs"}, "ApifyDatasetLoader": {"Apify": "https://python.langchain.com/docs/integrations/providers/apify", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset"}, "NLPCloud": {"NLPCloud": "https://python.langchain.com/docs/integrations/providers/nlpcloud", "NLP Cloud": "https://python.langchain.com/docs/integrations/llms/nlpcloud"}, "Milvus": {"Milvus": "https://python.langchain.com/docs/integrations/vectorstores/milvus", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz"}, "Qdrant": {"Qdrant": "https://python.langchain.com/docs/integrations/vectorstores/qdrant", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query"}, "GitbookLoader": {"GitBook": "https://python.langchain.com/docs/integrations/document_loaders/gitbook"}, "OpenSearchVectorSearch": {"OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch"}, "Pinecone": {"Pinecone": "https://python.langchain.com/docs/integrations/vectorstores/pinecone", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone"}, "Rockset": {"Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset"}, "Minimax": {"Minimax": "https://python.langchain.com/docs/integrations/llms/minimax"}, "UnstructuredFileLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured", "Unstructured File": "https://python.langchain.com/docs/integrations/document_loaders/unstructured_file"}, "SelfHostedPipeline": {"Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse"}, "SelfHostedHuggingFaceLLM": {"Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse"}, "MlflowCallbackHandler": {"MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking"}, "SpreedlyLoader": {"Spreedly": "https://python.langchain.com/docs/integrations/document_loaders/spreedly"}, "OpenLLM": {"OpenLLM": "https://python.langchain.com/docs/integrations/llms/openllm"}, "SearxSearchResults": {"SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx"}, "SpacyTextSplitter": {"spaCy": "https://python.langchain.com/docs/integrations/providers/spacy", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas", "Split by tokens ": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/split_by_token"}, "Modal": {"Modal": "https://python.langchain.com/docs/integrations/llms/modal"}, "Xinference": {"Xorbits Inference (Xinference)": "https://python.langchain.com/docs/integrations/llms/xinference"}, "IFixitLoader": {"iFixit": "https://python.langchain.com/docs/integrations/document_loaders/ifixit"}, "AlephAlpha": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/llms/aleph_alpha"}, "PipelineAI": {"PipelineAI": "https://python.langchain.com/docs/integrations/llms/pipelineai_example"}, "LlamaCpp": {"Llama.cpp": "https://python.langchain.com/docs/integrations/providers/llamacpp", "Llama-cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp", "Running LLMs locally": "https://python.langchain.com/docs/use_cases/question_answering/local_retrieval_qa", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "AwaDB": {"AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb"}, "ArxivLoader": {"Arxiv": "https://python.langchain.com/docs/integrations/document_loaders/arxiv"}, "Anyscale": {"Anyscale": "https://python.langchain.com/docs/integrations/llms/anyscale"}, "StripeLoader": {"Stripe": "https://python.langchain.com/docs/integrations/document_loaders/stripe"}, "BlackboardLoader": {"Blackboard": "https://python.langchain.com/docs/integrations/document_loaders/blackboard"}, "WhatsAppChatLoader": {"WhatsApp": "https://python.langchain.com/docs/integrations/providers/whatsapp", "WhatsApp Chat": "https://python.langchain.com/docs/integrations/document_loaders/whatsapp_chat"}, "LanceDB": {"LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb"}, "OneDriveLoader": {"Microsoft OneDrive": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_onedrive"}, "AnalyticDB": {"AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb"}, "YoutubeLoader": {"YouTube": "https://python.langchain.com/docs/integrations/providers/youtube", "YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript"}, "GoogleApiYoutubeLoader": {"YouTube": "https://python.langchain.com/docs/integrations/providers/youtube", "YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript"}, "PromptLayerOpenAI": {"PromptLayer": "https://python.langchain.com/docs/integrations/providers/promptlayer", "PromptLayer OpenAI": "https://python.langchain.com/docs/integrations/llms/promptlayer_openai"}, "DeepLake": {"Deep Lake": "https://python.langchain.com/docs/integrations/providers/deeplake", "Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake", "Question answering over a group chat messages using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/semantic-search-over-chat", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query"}, "WhyLabsCallbackHandler": {"WhyLabs": "https://python.langchain.com/docs/integrations/providers/whylabs_profiling"}, "FlyteCallbackHandler": {"Flyte": "https://python.langchain.com/docs/integrations/providers/flyte"}, "ManifestWrapper": {"Hazy Research": "https://python.langchain.com/docs/integrations/providers/hazy_research", "Manifest": "https://python.langchain.com/docs/integrations/llms/manifest"}, "Marqo": {"Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo"}, "IMSDbLoader": {"IMSDb": "https://python.langchain.com/docs/integrations/document_loaders/imsdb"}, "PGVector": {"PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector"}, "DeepInfra": {"DeepInfra": "https://python.langchain.com/docs/integrations/llms/deepinfra_example"}, "AgentExecutor": {"Jina": "https://python.langchain.com/docs/integrations/providers/jina", "PowerBI Dataset Agent": "https://python.langchain.com/docs/integrations/toolkits/powerbi", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db", "How to add Memory to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory", "Custom MRKL agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent", "Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools", "Custom multi-action agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_multi_action_agent", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Custom agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "ZeroShotAgent": {"Jina": "https://python.langchain.com/docs/integrations/providers/jina", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db", "How to add Memory to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory", "Custom MRKL agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent", "Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools"}, "RedditPostsLoader": {"Reddit": "https://python.langchain.com/docs/integrations/document_loaders/reddit"}, "TrelloLoader": {"Trello": "https://python.langchain.com/docs/integrations/document_loaders/trello"}, "AtlasDB": {"AtlasDB": "https://python.langchain.com/docs/integrations/providers/atlas", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas"}, "SKLearnVectorStore": {"scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn"}, "EverNoteLoader": {"EverNote": "https://python.langchain.com/docs/integrations/document_loaders/evernote"}, "TwitterTweetLoader": {"Twitter": "https://python.langchain.com/docs/integrations/document_loaders/twitter"}, "DiscordChatLoader": {"Discord": "https://python.langchain.com/docs/integrations/document_loaders/discord"}, "RedisCache": {"Redis": "https://python.langchain.com/docs/integrations/providers/redis", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "RedisSemanticCache": {"Redis": "https://python.langchain.com/docs/integrations/providers/redis", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "Redis": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis"}, "SelfQueryRetriever": {"Chroma": "https://python.langchain.com/docs/integrations/providers/chroma", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Context aware text splitting and QA / Chat": "https://python.langchain.com/docs/use_cases/question_answering/document-context-aware-QA", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query"}, "ClearMLCallbackHandler": {"ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking"}, "Cohere": {"Cohere": "https://python.langchain.com/docs/integrations/llms/cohere"}, "SlackDirectoryLoader": {"Slack": "https://python.langchain.com/docs/integrations/document_loaders/slack"}, "LLMContentHandler": {"SageMaker Endpoint": "https://python.langchain.com/docs/integrations/providers/sagemaker_endpoint", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker"}, "ContentHandlerBase": {"SageMaker Endpoint": "https://python.langchain.com/docs/integrations/providers/sagemaker_endpoint"}, "HNLoader": {"Hacker News": "https://python.langchain.com/docs/integrations/document_loaders/hacker_news"}, "Annoy": {"Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy"}, "GCSDirectoryLoader": {"Google Cloud Storage": "https://python.langchain.com/docs/integrations/providers/google_cloud_storage", "Google Cloud Storage Directory": "https://python.langchain.com/docs/integrations/document_loaders/google_cloud_storage_directory"}, "GCSFileLoader": {"Google Cloud Storage": "https://python.langchain.com/docs/integrations/providers/google_cloud_storage", "Google Cloud Storage File": "https://python.langchain.com/docs/integrations/document_loaders/google_cloud_storage_file"}, "ArthurCallbackHandler": {"Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking"}, "DuckDBLoader": {"DuckDB": "https://python.langchain.com/docs/integrations/document_loaders/duckdb"}, "Petals": {"Petals": "https://python.langchain.com/docs/integrations/llms/petals_example"}, "MomentoCache": {"Momento": "https://python.langchain.com/docs/integrations/providers/momento", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "AirtableLoader": {"Airtable": "https://python.langchain.com/docs/integrations/document_loaders/airtable"}, "Clarifai": {"Clarifai": "https://python.langchain.com/docs/integrations/llms/clarifai"}, "BigQueryLoader": {"Google BigQuery": "https://python.langchain.com/docs/integrations/document_loaders/google_bigquery"}, "RoamLoader": {"Roam": "https://python.langchain.com/docs/integrations/document_loaders/roam"}, "Portkey": {"Log, Trace, and Monitor Langchain LLM Calls": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index"}, "Vectara": {"Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation"}, "VectaraRetriever": {"Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat"}, "load_qa_chain": {"Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Running LLMs locally": "https://python.langchain.com/docs/use_cases/question_answering/local_retrieval_qa", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs"}, "CONDENSE_QUESTION_PROMPT": {"Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat"}, "load_qa_with_sources_chain": {"Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "QA_PROMPT": {"Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat"}, "create_csv_agent": {"CSV Agent": "https://python.langchain.com/docs/integrations/toolkits/csv"}, "create_xorbits_agent": {"Xorbits Agent": "https://python.langchain.com/docs/integrations/toolkits/xorbits"}, "JiraToolkit": {"Jira": "https://python.langchain.com/docs/integrations/toolkits/jira"}, "JiraAPIWrapper": {"Jira": "https://python.langchain.com/docs/integrations/toolkits/jira"}, "create_spark_dataframe_agent": {"Spark Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/spark"}, "PyPDFLoader": {"Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "MergeDocLoader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc_loader", "Question answering over a group chat messages using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/semantic-search-over-chat", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat"}, "create_python_agent": {"Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python"}, "PythonREPLTool": {"Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python"}, "create_pbi_agent": {"PowerBI Dataset Agent": "https://python.langchain.com/docs/integrations/toolkits/powerbi"}, "PowerBIToolkit": {"PowerBI Dataset Agent": "https://python.langchain.com/docs/integrations/toolkits/powerbi"}, "PowerBIDataset": {"PowerBI Dataset Agent": "https://python.langchain.com/docs/integrations/toolkits/powerbi"}, "AzureCognitiveServicesToolkit": {"Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/toolkits/azure_cognitive_services"}, "Requests": {"Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Evaluating an OpenAPI Chain": "https://python.langchain.com/docs/guides/evaluation/examples/openapi_eval", "OpenAPI chain": "https://python.langchain.com/docs/modules/chains/additional/openapi"}, "APIOperation": {"Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Evaluating an OpenAPI Chain": "https://python.langchain.com/docs/guides/evaluation/examples/openapi_eval", "OpenAPI chain": "https://python.langchain.com/docs/modules/chains/additional/openapi"}, "OpenAPISpec": {"Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Evaluating an OpenAPI Chain": "https://python.langchain.com/docs/guides/evaluation/examples/openapi_eval", "OpenAPI chain": "https://python.langchain.com/docs/modules/chains/additional/openapi"}, "NLAToolkit": {"Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval"}, "GmailToolkit": {"Gmail Toolkit": "https://python.langchain.com/docs/integrations/toolkits/gmail"}, "build_resource_service": {"Gmail Toolkit": "https://python.langchain.com/docs/integrations/toolkits/gmail"}, "get_gmail_credentials": {"Gmail Toolkit": "https://python.langchain.com/docs/integrations/toolkits/gmail"}, "create_json_agent": {"JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json"}, "JsonToolkit": {"JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json"}, "JsonSpec": {"JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json", "OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi"}, "GitHubToolkit": {"Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github"}, "GitHubAPIWrapper": {"Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github"}, "GitHubAction": {"Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github"}, "create_spark_sql_agent": {"Spark SQL Agent": "https://python.langchain.com/docs/integrations/toolkits/spark_sql"}, "SparkSQLToolkit": {"Spark SQL Agent": "https://python.langchain.com/docs/integrations/toolkits/spark_sql"}, "SparkSQL": {"Spark SQL Agent": "https://python.langchain.com/docs/integrations/toolkits/spark_sql"}, "create_sync_playwright_browser": {"PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright"}, "O365Toolkit": {"Office365 Toolkit": "https://python.langchain.com/docs/integrations/toolkits/office365"}, "create_pandas_dataframe_agent": {"Pandas Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/pandas", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "create_multion_agent": {"Multion Toolkit": "https://python.langchain.com/docs/integrations/toolkits/multion"}, "MultionClientTool": {"Multion Toolkit": "https://python.langchain.com/docs/integrations/toolkits/multion"}, "AmadeusToolkit": {"Amadeus Toolkit": "https://python.langchain.com/docs/integrations/toolkits/amadeus"}, "WebBaseLoader": {"Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore", "WebBaseLoader": "https://python.langchain.com/docs/integrations/document_loaders/web_base", "MergeDocLoader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc_loader", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Running LLMs locally": "https://python.langchain.com/docs/use_cases/question_answering/local_retrieval_qa", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore"}, "create_vectorstore_agent": {"Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore"}, "VectorStoreToolkit": {"Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore"}, "VectorStoreInfo": {"Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore"}, "create_vectorstore_router_agent": {"Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore"}, "VectorStoreRouterToolkit": {"Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore"}, "reduce_openapi_spec": {"OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi"}, "RequestsWrapper": {"OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi"}, "create_openapi_agent": {"OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi"}, "OpenAPIToolkit": {"OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi"}, "RetrievalQAWithSourcesChain": {"Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "MatchingEngine": {"MatchingEngine": "https://python.langchain.com/docs/integrations/vectorstores/matchingengine"}, "OpenAIChat": {"Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake"}, "InMemoryDocstore": {"Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Generative Agents in LangChain": "https://python.langchain.com/docs/use_cases/agent_simulations/characters"}, "AlibabaCloudOpenSearch": {"Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch"}, "AlibabaCloudOpenSearchSettings": {"Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch"}, "StarRocksSettings": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks"}, "TokenTextSplitter": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "Split by tokens ": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/split_by_token"}, "DirectoryLoader": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks"}, "UnstructuredMarkdownLoader": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks"}, "DocArrayHnswSearch": {"DocArrayHnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw"}, "MyScaleSettings": {"MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale"}, "Clickhouse": {"ClickHouse Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse"}, "ClickhouseSettings": {"ClickHouse Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse"}, "SupabaseVectorStore": {"Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase"}, "AzureSearch": {"Azure Cognitive Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch"}, "Cassandra": {"Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra"}, "ElasticVectorSearch": {"ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs"}, "ElasticKnnSearch": {"ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch"}, "DocArrayInMemorySearch": {"DocArrayInMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory"}, "PGEmbedding": {"pg_embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding"}, "MongoDBAtlasVectorSearch": {"MongoDB Atlas": "https://python.langchain.com/docs/integrations/vectorstores/mongodb_atlas"}, "Meilisearch": {"Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch"}, "create_metadata_tagger": {"OpenAI Functions Metadata Tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger"}, "AsyncHtmlLoader": {"html2text": "https://python.langchain.com/docs/integrations/document_transformers/html2text", "AsyncHtmlLoader": "https://python.langchain.com/docs/integrations/document_loaders/async_html"}, "Html2TextTransformer": {"html2text": "https://python.langchain.com/docs/integrations/document_transformers/html2text"}, "DoctranPropertyExtractor": {"Doctran Extract Properties": "https://python.langchain.com/docs/integrations/document_transformers/doctran_extract_properties"}, "DoctranQATransformer": {"Doctran Interrogate Documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_interrogate_document"}, "DoctranTextTranslator": {"Doctran Translate Documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_translate_document"}, "SnowflakeLoader": {"Snowflake": "https://python.langchain.com/docs/integrations/document_loaders/snowflake"}, "AcreomLoader": {"acreom": "https://python.langchain.com/docs/integrations/document_loaders/acreom"}, "UnstructuredCSVLoader": {"CSV": "https://python.langchain.com/docs/integrations/document_loaders/csv"}, "XorbitsLoader": {"Xorbits Pandas DataFrame": "https://python.langchain.com/docs/integrations/document_loaders/xorbits"}, "UnstructuredEmailLoader": {"Email": "https://python.langchain.com/docs/integrations/document_loaders/email"}, "OutlookMessageLoader": {"Email": "https://python.langchain.com/docs/integrations/document_loaders/email"}, "BlockchainDocumentLoader": {"Blockchain": "https://python.langchain.com/docs/integrations/document_loaders/blockchain"}, "BlockchainType": {"Blockchain": "https://python.langchain.com/docs/integrations/document_loaders/blockchain"}, "RecursiveUrlLoader": {"Recursive URL Loader": "https://python.langchain.com/docs/integrations/document_loaders/recursive_url_loader"}, "JoplinLoader": {"Joplin": "https://python.langchain.com/docs/integrations/document_loaders/joplin"}, "EtherscanLoader": {"Etherscan Loader": "https://python.langchain.com/docs/integrations/document_loaders/Etherscan"}, "Docx2txtLoader": {"Microsoft Word": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_word"}, "OpenAIWhisperParser": {"Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio"}, "YoutubeAudioLoader": {"Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio"}, "UnstructuredURLLoader": {"URL": "https://python.langchain.com/docs/integrations/document_loaders/url"}, "SeleniumURLLoader": {"URL": "https://python.langchain.com/docs/integrations/document_loaders/url"}, "PlaywrightURLLoader": {"URL": "https://python.langchain.com/docs/integrations/document_loaders/url"}, "OpenCityDataLoader": {"Geopandas": "https://python.langchain.com/docs/integrations/document_loaders/geopandas", "Open City Data": "https://python.langchain.com/docs/integrations/document_loaders/open_city_data"}, "GeoDataFrameLoader": {"Geopandas": "https://python.langchain.com/docs/integrations/document_loaders/geopandas"}, "HuggingFaceDatasetLoader": {"HuggingFace dataset": "https://python.langchain.com/docs/integrations/document_loaders/hugging_face_dataset"}, "DropboxLoader": {"Dropbox": "https://python.langchain.com/docs/modules/data_connection/document_loaders/integrations/dropbox"}, "MHTMLLoader": {"mhtml": "https://python.langchain.com/docs/integrations/document_loaders/mhtml"}, "RocksetLoader": {"Rockset": "https://python.langchain.com/docs/integrations/document_loaders/rockset"}, "ImageCaptionLoader": {"Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions"}, "UnstructuredRSTLoader": {"RST": "https://python.langchain.com/docs/integrations/document_loaders/rst"}, "ConversationBufferWindowMemory": {"Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Meta-Prompt": "https://python.langchain.com/docs/use_cases/autonomous_agents/meta_prompt", "Voice Assistant": "https://python.langchain.com/docs/use_cases/chatbots/voice_assistant", "Create ChatGPT clone": "https://python.langchain.com/docs/modules/agents/how_to/chatgpt_clone"}, "UnstructuredImageLoader": {"Images": "https://python.langchain.com/docs/integrations/document_loaders/image"}, "TencentCOSFileLoader": {"Tencent COS File": "https://python.langchain.com/docs/integrations/document_loaders/tencent_cos_file"}, "TomlLoader": {"TOML": "https://python.langchain.com/docs/integrations/document_loaders/toml"}, "UnstructuredAPIFileLoader": {"Unstructured File": "https://python.langchain.com/docs/integrations/document_loaders/unstructured_file"}, "PsychicLoader": {"Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic"}, "TencentCOSDirectoryLoader": {"Tencent COS Directory": "https://python.langchain.com/docs/integrations/document_loaders/tencent_cos_directory"}, "GitHubIssuesLoader": {"GitHub": "https://python.langchain.com/docs/integrations/document_loaders/github"}, "UnstructuredOrgModeLoader": {"Org-mode": "https://python.langchain.com/docs/integrations/document_loaders/org_mode"}, "LarkSuiteDocLoader": {"LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite"}, "load_summarize_chain": {"LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching", "Summarization": "https://python.langchain.com/docs/use_cases/summarization/index"}, "IuguLoader": {"Iugu": "https://python.langchain.com/docs/integrations/document_loaders/iugu"}, "UnstructuredEPubLoader": {"EPub ": "https://python.langchain.com/docs/integrations/document_loaders/epub"}, "AttributeInfo": {"Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Context aware text splitting and QA / Chat": "https://python.langchain.com/docs/use_cases/question_answering/document-context-aware-QA", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query"}, "UnstructuredFileIOLoader": {"Google Drive": "https://python.langchain.com/docs/integrations/document_loaders/google_drive"}, "BrowserlessLoader": {"Browserless": "https://python.langchain.com/docs/integrations/document_loaders/browserless"}, "BibtexLoader": {"BibTeX": "https://python.langchain.com/docs/integrations/document_loaders/bibtex"}, "ReadTheDocsLoader": {"ReadTheDocs Documentation": "https://python.langchain.com/docs/integrations/document_loaders/readthedocs_documentation"}, "DataFrameLoader": {"Pandas DataFrame": "https://python.langchain.com/docs/integrations/document_loaders/pandas_dataframe"}, "GoogleApiClient": {"YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript"}, "NotebookLoader": {"Jupyter Notebook": "https://python.langchain.com/docs/integrations/document_loaders/jupyter_notebook", "Notebook": "https://python.langchain.com/docs/integrations/document_loaders/example_data/notebook"}, "UnstructuredTSVLoader": {"TSV": "https://python.langchain.com/docs/integrations/document_loaders/tsv"}, "UnstructuredODTLoader": {"Open Document Format (ODT)": "https://python.langchain.com/docs/integrations/document_loaders/odt"}, "EmbaasBlobLoader": {"Embaas": "https://python.langchain.com/docs/integrations/document_loaders/embaas"}, "Blob": {"Embaas": "https://python.langchain.com/docs/integrations/document_loaders/embaas"}, "EmbaasLoader": {"Embaas": "https://python.langchain.com/docs/integrations/document_loaders/embaas"}, "UnstructuredXMLLoader": {"XML": "https://python.langchain.com/docs/integrations/document_loaders/xml"}, "MaxComputeLoader": {"Alibaba Cloud MaxCompute": "https://python.langchain.com/docs/integrations/document_loaders/alibaba_cloud_maxcompute"}, "CubeSemanticLoader": {"Cube Semantic Layer": "https://python.langchain.com/docs/integrations/document_loaders/cube_semantic"}, "UnstructuredExcelLoader": {"Microsoft Excel": "https://python.langchain.com/docs/integrations/document_loaders/excel"}, "Language": {"Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code"}, "LanguageParser": {"Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code"}, "SRTLoader": {"Subtitle": "https://python.langchain.com/docs/integrations/document_loaders/subtitle"}, "MastodonTootsLoader": {"Mastodon": "https://python.langchain.com/docs/integrations/document_loaders/mastodon"}, "MergedDataLoader": {"MergeDocLoader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc_loader"}, "PySparkDataFrameLoader": {"PySpark DataFrame Loader": "https://python.langchain.com/docs/integrations/document_loaders/pyspark_dataframe"}, "CoNLLULoader": {"CoNLL-U": "https://python.langchain.com/docs/integrations/document_loaders/conll-u"}, "FaunaLoader": {"Fauna": "https://python.langchain.com/docs/integrations/document_loaders/fauna"}, "SitemapLoader": {"Sitemap": "https://python.langchain.com/docs/integrations/document_loaders/sitemap"}, "StochasticAI": {"StochasticAI": "https://python.langchain.com/docs/integrations/llms/stochasticai"}, "ForefrontAI": {"ForefrontAI": "https://python.langchain.com/docs/integrations/llms/forefrontai_example"}, "CerebriumAI": {"CerebriumAI": "https://python.langchain.com/docs/integrations/llms/cerebriumai_example"}, "OctoAIEndpoint": {"OctoAI Compute Service": "https://python.langchain.com/docs/integrations/llms/octoai"}, "Writer": {"Writer": "https://python.langchain.com/docs/integrations/llms/writer"}, "TextGen": {"TextGen": "https://python.langchain.com/docs/integrations/llms/textgen"}, "MosaicML": {"MosaicML": "https://python.langchain.com/docs/integrations/llms/mosaicml"}, "KoboldApiLLM": {"KoboldAI API": "https://python.langchain.com/docs/integrations/llms/koboldai"}, "VertexAI": {"Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm"}, "Bedrock": {"Bedrock": "https://python.langchain.com/docs/integrations/llms/bedrock"}, "GooseAI": {"GooseAI": "https://python.langchain.com/docs/integrations/llms/gooseai_example"}, "Databricks": {"Databricks": "https://python.langchain.com/docs/integrations/llms/databricks"}, "MapReduceChain": {"Manifest": "https://python.langchain.com/docs/integrations/llms/manifest", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "ModelLaboratory": {"Manifest": "https://python.langchain.com/docs/integrations/llms/manifest", "Model comparison": "https://python.langchain.com/docs/guides/model_laboratory"}, "Tongyi": {"Tongyi Qwen": "https://python.langchain.com/docs/integrations/llms/tongyi"}, "InMemoryCache": {"Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "SQLiteCache": {"Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "GPTCache": {"Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "SQLAlchemyCache": {"Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "AzureMLOnlineEndpoint": {"AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example"}, "ContentFormatterBase": {"AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example"}, "DollyContentFormatter": {"AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example"}, "load_llm": {"AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example", "Serialization": "https://python.langchain.com/docs/modules/model_io/models/llms/llm_serialization"}, "AzureMLEndpointClient": {"AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example"}, "OpenLM": {"OpenLM": "https://python.langchain.com/docs/integrations/llms/openlm"}, "HuggingFaceTextGenInference": {"Huggingface TextGen Inference": "https://python.langchain.com/docs/integrations/llms/huggingface_textgen_inference"}, "ChatGLM": {"ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm"}, "tool": {"JSONFormer": "https://python.langchain.com/docs/integrations/llms/jsonformer_experimental", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools"}, "Replicate": {"Replicate": "https://python.langchain.com/docs/integrations/llms/replicate"}, "tracing_v2_enabled": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough"}, "wait_for_all_tracers": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough"}, "EvaluatorType": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough", "Criteria Evaluation": "https://python.langchain.com/docs/guides/evaluation/string/criteria_eval_chain"}, "RunEvalConfig": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough"}, "arun_on_dataset": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough"}, "run_on_dataset": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough"}, "load_dataset": {"Question Answering Benchmarking: State of the Union Address": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_sota", "Question Answering Benchmarking: Paul Graham Essay": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_pg", "Evaluating an OpenAPI Chain": "https://python.langchain.com/docs/guides/evaluation/examples/openapi_eval", "Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "SQL Question Answering Benchmarking: Chinook": "https://python.langchain.com/docs/guides/evaluation/examples/sql_qa_benchmarking_chinook", "Agent VectorDB Question Answering Benchmarking": "https://python.langchain.com/docs/guides/evaluation/examples/agent_vectordb_sota_pg"}, "QAEvalChain": {"Question Answering Benchmarking: State of the Union Address": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_sota", "Question Answering Benchmarking: Paul Graham Essay": "https://python.langchain.com/docs/guides/evaluation/examples/qa_benchmarking_pg", "Data Augmented Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/data_augmented_question_answering", "SQL Question Answering Benchmarking: Chinook": "https://python.langchain.com/docs/guides/evaluation/examples/sql_qa_benchmarking_chinook", "Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/question_answering", "Agent VectorDB Question Answering Benchmarking": "https://python.langchain.com/docs/guides/evaluation/examples/agent_vectordb_sota_pg"}, "QAGenerationChain": {"QA Generation": "https://python.langchain.com/docs/guides/evaluation/examples/qa_generation"}, "OpenAPIEndpointChain": {"Evaluating an OpenAPI Chain": "https://python.langchain.com/docs/guides/evaluation/examples/openapi_eval", "OpenAPI chain": "https://python.langchain.com/docs/modules/chains/additional/openapi"}, "QAGenerateChain": {"Data Augmented Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/data_augmented_question_answering"}, "load_evaluator": {"Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "Pairwise Embedding Distance ": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_embedding_distance", "Pairwise String Comparison": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_string", "Criteria Evaluation": "https://python.langchain.com/docs/guides/evaluation/string/criteria_eval_chain", "QA Correctness": "https://python.langchain.com/docs/guides/evaluation/string/qa", "String Distance": "https://python.langchain.com/docs/guides/evaluation/string/string_distance", "Embedding Distance": "https://python.langchain.com/docs/guides/evaluation/string/embedding_distance"}, "ContextQAEvalChain": {"Question Answering": "https://python.langchain.com/docs/guides/evaluation/examples/question_answering"}, "AgentAction": {"Custom Trajectory Evaluator": "https://python.langchain.com/docs/guides/evaluation/trajectory/custom", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Custom multi-action agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_multi_action_agent", "Custom agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "AgentTrajectoryEvaluator": {"Custom Trajectory Evaluator": "https://python.langchain.com/docs/guides/evaluation/trajectory/custom"}, "EmbeddingDistance": {"Pairwise Embedding Distance ": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_embedding_distance", "Embedding Distance": "https://python.langchain.com/docs/guides/evaluation/string/embedding_distance"}, "PairwiseStringEvaluator": {"Custom Pairwise Evaluator": "https://python.langchain.com/docs/guides/evaluation/comparison/custom"}, "Criteria": {"Criteria Evaluation": "https://python.langchain.com/docs/guides/evaluation/string/criteria_eval_chain"}, "SQL_PROMPT": {"QA Correctness": "https://python.langchain.com/docs/guides/evaluation/string/qa"}, "StringEvaluator": {"Custom String Evaluator": "https://python.langchain.com/docs/guides/evaluation/string/custom"}, "StringDistance": {"String Distance": "https://python.langchain.com/docs/guides/evaluation/string/string_distance"}, "create_tagging_chain_pydantic": {"Tagging": "https://python.langchain.com/docs/modules/chains/additional/tagging"}, "get_openapi_chain": {"OpenAPI calls with OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openapi_openai"}, "LLMRequestsChain": {"HTTP request chain": "https://python.langchain.com/docs/modules/chains/additional/llm_requests"}, "FileChatMessageHistory": {"AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt"}, "BaseLLM": {"BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context"}, "VectorStore": {"BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent"}, "Chain": {"BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "BaseTool": {"!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Custom functions with OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/custom-functions-with-openai-functions-agent"}, "BaseCombineDocumentsChain": {"!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "MarkdownHeaderTextSplitter": {"Context aware text splitting and QA / Chat": "https://python.langchain.com/docs/use_cases/question_answering/document-context-aware-QA", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "MarkdownHeaderTextSplitter": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/markdown_header_metadata"}, "MultiQueryRetriever": {"QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever"}, "create_citation_fuzzy_match_chain": {"Cite sources": "https://python.langchain.com/docs/use_cases/question_answering/how_to/qa_citations", "Question-Answering Citations": "https://python.langchain.com/docs/modules/chains/additional/qa_citations"}, "BaseRetriever": {"Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "FLARE": "https://python.langchain.com/docs/modules/chains/additional/flare"}, "AsyncCallbackManagerForRetrieverRun": {"Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "FLARE": "https://python.langchain.com/docs/modules/chains/additional/flare"}, "CallbackManagerForRetrieverRun": {"Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "FLARE": "https://python.langchain.com/docs/modules/chains/additional/flare"}, "FlareChain": {"Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "FLARE": "https://python.langchain.com/docs/modules/chains/additional/flare"}, "HypotheticalDocumentEmbedder": {"Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "Hypothetical Document Embeddings": "https://python.langchain.com/docs/modules/chains/additional/hyde"}, "StuffDocumentsChain": {"Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa"}, "create_qa_with_sources_chain": {"Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa"}, "create_qa_with_structure_chain": {"Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Retrieval QA using OpenAI functions": "https://python.langchain.com/docs/modules/chains/additional/openai_functions_retrieval_qa"}, "ElasticsearchDatabaseChain": {"Elasticsearch database": "https://python.langchain.com/docs/modules/chains/additional/elasticsearch_database"}, "create_sql_query_chain": {"SQL Query": "https://python.langchain.com/docs/use_cases/tabular/sql_query"}, "NeptuneGraph": {"Neptune Open Cypher QA Chain": "https://python.langchain.com/docs/modules/chains/additional/neptune_cypher_qa"}, "NeptuneOpenCypherQAChain": {"Neptune Open Cypher QA Chain": "https://python.langchain.com/docs/modules/chains/additional/neptune_cypher_qa"}, "NebulaGraphQAChain": {"NebulaGraphQAChain": "https://python.langchain.com/docs/modules/chains/additional/graph_nebula_qa"}, "NebulaGraph": {"NebulaGraphQAChain": "https://python.langchain.com/docs/modules/chains/additional/graph_nebula_qa"}, "KuzuGraph": {"KuzuQAChain": "https://python.langchain.com/docs/modules/chains/additional/graph_kuzu_qa"}, "KuzuQAChain": {"KuzuQAChain": "https://python.langchain.com/docs/modules/chains/additional/graph_kuzu_qa"}, "HugeGraphQAChain": {"HugeGraph QA Chain": "https://python.langchain.com/docs/modules/chains/additional/graph_hugegraph_qa"}, "HugeGraph": {"HugeGraph QA Chain": "https://python.langchain.com/docs/modules/chains/additional/graph_hugegraph_qa"}, "GraphSparqlQAChain": {"GraphSparqlQAChain": "https://python.langchain.com/docs/modules/chains/additional/graph_sparql_qa"}, "RdfGraph": {"GraphSparqlQAChain": "https://python.langchain.com/docs/modules/chains/additional/graph_sparql_qa"}, "ArangoGraph": {"ArangoDB QA chain": "https://python.langchain.com/docs/modules/chains/additional/graph_arangodb_qa"}, "ArangoGraphQAChain": {"ArangoDB QA chain": "https://python.langchain.com/docs/modules/chains/additional/graph_arangodb_qa"}, "GraphIndexCreator": {"Graph QA": "https://python.langchain.com/docs/modules/chains/additional/graph_qa"}, "GraphQAChain": {"Graph QA": "https://python.langchain.com/docs/modules/chains/additional/graph_qa"}, "NetworkxEntityGraph": {"Graph QA": "https://python.langchain.com/docs/modules/chains/additional/graph_qa"}, "GraphCypherQAChain": {"Graph DB QA chain": "https://python.langchain.com/docs/modules/chains/additional/graph_cypher_qa"}, "Neo4jGraph": {"Graph DB QA chain": "https://python.langchain.com/docs/modules/chains/additional/graph_cypher_qa"}, "LLMSingleActionAgent": {"Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "AgentOutputParser": {"Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "StringPromptTemplate": {"Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval", "Custom prompt template": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/custom_prompt_template", "Connecting to a Feature Store": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store"}, "AgentFinish": {"Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Custom multi-action agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_multi_action_agent", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Custom agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "AIPlugin": {"Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval"}, "SteamshipImageGenerationTool": {"Multi-modal outputs: Image & Text": "https://python.langchain.com/docs/use_cases/multi_modal/image_agent"}, "BaseMessage": {"CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Multi-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/multi_player_dnd", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools"}, "LLMBashChain": {"Bash chain": "https://python.langchain.com/docs/modules/chains/additional/llm_bash"}, "BashOutputParser": {"Bash chain": "https://python.langchain.com/docs/modules/chains/additional/llm_bash"}, "BashProcess": {"Bash chain": "https://python.langchain.com/docs/modules/chains/additional/llm_bash"}, "LLMSymbolicMathChain": {"LLM Symbolic Math ": "https://python.langchain.com/docs/modules/chains/additional/llm_symbolic_math"}, "create_extraction_chain": {"Extraction with OpenAI Functions": "https://python.langchain.com/docs/use_cases/extraction/openai_extraction", "Extraction": "https://python.langchain.com/docs/modules/chains/additional/extraction"}, "create_extraction_chain_pydantic": {"Extraction with OpenAI Functions": "https://python.langchain.com/docs/use_cases/extraction/openai_extraction", "Extraction": "https://python.langchain.com/docs/modules/chains/additional/extraction"}, "LLMSummarizationCheckerChain": {"Summarization checker chain": "https://python.langchain.com/docs/modules/chains/additional/llm_summarization_checker"}, "LLMCheckerChain": {"Self-checking chain": "https://python.langchain.com/docs/modules/chains/additional/llm_checker"}, "RegexParser": {"Multi-Agent Simulated Environment: Petting Zoo": "https://python.langchain.com/docs/use_cases/agent_simulations/petting_zoo", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium"}, "TimeWeightedVectorStoreRetriever": {"Generative Agents in LangChain": "https://python.langchain.com/docs/use_cases/agent_simulations/characters"}, "EnsembleRetriever": {"Ensemble Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/ensemble"}, "PydanticOutputParser": {"MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic"}, "WebResearchRetriever": {"WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "SentenceTransformersTokenTextSplitter": {"Split by tokens ": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/split_by_token"}, "NLTKTextSplitter": {"Split by tokens ": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/split_by_token"}, "ChatMessageHistory": {"Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db"}, "BaseMemory": {"How to create a custom Memory class": "https://python.langchain.com/docs/modules/memory/custom_memory"}, "ConversationKGMemory": {"Conversation Knowledge Graph Memory": "https://python.langchain.com/docs/modules/memory/types/kg"}, "ConversationTokenBufferMemory": {"ConversationTokenBufferMemory": "https://python.langchain.com/docs/modules/memory/types/token_buffer"}, "MessagesPlaceholder": {"How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions", "Types of `MessagePromptTemplate`": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/msg_prompt_templates"}, "CombinedMemory": {"How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory"}, "ConversationSummaryMemory": {"How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory"}, "ConversationSummaryBufferMemory": {"ConversationSummaryBufferMemory": "https://python.langchain.com/docs/modules/memory/types/summary_buffer"}, "BaseCallbackHandler": {"Custom callback handlers": "https://python.langchain.com/docs/modules/callbacks/custom_callbacks", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Async callbacks": "https://python.langchain.com/docs/modules/callbacks/async_callbacks", "Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only"}, "tracing_enabled": {"Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks"}, "get_openai_callback": {"Token counting": "https://python.langchain.com/docs/modules/callbacks/token_counting", "Tracking token usage": "https://python.langchain.com/docs/modules/model_io/models/llms/token_usage_tracking"}, "FileCallbackHandler": {"Logging to file": "https://python.langchain.com/docs/modules/callbacks/filecallbackhandler"}, "LLMResult": {"Async callbacks": "https://python.langchain.com/docs/modules/callbacks/async_callbacks"}, "AsyncCallbackHandler": {"Async callbacks": "https://python.langchain.com/docs/modules/callbacks/async_callbacks"}, "StructuredTool": {"Multi-Input Tools": "https://python.langchain.com/docs/modules/agents/tools/multi_input_tool", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools"}, "AsyncCallbackManagerForToolRun": {"Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools"}, "CallbackManagerForToolRun": {"Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools"}, "ToolException": {"Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools"}, "format_tool_to_openai_function": {"Tools as OpenAI Functions": "https://python.langchain.com/docs/modules/agents/tools/tools_as_openai_functions"}, "RequestsGetTool": {"Tool Input Schema": "https://python.langchain.com/docs/modules/agents/tools/tool_input_validation"}, "HumanApprovalCallbackHandler": {"Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval"}, "DocstoreExplorer": {"ReAct document store": "https://python.langchain.com/docs/modules/agents/agent_types/react_docstore"}, "ReadOnlySharedMemory": {"Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools"}, "BaseMultiActionAgent": {"Custom multi-action agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_multi_action_agent"}, "FinalStreamingStdOutCallbackHandler": {"Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only"}, "LangChainTracer": {"Async API": "https://python.langchain.com/docs/modules/agents/how_to/async_agent"}, "BaseSingleActionAgent": {"Custom agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent"}, "HumanInputChatModel": {"Human input Chat Model": "https://python.langchain.com/docs/modules/model_io/models/chat/human_input_chat_model"}, "FakeListLLM": {"Fake LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/fake_llm"}, "CallbackManagerForLLMRun": {"Custom LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/custom_llm"}, "LLM": {"Custom LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/custom_llm"}, "HumanInputLLM": {"Human input LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/human_input_llm"}, "OutputFixingParser": {"Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry"}, "RetryOutputParser": {"Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry"}, "RetryWithErrorOutputParser": {"Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry"}, "EnumOutputParser": {"Enum parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/enum"}, "DatetimeOutputParser": {"Datetime parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/datetime"}, "MaxMarginalRelevanceExampleSelector": {"Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr"}, "SemanticSimilarityExampleSelector": {"Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr", "Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat"}, "FewShotPromptTemplate": {"Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr", "Select by n-gram overlap": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/ngram_overlap"}, "BaseExampleSelector": {"Custom example selector": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/custom_example_selector"}, "NGramOverlapExampleSelector": {"Select by n-gram overlap": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/ngram_overlap"}, "FewShotChatMessagePromptTemplate": {"Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat"}, "load_prompt": {"Serialization": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompt_serialization"}, "ChatMessagePromptTemplate": {"Types of `MessagePromptTemplate`": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/msg_prompt_templates"}, "MultiPromptChain": {"Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "LLMRouterChain": {"Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "RouterOutputParser": {"Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "EmbeddingRouterChain": {"Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "BaseLanguageModel": {"Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "AsyncCallbackManagerForChainRun": {"Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "CallbackManagerForChainRun": {"Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "BasePromptTemplate": {"Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "load_chain": {"Serialization": "https://python.langchain.com/docs/modules/chains/how_to/serialization", "Loading from LangChainHub": "https://python.langchain.com/docs/modules/chains/how_to/from_hub"}, "create_openai_fn_chain": {"Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/popular/openai_functions"}, "create_structured_output_chain": {"Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/popular/openai_functions"}} \ No newline at end of file +{"HuggingFaceBgeEmbeddings": {"BGE Hugging Face Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/bge_huggingface"}, "XinferenceEmbeddings": {"Xorbits inference (Xinference)": "https://python.langchain.com/docs/integrations/text_embedding/xinference"}, "DeepInfraEmbeddings": {"DeepInfra": "https://python.langchain.com/docs/integrations/text_embedding/deepinfra"}, "HuggingFaceEmbeddings": {"Hugging Face Hub": "https://python.langchain.com/docs/integrations/text_embedding/huggingfacehub", "Sentence Transformers Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/sentence_transformers", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever", "Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy", "Pairwise Embedding Distance ": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_embedding_distance", "Embedding Distance": "https://python.langchain.com/docs/guides/evaluation/string/embedding_distance", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder"}, "GPT4AllEmbeddings": {"GPT4All": "https://python.langchain.com/docs/integrations/text_embedding/gpt4all", "Ollama": "https://python.langchain.com/docs/integrations/llms/ollama", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "MosaicMLInstructorEmbeddings": {"MosaicML embeddings": "https://python.langchain.com/docs/integrations/text_embedding/mosaicml"}, "OpenAIEmbeddings": {"OpenAI": "https://python.langchain.com/docs/integrations/providers/openai", "AzureOpenAI": "https://python.langchain.com/docs/integrations/text_embedding/azureopenai", "RePhraseQueryRetriever": "https://python.langchain.com/docs/integrations/retrievers/re_phrase", "Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "kNN": "https://python.langchain.com/docs/integrations/retrievers/knn", "DocArray Retriever": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever", "SVM": "https://python.langchain.com/docs/integrations/retrievers/svm", "Pinecone Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/pinecone_hybrid_search", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever", "Azure OpenAI": "https://python.langchain.com/docs/integrations/providers/azure_openai", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate", "Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake", "Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata", "Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis", "PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn", "DocArrayHnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale", "ClickHouse Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse", "Qdrant": "https://python.langchain.com/docs/integrations/vectorstores/qdrant", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch", "Pinecone": "https://python.langchain.com/docs/integrations/vectorstores/pinecone", "Azure Cognitive Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch", "Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra", "USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch", "Milvus": "https://python.langchain.com/docs/integrations/vectorstores/milvus", "ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch", "DocArrayInMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory", "pg_embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding", "FAISS": "https://python.langchain.com/docs/integrations/vectorstores/faiss", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/vectorstores/mongodb_atlas", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Generative Agents in LangChain": "https://python.langchain.com/docs/use_cases/agent_simulations/characters", "Caching Embeddings": "https://python.langchain.com/docs/modules/data_connection/caching_embeddings", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "Parent Document Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/parent_document_retriever", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval", "Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr", "Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat", "Loading from LangChainHub": "https://python.langchain.com/docs/modules/chains/how_to/from_hub"}, "VertexAIEmbeddings": {"Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/text_embedding/google_vertex_ai_palm"}, "BedrockEmbeddings": {"Bedrock Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/bedrock", "Bedrock": "https://python.langchain.com/docs/integrations/providers/bedrock"}, "LlamaCppEmbeddings": {"Llama-cpp": "https://python.langchain.com/docs/integrations/text_embedding/llamacpp", "Llama.cpp": "https://python.langchain.com/docs/integrations/providers/llamacpp"}, "NLPCloudEmbeddings": {"NLP Cloud": "https://python.langchain.com/docs/integrations/text_embedding/nlp_cloud"}, "SpacyEmbeddings": {"Spacy Embedding": "https://python.langchain.com/docs/integrations/text_embedding/spacy_embedding"}, "HuggingFaceInstructEmbeddings": {"InstructEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/instruct_embeddings"}, "CohereEmbeddings": {"Cohere": "https://python.langchain.com/docs/integrations/providers/cohere", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "EdenAiEmbeddings": {"EDEN AI": "https://python.langchain.com/docs/integrations/text_embedding/edenai"}, "SentenceTransformerEmbeddings": {"Sentence Transformers Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/sentence_transformers", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma"}, "ClarifaiEmbeddings": {"Clarifai": "https://python.langchain.com/docs/integrations/providers/clarifai"}, "AwaEmbeddings": {"AwaEmbedding": "https://python.langchain.com/docs/integrations/text_embedding/Awa"}, "MiniMaxEmbeddings": {"MiniMax": "https://python.langchain.com/docs/integrations/text_embedding/minimax", "Minimax": "https://python.langchain.com/docs/integrations/providers/minimax"}, "FakeEmbeddings": {"Fake Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/fake", "DocArray Retriever": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair"}, "ElasticsearchEmbeddings": {"Elasticsearch": "https://python.langchain.com/docs/integrations/text_embedding/elasticsearch", "ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch"}, "SelfHostedEmbeddings": {"Self Hosted Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted"}, "SelfHostedHuggingFaceEmbeddings": {"Self Hosted Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted"}, "SelfHostedHuggingFaceInstructEmbeddings": {"Self Hosted Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted"}, "EmbaasEmbeddings": {"Embaas": "https://python.langchain.com/docs/integrations/text_embedding/embaas"}, "JinaEmbeddings": {"Jina": "https://python.langchain.com/docs/integrations/providers/jina"}, "AlephAlphaAsymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/providers/aleph_alpha"}, "AlephAlphaSymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/providers/aleph_alpha"}, "DashScopeEmbeddings": {"DashScope": "https://python.langchain.com/docs/integrations/text_embedding/dashscope"}, "TensorflowHubEmbeddings": {"TensorflowHub": "https://python.langchain.com/docs/integrations/text_embedding/tensorflowhub", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann"}, "ModelScopeEmbeddings": {"ModelScope": "https://python.langchain.com/docs/integrations/providers/modelscope"}, "SagemakerEndpointEmbeddings": {"SageMaker Endpoint Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/sagemaker-endpoint", "SageMaker Endpoint": "https://python.langchain.com/docs/integrations/providers/sagemaker_endpoint"}, "EmbeddingsContentHandler": {"SageMaker Endpoint Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/sagemaker-endpoint"}, "LocalAIEmbeddings": {"LocalAI": "https://python.langchain.com/docs/integrations/text_embedding/localai"}, "WebBaseLoader": {"RePhraseQueryRetriever": "https://python.langchain.com/docs/integrations/retrievers/re_phrase", "Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore", "WebBaseLoader": "https://python.langchain.com/docs/integrations/document_loaders/web_base", "MergeDocLoader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc_loader", "Ollama": "https://python.langchain.com/docs/integrations/llms/ollama", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Summarization": "https://python.langchain.com/docs/use_cases/summarization", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore"}, "RecursiveCharacterTextSplitter": {"RePhraseQueryRetriever": "https://python.langchain.com/docs/integrations/retrievers/re_phrase", "Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code", "Ollama": "https://python.langchain.com/docs/integrations/llms/ollama", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "Parent Document Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/parent_document_retriever", "MarkdownHeaderTextSplitter": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/markdown_header_metadata"}, "Chroma": {"RePhraseQueryRetriever": "https://python.langchain.com/docs/integrations/retrievers/re_phrase", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma", "Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Ollama": "https://python.langchain.com/docs/integrations/llms/ollama", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "Parent Document Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/parent_document_retriever", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router", "Loading from LangChainHub": "https://python.langchain.com/docs/modules/chains/how_to/from_hub"}, "ChatOpenAI": {"RePhraseQueryRetriever": "https://python.langchain.com/docs/integrations/retrievers/re_phrase", "Wikipedia": "https://python.langchain.com/docs/integrations/retrievers/wikipedia", "Arxiv": "https://python.langchain.com/docs/integrations/retrievers/arxiv", "ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "ArXiv API Tool": "https://python.langchain.com/docs/integrations/tools/arxiv", "Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "Shell Tool": "https://python.langchain.com/docs/integrations/tools/bash", "Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer", "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb", "Log10": "https://python.langchain.com/docs/integrations/providers/log10", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking", "CSV Agent": "https://python.langchain.com/docs/integrations/toolkits/csv", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python", "PowerBI Dataset Agent": "https://python.langchain.com/docs/integrations/toolkits/powerbi", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "Spark SQL Agent": "https://python.langchain.com/docs/integrations/toolkits/spark_sql", "Pandas Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/pandas", "OpenAI Functions Metadata Tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Debugging": "https://python.langchain.com/docs/guides/debugging", "LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough", "Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "Custom Trajectory Evaluator": "https://python.langchain.com/docs/guides/evaluation/trajectory/custom", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "Interface": "https://python.langchain.com/docs/guides/expression_language/interface", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Summarization": "https://python.langchain.com/docs/use_cases/summarization", "Extraction": "https://python.langchain.com/docs/use_cases/extraction", "SQL": "https://python.langchain.com/docs/use_cases/sql", "Tagging": "https://python.langchain.com/docs/use_cases/tagging", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents", "Cite sources": "https://python.langchain.com/docs/use_cases/question_answering/how_to/qa_citations", "Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Neptune Open Cypher QA Chain": "https://python.langchain.com/docs/use_cases/graph/neptune_cypher_qa", "NebulaGraphQAChain": "https://python.langchain.com/docs/use_cases/graph/graph_nebula_qa", "KuzuQAChain": "https://python.langchain.com/docs/use_cases/graph/graph_kuzu_qa", "HugeGraph QA Chain": "https://python.langchain.com/docs/use_cases/graph/graph_hugegraph_qa", "GraphSparqlQAChain": "https://python.langchain.com/docs/use_cases/graph/graph_sparql_qa", "ArangoDB QA chain": "https://python.langchain.com/docs/use_cases/graph/graph_arangodb_qa", "Graph DB QA chain": "https://python.langchain.com/docs/use_cases/graph/graph_cypher_qa", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Multi-Agent Simulated Environment: Petting Zoo": "https://python.langchain.com/docs/use_cases/agent_simulations/petting_zoo", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Generative Agents in LangChain": "https://python.langchain.com/docs/use_cases/agent_simulations/characters", "Two-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/two_player_dnd", "Multi-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/multi_player_dnd", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Custom callback handlers": "https://python.langchain.com/docs/modules/callbacks/custom_callbacks", "Async callbacks": "https://python.langchain.com/docs/modules/callbacks/async_callbacks", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Tools as OpenAI Functions": "https://python.langchain.com/docs/modules/agents/tools/tools_as_openai_functions", "OpenAI Multi Functions Agent": "https://python.langchain.com/docs/modules/agents/agent_types/openai_multi_functions_agent", "Handle parsing errors": "https://python.langchain.com/docs/modules/agents/how_to/handle_parsing_errors", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions", "Custom functions with OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/custom-functions-with-openai-functions-agent", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Connecting to a Feature Store": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store", "Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain", "Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/how_to/openai_functions"}, "RePhraseQueryRetriever": {"RePhraseQueryRetriever": "https://python.langchain.com/docs/integrations/retrievers/re_phrase"}, "PromptTemplate": {"RePhraseQueryRetriever": "https://python.langchain.com/docs/integrations/retrievers/re_phrase", "Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator", "Streamlit Chat Message History": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/providers/sagemaker_tracking", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai", "Pairwise String Comparison": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_string", "Criteria Evaluation": "https://python.langchain.com/docs/guides/evaluation/string/criteria_eval_chain", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "Summarization": "https://python.langchain.com/docs/use_cases/summarization", "Extraction": "https://python.langchain.com/docs/use_cases/extraction", "Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis", "SQL": "https://python.langchain.com/docs/use_cases/sql", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Bash chain": "https://python.langchain.com/docs/use_cases/code_writing/llm_bash", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder", "How to create a custom Memory class": "https://python.langchain.com/docs/modules/memory/custom_memory", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory", "How to customize conversational memory": "https://python.langchain.com/docs/modules/memory/conversational_customization", "Conversation Knowledge Graph Memory": "https://python.langchain.com/docs/modules/memory/types/kg", "Logging to file": "https://python.langchain.com/docs/modules/callbacks/filecallbackhandler", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Datetime parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/datetime", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic", "Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr", "Select by n-gram overlap": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/ngram_overlap", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Template Formats": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/formats", "Connecting to a Feature Store": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router", "Transformation": "https://python.langchain.com/docs/modules/chains/foundational/transformation", "Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain", "Async API": "https://python.langchain.com/docs/modules/chains/how_to/async_chain"}, "ElasticSearchBM25Retriever": {"ElasticSearch BM25": "https://python.langchain.com/docs/integrations/retrievers/elastic_search_bm25", "Elasticsearch": "https://python.langchain.com/docs/integrations/providers/elasticsearch"}, "ZepChatMessageHistory": {"Zep": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore"}, "HumanMessage": {"Zep": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory", "AzureML Chat Online Endpoint": "https://python.langchain.com/docs/integrations/chat/azureml_chat_endpoint", "Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Azure": "https://python.langchain.com/docs/integrations/chat/azure_chat_openai", "PromptLayer ChatOpenAI": "https://python.langchain.com/docs/integrations/chat/promptlayer_chatopenai", "Anyscale": "https://python.langchain.com/docs/integrations/chat/anyscale", "Anthropic Functions": "https://python.langchain.com/docs/integrations/chat/anthropic_functions", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer", "Log10": "https://python.langchain.com/docs/integrations/providers/log10", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Multi-Agent Simulated Environment: Petting Zoo": "https://python.langchain.com/docs/use_cases/agent_simulations/petting_zoo", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Two-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/two_player_dnd", "Multi-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/multi_player_dnd", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Custom callback handlers": "https://python.langchain.com/docs/modules/callbacks/custom_callbacks", "Async callbacks": "https://python.langchain.com/docs/modules/callbacks/async_callbacks", "Tools as OpenAI Functions": "https://python.langchain.com/docs/modules/agents/tools/tools_as_openai_functions", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/how_to/openai_functions"}, "AIMessage": {"Zep": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory", "Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Multi-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/multi_player_dnd", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining"}, "ZepRetriever": {"Zep": "https://python.langchain.com/docs/integrations/providers/zep", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory"}, "VespaRetriever": {"Vespa": "https://python.langchain.com/docs/integrations/providers/vespa"}, "AmazonKendraRetriever": {"Amazon Kendra": "https://python.langchain.com/docs/integrations/retrievers/amazon_kendra_retriever"}, "TextLoader": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate", "Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann", "Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara", "Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis", "PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "Clarifai": "https://python.langchain.com/docs/integrations/vectorstores/clarifai", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn", "DocArrayHnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale", "ClickHouse Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse", "Qdrant": "https://python.langchain.com/docs/integrations/vectorstores/qdrant", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris", "AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch", "Pinecone": "https://python.langchain.com/docs/integrations/vectorstores/pinecone", "Azure Cognitive Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch", "Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra", "USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch", "Milvus": "https://python.langchain.com/docs/integrations/vectorstores/milvus", "ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo", "DocArrayInMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory", "pg_embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding", "FAISS": "https://python.langchain.com/docs/integrations/vectorstores/faiss", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/vectorstores/mongodb_atlas", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch", "Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Graph QA": "https://python.langchain.com/docs/use_cases/graph/graph_qa", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake", "Caching Embeddings": "https://python.langchain.com/docs/modules/data_connection/caching_embeddings", "Parent Document Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/parent_document_retriever", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Loading from LangChainHub": "https://python.langchain.com/docs/modules/chains/how_to/from_hub"}, "FAISS": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "FAISS": "https://python.langchain.com/docs/integrations/vectorstores/faiss", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Generative Agents in LangChain": "https://python.langchain.com/docs/use_cases/agent_simulations/characters", "Caching Embeddings": "https://python.langchain.com/docs/modules/data_connection/caching_embeddings", "Ensemble Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/ensemble", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval", "Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr"}, "OpenAI": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Google Serper API": "https://python.langchain.com/docs/integrations/tools/google_serper", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "OpenWeatherMap API": "https://python.langchain.com/docs/integrations/tools/openweathermap", "Search Tools": "https://python.langchain.com/docs/integrations/tools/search_tools", "Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "Gradio Tools": "https://python.langchain.com/docs/integrations/tools/gradio_tools", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator", "Entity Memory with SQLite storage": "https://python.langchain.com/docs/integrations/memory/entity_memory_with_sqlite", "Streamlit Chat Message History": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/.ipynb_checkpoints/streamlit-checkpoint", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/providers/sagemaker_tracking", "OpenAI": "https://python.langchain.com/docs/integrations/llms/openai", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "Helicone": "https://python.langchain.com/docs/integrations/providers/helicone", "Shale Protocol": "https://python.langchain.com/docs/integrations/providers/shaleprotocol", "WhyLabs": "https://python.langchain.com/docs/integrations/providers/whylabs_profiling", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking", "Ray Serve": "https://python.langchain.com/docs/integrations/providers/ray_serve", "Log, Trace, and Monitor Langchain LLM Calls": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation", "CSV Agent": "https://python.langchain.com/docs/integrations/toolkits/csv", "Xorbits Agent": "https://python.langchain.com/docs/integrations/toolkits/xorbits", "Jira": "https://python.langchain.com/docs/integrations/toolkits/jira", "Spark Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/spark", "Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "Pandas Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/pandas", "OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Extraction": "https://python.langchain.com/docs/use_cases/extraction", "Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis", "SQL": "https://python.langchain.com/docs/use_cases/sql", "HuggingGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/hugginggpt", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Graph QA": "https://python.langchain.com/docs/use_cases/graph/graph_qa", "Tree of Thought (ToT) example": "https://python.langchain.com/docs/use_cases/graph/tot", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Bash chain": "https://python.langchain.com/docs/use_cases/code_writing/llm_bash", "LLM Symbolic Math ": "https://python.langchain.com/docs/use_cases/code_writing/llm_symbolic_math", "Summarization checker chain": "https://python.langchain.com/docs/use_cases/self_check/llm_summarization_checker", "Self-checking chain": "https://python.langchain.com/docs/use_cases/self_check/llm_checker", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory", "How to customize conversational memory": "https://python.langchain.com/docs/modules/memory/conversational_customization", "Conversation Knowledge Graph Memory": "https://python.langchain.com/docs/modules/memory/types/kg", "ConversationTokenBufferMemory": "https://python.langchain.com/docs/modules/memory/types/token_buffer", "ConversationSummaryBufferMemory": "https://python.langchain.com/docs/modules/memory/types/summary_buffer", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Token counting": "https://python.langchain.com/docs/modules/callbacks/token_counting", "Logging to file": "https://python.langchain.com/docs/modules/callbacks/filecallbackhandler", "Multi-Input Tools": "https://python.langchain.com/docs/modules/agents/tools/multi_input_tool", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Tool Input Schema": "https://python.langchain.com/docs/modules/agents/tools/tool_input_validation", "Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Access intermediate steps": "https://python.langchain.com/docs/modules/agents/how_to/intermediate_steps", "Timeouts for agents": "https://python.langchain.com/docs/modules/agents/how_to/max_time_limit", "Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only", "Cap the max number of iterations": "https://python.langchain.com/docs/modules/agents/how_to/max_iterations", "Async API": "https://python.langchain.com/docs/modules/chains/how_to/async_chain", "Tracking token usage": "https://python.langchain.com/docs/modules/model_io/models/llms/token_usage_tracking", "Serialization": "https://python.langchain.com/docs/modules/model_io/models/llms/llm_serialization", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Datetime parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/datetime", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router", "Transformation": "https://python.langchain.com/docs/modules/chains/foundational/transformation"}, "ContextualCompressionRetriever": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever"}, "CohereRerank": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere"}, "RetrievalQA": {"Cohere Reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Ollama": "https://python.langchain.com/docs/integrations/llms/ollama", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore"}, "KNNRetriever": {"kNN": "https://python.langchain.com/docs/integrations/retrievers/knn"}, "WikipediaRetriever": {"Wikipedia": "https://python.langchain.com/docs/integrations/providers/wikipedia"}, "ConversationalRetrievalChain": {"Wikipedia": "https://python.langchain.com/docs/integrations/retrievers/wikipedia", "Arxiv": "https://python.langchain.com/docs/integrations/retrievers/arxiv", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake"}, "MetalRetriever": {"Metal": "https://python.langchain.com/docs/integrations/providers/metal"}, "CSVLoader": {"ChatGPT Plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin", "CSV": "https://python.langchain.com/docs/integrations/document_loaders/csv"}, "Document": {"ChatGPT Plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin", "Weaviate Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/weaviate-hybrid", "BM25": "https://python.langchain.com/docs/integrations/retrievers/bm25", "TF-IDF": "https://python.langchain.com/docs/integrations/retrievers/tf_idf", "Apify": "https://python.langchain.com/docs/integrations/tools/apify", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation", "PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy", "pg_embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding", "FAISS": "https://python.langchain.com/docs/integrations/vectorstores/faiss", "Nuclia Understanding API document transformer": "https://python.langchain.com/docs/integrations/document_transformers/nuclia_transformer", "OpenAI Functions Metadata Tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger", "Doctran Extract Properties": "https://python.langchain.com/docs/integrations/document_transformers/doctran_extract_properties", "Doctran Interrogate Documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_interrogate_document", "Doctran Translate Documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_translate_document", "TensorFlow Datasets": "https://python.langchain.com/docs/integrations/document_loaders/tensorflow_datasets", "Airbyte Salesforce": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_salesforce", "Airbyte CDK": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_cdk", "Airbyte Stripe": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_stripe", "Copy Paste": "https://python.langchain.com/docs/integrations/document_loaders/copypaste", "Airbyte Typeform": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_typeform", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Airbyte Hubspot": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_hubspot", "Airbyte Gong": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_gong", "Airbyte Shopify": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_shopify", "Airbyte Zendesk Support": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_zendesk_support", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "ChatGPTPluginRetriever": {"ChatGPT Plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai"}, "GoogleCloudEnterpriseSearchRetriever": {"Google Cloud Enterprise Search": "https://python.langchain.com/docs/integrations/retrievers/google_cloud_enterprise_search"}, "DocArrayRetriever": {"DocArray Retriever": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever"}, "SVMRetriever": {"SVM": "https://python.langchain.com/docs/integrations/retrievers/svm", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index"}, "PineconeHybridSearchRetriever": {"Pinecone Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/pinecone_hybrid_search"}, "PubMedRetriever": {"PubMed": "https://python.langchain.com/docs/integrations/providers/pubmed"}, "WeaviateHybridSearchRetriever": {"Weaviate Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/weaviate-hybrid"}, "ArxivRetriever": {"Arxiv": "https://python.langchain.com/docs/integrations/providers/arxiv"}, "BM25Retriever": {"BM25": "https://python.langchain.com/docs/integrations/retrievers/bm25", "Ensemble Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/ensemble"}, "AzureCognitiveSearchRetriever": {"Azure Cognitive Search": "https://python.langchain.com/docs/integrations/providers/azure_cognitive_search_"}, "ChaindeskRetriever": {"Chaindesk": "https://python.langchain.com/docs/integrations/providers/chaindesk"}, "MergerRetriever": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever"}, "EmbeddingsRedundantFilter": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever"}, "EmbeddingsClusteringFilter": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever"}, "DocumentCompressorPipeline": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever"}, "LongContextReorder": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder"}, "TFIDFRetriever": {"TF-IDF": "https://python.langchain.com/docs/integrations/retrievers/tf_idf"}, "load_tools": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "AWS Lambda API": "https://python.langchain.com/docs/integrations/tools/awslambda", "Requests": "https://python.langchain.com/docs/integrations/tools/requests", "OpenWeatherMap API": "https://python.langchain.com/docs/integrations/tools/openweathermap", "Search Tools": "https://python.langchain.com/docs/integrations/tools/search_tools", "ArXiv API Tool": "https://python.langchain.com/docs/integrations/tools/arxiv", "GraphQL tool": "https://python.langchain.com/docs/integrations/tools/graphql", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/.ipynb_checkpoints/streamlit-checkpoint", "SerpAPI": "https://python.langchain.com/docs/integrations/providers/serpapi", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Golden": "https://python.langchain.com/docs/integrations/providers/golden", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/providers/sagemaker_tracking", "Wolfram Alpha": "https://python.langchain.com/docs/integrations/providers/wolfram_alpha", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "DataForSEO": "https://python.langchain.com/docs/integrations/providers/dataforseo", "SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/providers/openweathermap", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking", "Google Search": "https://python.langchain.com/docs/integrations/providers/google_search", "Log, Trace, and Monitor Langchain LLM Calls": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway_example", "Debugging": "https://python.langchain.com/docs/guides/debugging", "LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval", "Access intermediate steps": "https://python.langchain.com/docs/modules/agents/how_to/intermediate_steps", "Timeouts for agents": "https://python.langchain.com/docs/modules/agents/how_to/max_time_limit", "Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only", "Cap the max number of iterations": "https://python.langchain.com/docs/modules/agents/how_to/max_iterations", "Async API": "https://python.langchain.com/docs/modules/agents/how_to/async_agent", "Human input Chat Model": "https://python.langchain.com/docs/modules/model_io/models/chat/human_input_chat_model", "Fake LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/fake_llm", "Tracking token usage": "https://python.langchain.com/docs/modules/model_io/models/llms/token_usage_tracking", "Human input LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/human_input_llm"}, "initialize_agent": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins", "Google Serper API": "https://python.langchain.com/docs/integrations/tools/google_serper", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "AWS Lambda API": "https://python.langchain.com/docs/integrations/tools/awslambda", "OpenWeatherMap API": "https://python.langchain.com/docs/integrations/tools/openweathermap", "Search Tools": "https://python.langchain.com/docs/integrations/tools/search_tools", "Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "ArXiv API Tool": "https://python.langchain.com/docs/integrations/tools/arxiv", "Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "GraphQL tool": "https://python.langchain.com/docs/integrations/tools/graphql", "Gradio Tools": "https://python.langchain.com/docs/integrations/tools/gradio_tools", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator", "Shell Tool": "https://python.langchain.com/docs/integrations/tools/bash", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory", "Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/.ipynb_checkpoints/streamlit-checkpoint", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/providers/sagemaker_tracking", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking", "Log, Trace, and Monitor Langchain LLM Calls": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index", "Jira": "https://python.langchain.com/docs/integrations/toolkits/jira", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/toolkits/azure_cognitive_services", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Gmail Toolkit": "https://python.langchain.com/docs/integrations/toolkits/gmail", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/toolkits/office365", "MultiOn Toolkit": "https://python.langchain.com/docs/integrations/toolkits/multion", "Amadeus Toolkit": "https://python.langchain.com/docs/integrations/toolkits/amadeus", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway_example", "Debugging": "https://python.langchain.com/docs/guides/debugging", "LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough", "Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "Multi-modal outputs: Image & Text": "https://python.langchain.com/docs/use_cases/multi_modal/image_agent", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Multi-Input Tools": "https://python.langchain.com/docs/modules/agents/tools/multi_input_tool", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Tool Input Schema": "https://python.langchain.com/docs/modules/agents/tools/tool_input_validation", "Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval", "Self ask with search": "https://python.langchain.com/docs/modules/agents/agent_types/self_ask_with_search", "ReAct document store": "https://python.langchain.com/docs/modules/agents/agent_types/react_docstore", "OpenAI Multi Functions Agent": "https://python.langchain.com/docs/modules/agents/agent_types/openai_multi_functions_agent", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Access intermediate steps": "https://python.langchain.com/docs/modules/agents/how_to/intermediate_steps", "Handle parsing errors": "https://python.langchain.com/docs/modules/agents/how_to/handle_parsing_errors", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Timeouts for agents": "https://python.langchain.com/docs/modules/agents/how_to/max_time_limit", "Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions", "Cap the max number of iterations": "https://python.langchain.com/docs/modules/agents/how_to/max_iterations", "Custom functions with OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/custom-functions-with-openai-functions-agent", "Async API": "https://python.langchain.com/docs/modules/agents/how_to/async_agent", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions", "Human input Chat Model": "https://python.langchain.com/docs/modules/model_io/models/chat/human_input_chat_model", "Fake LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/fake_llm", "Tracking token usage": "https://python.langchain.com/docs/modules/model_io/models/llms/token_usage_tracking", "Human input LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/human_input_llm"}, "AgentType": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins", "Google Serper API": "https://python.langchain.com/docs/integrations/tools/google_serper", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "AWS Lambda API": "https://python.langchain.com/docs/integrations/tools/awslambda", "OpenWeatherMap API": "https://python.langchain.com/docs/integrations/tools/openweathermap", "Search Tools": "https://python.langchain.com/docs/integrations/tools/search_tools", "Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "ArXiv API Tool": "https://python.langchain.com/docs/integrations/tools/arxiv", "Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "GraphQL tool": "https://python.langchain.com/docs/integrations/tools/graphql", "Shell Tool": "https://python.langchain.com/docs/integrations/tools/bash", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory", "Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/.ipynb_checkpoints/streamlit-checkpoint", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking", "Log, Trace, and Monitor Langchain LLM Calls": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index", "CSV Agent": "https://python.langchain.com/docs/integrations/toolkits/csv", "Jira": "https://python.langchain.com/docs/integrations/toolkits/jira", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python", "Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/toolkits/azure_cognitive_services", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Gmail Toolkit": "https://python.langchain.com/docs/integrations/toolkits/gmail", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/toolkits/office365", "Pandas Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/pandas", "MultiOn Toolkit": "https://python.langchain.com/docs/integrations/toolkits/multion", "Amadeus Toolkit": "https://python.langchain.com/docs/integrations/toolkits/amadeus", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway_example", "Debugging": "https://python.langchain.com/docs/guides/debugging", "LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough", "Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "SQL": "https://python.langchain.com/docs/use_cases/sql", "Multi-modal outputs: Image & Text": "https://python.langchain.com/docs/use_cases/multi_modal/image_agent", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Multi-Input Tools": "https://python.langchain.com/docs/modules/agents/tools/multi_input_tool", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Tool Input Schema": "https://python.langchain.com/docs/modules/agents/tools/tool_input_validation", "Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval", "Self ask with search": "https://python.langchain.com/docs/modules/agents/agent_types/self_ask_with_search", "ReAct document store": "https://python.langchain.com/docs/modules/agents/agent_types/react_docstore", "OpenAI Multi Functions Agent": "https://python.langchain.com/docs/modules/agents/agent_types/openai_multi_functions_agent", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Access intermediate steps": "https://python.langchain.com/docs/modules/agents/how_to/intermediate_steps", "Handle parsing errors": "https://python.langchain.com/docs/modules/agents/how_to/handle_parsing_errors", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Timeouts for agents": "https://python.langchain.com/docs/modules/agents/how_to/max_time_limit", "Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions", "Cap the max number of iterations": "https://python.langchain.com/docs/modules/agents/how_to/max_iterations", "Custom functions with OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/custom-functions-with-openai-functions-agent", "Async API": "https://python.langchain.com/docs/modules/agents/how_to/async_agent", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions", "Human input Chat Model": "https://python.langchain.com/docs/modules/model_io/models/chat/human_input_chat_model", "Fake LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/fake_llm", "Tracking token usage": "https://python.langchain.com/docs/modules/model_io/models/llms/token_usage_tracking", "Human input LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/human_input_llm"}, "AIPluginTool": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins"}, "DataForSeoAPIWrapper": {"DataForSeo API Wrapper": "https://python.langchain.com/docs/integrations/tools/dataforseo", "DataForSEO": "https://python.langchain.com/docs/integrations/providers/dataforseo"}, "Tool": {"DataForSeo API Wrapper": "https://python.langchain.com/docs/integrations/tools/dataforseo", "Google Serper API": "https://python.langchain.com/docs/integrations/tools/google_serper", "SerpAPI": "https://python.langchain.com/docs/integrations/tools/serpapi", "Google Search": "https://python.langchain.com/docs/integrations/tools/google_search", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory", "Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/providers/sagemaker_tracking", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db", "How to add Memory to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory", "Multi-Input Tools": "https://python.langchain.com/docs/modules/agents/tools/multi_input_tool", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Self ask with search": "https://python.langchain.com/docs/modules/agents/agent_types/self_ask_with_search", "ReAct document store": "https://python.langchain.com/docs/modules/agents/agent_types/react_docstore", "OpenAI Multi Functions Agent": "https://python.langchain.com/docs/modules/agents/agent_types/openai_multi_functions_agent", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Custom MRKL agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent", "Handle parsing errors": "https://python.langchain.com/docs/modules/agents/how_to/handle_parsing_errors", "Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools", "Custom multi-action agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_multi_action_agent", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Timeouts for agents": "https://python.langchain.com/docs/modules/agents/how_to/max_time_limit", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions", "Cap the max number of iterations": "https://python.langchain.com/docs/modules/agents/how_to/max_iterations", "Custom agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "SearxSearchWrapper": {"SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx"}, "GoogleSerperAPIWrapper": {"Google Serper API": "https://python.langchain.com/docs/integrations/tools/google_serper", "Google Serper": "https://python.langchain.com/docs/integrations/providers/google_serper", "Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare"}, "GooglePlacesTool": {"Google Places": "https://python.langchain.com/docs/integrations/tools/google_places"}, "HumanInputRun": {"Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "NucliaUnderstandingAPI": {"Nuclia Understanding API tool": "https://python.langchain.com/docs/integrations/tools/nuclia", "Nuclia Understanding API document transformer": "https://python.langchain.com/docs/integrations/document_transformers/nuclia_transformer", "Nuclia Understanding API document loader": "https://python.langchain.com/docs/integrations/document_loaders/nuclia"}, "TwilioAPIWrapper": {"Twilio": "https://python.langchain.com/docs/integrations/tools/twilio"}, "IFTTTWebhook": {"IFTTT WebHooks": "https://python.langchain.com/docs/integrations/tools/ifttt"}, "WikipediaQueryRun": {"Wikipedia": "https://python.langchain.com/docs/integrations/tools/wikipedia"}, "WikipediaAPIWrapper": {"Wikipedia": "https://python.langchain.com/docs/integrations/tools/wikipedia", "Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory"}, "TextRequestsWrapper": {"Requests": "https://python.langchain.com/docs/integrations/tools/requests", "JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json", "OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi", "Tool Input Schema": "https://python.langchain.com/docs/modules/agents/tools/tool_input_validation"}, "OpenWeatherMapAPIWrapper": {"OpenWeatherMap API": "https://python.langchain.com/docs/integrations/tools/openweathermap", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/providers/openweathermap"}, "PubmedQueryRun": {"PubMed Tool": "https://python.langchain.com/docs/integrations/tools/pubmed"}, "YouTubeSearchTool": {"YouTubeSearchTool": "https://python.langchain.com/docs/integrations/tools/youtube"}, "VectorstoreIndexCreator": {"Apify": "https://python.langchain.com/docs/integrations/tools/apify", "HuggingFace dataset": "https://python.langchain.com/docs/integrations/document_loaders/hugging_face_dataset", "Spreedly": "https://python.langchain.com/docs/integrations/document_loaders/spreedly", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset", "Iugu": "https://python.langchain.com/docs/integrations/document_loaders/iugu", "Stripe": "https://python.langchain.com/docs/integrations/document_loaders/stripe", "Modern Treasury": "https://python.langchain.com/docs/integrations/document_loaders/modern_treasury", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index"}, "ZapierToolkit": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier"}, "ZapierNLAWrapper": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier"}, "LLMChain": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator", "Streamlit Chat Message History": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/providers/sagemaker_tracking", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation", "Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai", "AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example", "Custom Trajectory Evaluator": "https://python.langchain.com/docs/guides/evaluation/trajectory/custom", "Custom Pairwise Evaluator": "https://python.langchain.com/docs/guides/evaluation/comparison/custom", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Summarization": "https://python.langchain.com/docs/use_cases/summarization", "Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Logging to file": "https://python.langchain.com/docs/modules/callbacks/filecallbackhandler", "XML Agent": "https://python.langchain.com/docs/modules/agents/agent_types/xml_agent", "Datetime parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/datetime", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Connecting to a Feature Store": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router", "Transformation": "https://python.langchain.com/docs/modules/chains/foundational/transformation", "Async API": "https://python.langchain.com/docs/modules/chains/how_to/async_chain"}, "TransformChain": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "Transformation": "https://python.langchain.com/docs/modules/chains/foundational/transformation"}, "SimpleSequentialChain": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/providers/sagemaker_tracking", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "Baseten": "https://python.langchain.com/docs/integrations/llms/baseten", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate", "Transformation": "https://python.langchain.com/docs/modules/chains/foundational/transformation"}, "ZapierNLARunAction": {"Zapier Natural Language Actions API": "https://python.langchain.com/docs/integrations/tools/zapier"}, "GoldenQueryAPIWrapper": {"Golden Query": "https://python.langchain.com/docs/integrations/tools/golden_query", "Golden": "https://python.langchain.com/docs/integrations/providers/golden"}, "ArxivAPIWrapper": {"ArXiv API Tool": "https://python.langchain.com/docs/integrations/tools/arxiv"}, "tool": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "JSONFormer": "https://python.langchain.com/docs/integrations/llms/jsonformer_experimental", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "XML Agent": "https://python.langchain.com/docs/modules/agents/agent_types/xml_agent"}, "OpenAIFunctionsAgent": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents"}, "SystemMessage": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Anyscale": "https://python.langchain.com/docs/integrations/chat/anyscale", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Multi-Agent Simulated Environment: Petting Zoo": "https://python.langchain.com/docs/use_cases/agent_simulations/petting_zoo", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Two-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/two_player_dnd", "Multi-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/multi_player_dnd", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/how_to/openai_functions"}, "AgentExecutor": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "Jina": "https://python.langchain.com/docs/integrations/providers/jina", "PowerBI Dataset Agent": "https://python.langchain.com/docs/integrations/toolkits/powerbi", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json", "SQL": "https://python.langchain.com/docs/use_cases/sql", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db", "How to add Memory to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory", "XML Agent": "https://python.langchain.com/docs/modules/agents/agent_types/xml_agent", "Custom MRKL agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent", "Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools", "Custom multi-action agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_multi_action_agent", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Custom agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "MetaphorSearchAPIWrapper": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search"}, "PlayWrightBrowserToolkit": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright"}, "create_async_playwright_browser": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright"}, "MetaphorSearchResults": {"Metaphor Search": "https://python.langchain.com/docs/integrations/tools/metaphor_search"}, "SerpAPIWrapper": {"SerpAPI": "https://python.langchain.com/docs/integrations/providers/serpapi", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt"}, "GraphQLAPIWrapper": {"GraphQL tool": "https://python.langchain.com/docs/integrations/tools/graphql"}, "DuckDuckGoSearchRun": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg", "Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "DuckDuckGoSearchResults": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg"}, "DuckDuckGoSearchAPIWrapper": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg"}, "ConversationBufferMemory": {"Gradio Tools": "https://python.langchain.com/docs/integrations/tools/gradio_tools", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain", "Streamlit Chat Message History": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history", "Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Bedrock": "https://python.langchain.com/docs/integrations/llms/bedrock", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory", "How to customize conversational memory": "https://python.langchain.com/docs/modules/memory/conversational_customization", "How to add Memory to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory", "Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions"}, "SceneXplainTool": {"SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain"}, "WolframAlphaAPIWrapper": {"Wolfram Alpha": "https://python.langchain.com/docs/integrations/providers/wolfram_alpha"}, "load_huggingface_tool": {"Requires transformers>=4.29.0 and huggingface_hub>=0.14.1": "https://python.langchain.com/docs/integrations/tools/huggingface_tools"}, "GoogleSearchAPIWrapper": {"Google Search": "https://python.langchain.com/docs/integrations/providers/google_search", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db", "How to add Memory to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory", "Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools"}, "BingSearchAPIWrapper": {"Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search"}, "DallEAPIWrapper": {"Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator"}, "ShellTool": {"Shell Tool": "https://python.langchain.com/docs/integrations/tools/bash", "Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval"}, "ReadFileTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "CopyFileTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem"}, "DeleteFileTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem"}, "MoveFileTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem", "Tools as OpenAI Functions": "https://python.langchain.com/docs/modules/agents/tools/tools_as_openai_functions"}, "WriteFileTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "ListDirectoryTool": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem"}, "FileManagementToolkit": {"File System Tools": "https://python.langchain.com/docs/integrations/tools/filesystem"}, "BraveSearch": {"Brave Search": "https://python.langchain.com/docs/integrations/providers/brave_search"}, "RedisChatMessageHistory": {"Redis Chat Message History": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db"}, "ZepMemory": {"Zep Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory"}, "ConversationChain": {"Entity Memory with SQLite storage": "https://python.langchain.com/docs/integrations/memory/entity_memory_with_sqlite", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Bedrock": "https://python.langchain.com/docs/integrations/llms/bedrock", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory", "How to customize conversational memory": "https://python.langchain.com/docs/modules/memory/conversational_customization", "Conversation Knowledge Graph Memory": "https://python.langchain.com/docs/modules/memory/types/kg", "ConversationTokenBufferMemory": "https://python.langchain.com/docs/modules/memory/types/token_buffer", "ConversationSummaryBufferMemory": "https://python.langchain.com/docs/modules/memory/types/summary_buffer", "Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "ConversationEntityMemory": {"Entity Memory with SQLite storage": "https://python.langchain.com/docs/integrations/memory/entity_memory_with_sqlite"}, "SQLiteEntityStore": {"Entity Memory with SQLite storage": "https://python.langchain.com/docs/integrations/memory/entity_memory_with_sqlite"}, "ENTITY_MEMORY_CONVERSATION_TEMPLATE": {"Entity Memory with SQLite storage": "https://python.langchain.com/docs/integrations/memory/entity_memory_with_sqlite"}, "PostgresChatMessageHistory": {"Postgres Chat Message History": "https://python.langchain.com/docs/integrations/memory/postgres_chat_message_history"}, "MomentoChatMessageHistory": {"Momento Chat Message History": "https://python.langchain.com/docs/integrations/memory/momento_chat_message_history"}, "MongoDBChatMessageHistory": {"Mongodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/mongodb_chat_message_history"}, "CassandraChatMessageHistory": {"Cassandra Chat Message History": "https://python.langchain.com/docs/integrations/memory/cassandra_chat_message_history", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra"}, "MotorheadMemory": {"Mot\u00f6rhead Memory": "https://python.langchain.com/docs/integrations/memory/motorhead_memory", "Mot\u00f6rhead Memory (Managed)": "https://python.langchain.com/docs/integrations/memory/motorhead_memory_managed"}, "StreamlitChatMessageHistory": {"Streamlit Chat Message History": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history"}, "DynamoDBChatMessageHistory": {"Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history"}, "PythonREPL": {"Dynamodb Chat Message History": "https://python.langchain.com/docs/integrations/memory/dynamodb_chat_message_history", "Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook"}, "RocksetChatMessageHistory": {"Rockset Chat Message History": "https://python.langchain.com/docs/integrations/memory/rockset_chat_message_history"}, "AzureMLChatOnlineEndpoint": {"AzureML Chat Online Endpoint": "https://python.langchain.com/docs/integrations/chat/azureml_chat_endpoint"}, "LlamaContentFormatter": {"AzureML Chat Online Endpoint": "https://python.langchain.com/docs/integrations/chat/azureml_chat_endpoint"}, "ChatAnthropic": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "Log10": "https://python.langchain.com/docs/integrations/providers/log10", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "Custom Pairwise Evaluator": "https://python.langchain.com/docs/guides/evaluation/comparison/custom", "Pairwise String Comparison": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_string", "Criteria Evaluation": "https://python.langchain.com/docs/guides/evaluation/string/criteria_eval_chain", "XML Agent": "https://python.langchain.com/docs/modules/agents/agent_types/xml_agent", "Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat"}, "ChatPromptTemplate": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "OpenAI Functions Metadata Tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Fireworks": "https://python.langchain.com/docs/integrations/llms/Fireworks", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "Interface": "https://python.langchain.com/docs/guides/expression_language/interface", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Extraction": "https://python.langchain.com/docs/use_cases/extraction", "Tagging": "https://python.langchain.com/docs/use_cases/tagging", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic", "Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/how_to/openai_functions"}, "SystemMessagePromptTemplate": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing"}, "AIMessagePromptTemplate": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma"}, "HumanMessagePromptTemplate": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "OpenAI": "https://python.langchain.com/docs/integrations/chat/openai", "Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat", "Context": "https://python.langchain.com/docs/integrations/callbacks/context", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Fireworks": "https://python.langchain.com/docs/integrations/llms/Fireworks", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Extraction": "https://python.langchain.com/docs/use_cases/extraction", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic", "Prompt Pipelining": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompts_pipelining", "Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/how_to/openai_functions"}, "CallbackManager": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "Ollama": "https://python.langchain.com/docs/integrations/llms/ollama", "Llama.cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp", "Titan Takeoff": "https://python.langchain.com/docs/integrations/llms/titan_takeoff", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "StreamingStdOutCallbackHandler": {"Anthropic": "https://python.langchain.com/docs/integrations/chat/anthropic", "GPT4All": "https://python.langchain.com/docs/integrations/llms/gpt4all", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Ollama": "https://python.langchain.com/docs/integrations/llms/ollama", "Llama.cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp", "Titan Takeoff": "https://python.langchain.com/docs/integrations/llms/titan_takeoff", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai", "C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers", "Huggingface TextGen Inference": "https://python.langchain.com/docs/integrations/llms/huggingface_textgen_inference", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "create_tagging_chain": {"Llama API": "https://python.langchain.com/docs/integrations/chat/llama_api", "Anthropic Functions": "https://python.langchain.com/docs/integrations/chat/anthropic_functions", "Tagging": "https://python.langchain.com/docs/use_cases/tagging"}, "ChatVertexAI": {"Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm"}, "JinaChat": {"JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat"}, "AzureChatOpenAI": {"Azure": "https://python.langchain.com/docs/integrations/chat/azure_chat_openai", "Azure OpenAI": "https://python.langchain.com/docs/integrations/providers/azure_openai"}, "get_openai_callback": {"Azure": "https://python.langchain.com/docs/integrations/chat/azure_chat_openai", "Token counting": "https://python.langchain.com/docs/modules/callbacks/token_counting", "Tracking token usage": "https://python.langchain.com/docs/modules/model_io/models/llms/token_usage_tracking"}, "PromptLayerChatOpenAI": {"PromptLayer ChatOpenAI": "https://python.langchain.com/docs/integrations/chat/promptlayer_chatopenai"}, "ChatAnyscale": {"Anyscale": "https://python.langchain.com/docs/integrations/chat/anyscale"}, "create_extraction_chain": {"Anthropic Functions": "https://python.langchain.com/docs/integrations/chat/anthropic_functions", "Extraction": "https://python.langchain.com/docs/use_cases/extraction"}, "ContextCallbackHandler": {"Context": "https://python.langchain.com/docs/integrations/callbacks/context"}, "ArgillaCallbackHandler": {"Argilla": "https://python.langchain.com/docs/integrations/providers/argilla"}, "StdOutCallbackHandler": {"Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking", "Async API": "https://python.langchain.com/docs/modules/agents/how_to/async_agent", "Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "PromptLayerCallbackHandler": {"PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer"}, "GPT4All": {"PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer", "GPT4All": "https://python.langchain.com/docs/integrations/llms/gpt4all", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa"}, "StreamlitCallbackHandler": {"Streamlit": "https://python.langchain.com/docs/integrations/callbacks/.ipynb_checkpoints/streamlit-checkpoint", "GPT4All": "https://python.langchain.com/docs/integrations/providers/gpt4all"}, "FigmaFileLoader": {"Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma"}, "AzureOpenAI": {"Azure OpenAI": "https://python.langchain.com/docs/integrations/llms/azure_openai_example", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai"}, "MyScale": {"MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query"}, "Baseten": {"Baseten": "https://python.langchain.com/docs/integrations/llms/baseten"}, "WeatherDataLoader": {"Weather": "https://python.langchain.com/docs/integrations/document_loaders/weather"}, "Tair": {"Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair"}, "UnstructuredWordDocumentLoader": {"Microsoft Word": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_word"}, "CollegeConfidentialLoader": {"College Confidential": "https://python.langchain.com/docs/integrations/document_loaders/college_confidential"}, "RWKV": {"RWKV-4": "https://python.langchain.com/docs/integrations/providers/rwkv"}, "GoogleDriveLoader": {"Google Drive": "https://python.langchain.com/docs/integrations/document_loaders/google_drive"}, "Fireworks": {"Fireworks": "https://python.langchain.com/docs/integrations/llms/Fireworks"}, "AmazonAPIGateway": {"Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway_example"}, "UnstructuredPowerPointLoader": {"Microsoft PowerPoint": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_powerpoint"}, "CometCallbackHandler": {"Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking"}, "CTransformers": {"C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers"}, "BiliBiliLoader": {"BiliBili": "https://python.langchain.com/docs/integrations/document_loaders/bilibili"}, "DiffbotLoader": {"Diffbot": "https://python.langchain.com/docs/integrations/document_loaders/diffbot"}, "AimCallbackHandler": {"Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking"}, "ModernTreasuryLoader": {"Modern Treasury": "https://python.langchain.com/docs/integrations/document_loaders/modern_treasury"}, "FacebookChatLoader": {"Facebook Chat": "https://python.langchain.com/docs/integrations/document_loaders/facebook_chat"}, "Banana": {"Banana": "https://python.langchain.com/docs/integrations/llms/banana"}, "HuggingFacePipeline": {"Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface", "RELLM": "https://python.langchain.com/docs/integrations/llms/rellm_experimental", "JSONFormer": "https://python.langchain.com/docs/integrations/llms/jsonformer_experimental"}, "HuggingFaceHub": {"Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface"}, "HuggingFaceHubEmbeddings": {"Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface"}, "CharacterTextSplitter": {"Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation", "Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate", "Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann", "Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara", "Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis", "PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "Clarifai": "https://python.langchain.com/docs/integrations/vectorstores/clarifai", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn", "DocArrayHnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale", "ClickHouse Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse", "Qdrant": "https://python.langchain.com/docs/integrations/vectorstores/qdrant", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris", "AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch", "Pinecone": "https://python.langchain.com/docs/integrations/vectorstores/pinecone", "Azure Cognitive Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch", "Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra", "USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch", "Milvus": "https://python.langchain.com/docs/integrations/vectorstores/milvus", "ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo", "DocArrayInMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory", "pg_embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding", "FAISS": "https://python.langchain.com/docs/integrations/vectorstores/faiss", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/vectorstores/mongodb_atlas", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic", "Manifest": "https://python.langchain.com/docs/integrations/llms/manifest", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching", "Summarization": "https://python.langchain.com/docs/use_cases/summarization", "Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Caching Embeddings": "https://python.langchain.com/docs/modules/data_connection/caching_embeddings", "Split by tokens ": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/split_by_token", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Loading from LangChainHub": "https://python.langchain.com/docs/modules/chains/how_to/from_hub"}, "DocugamiLoader": {"Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami"}, "GutenbergLoader": {"Gutenberg": "https://python.langchain.com/docs/integrations/document_loaders/gutenberg"}, "AzureBlobStorageContainerLoader": {"Azure Blob Storage": "https://python.langchain.com/docs/integrations/providers/azure_blob_storage", "Azure Blob Storage Container": "https://python.langchain.com/docs/integrations/document_loaders/azure_blob_storage_container"}, "AzureBlobStorageFileLoader": {"Azure Blob Storage": "https://python.langchain.com/docs/integrations/providers/azure_blob_storage", "Azure Blob Storage File": "https://python.langchain.com/docs/integrations/document_loaders/azure_blob_storage_file"}, "WikipediaLoader": {"Wikipedia": "https://python.langchain.com/docs/integrations/document_loaders/wikipedia"}, "ConfluenceLoader": {"Confluence": "https://python.langchain.com/docs/integrations/document_loaders/confluence"}, "Predibase": {"Predibase": "https://python.langchain.com/docs/integrations/llms/predibase"}, "Beam": {"Beam": "https://python.langchain.com/docs/integrations/llms/beam"}, "GrobidParser": {"Grobid": "https://python.langchain.com/docs/integrations/document_loaders/grobid"}, "GenericLoader": {"Grobid": "https://python.langchain.com/docs/integrations/document_loaders/grobid", "Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio", "Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code"}, "Typesense": {"Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense"}, "Hologres": {"Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres"}, "AI21": {"AI21 Labs": "https://python.langchain.com/docs/integrations/providers/ai21", "AI21": "https://python.langchain.com/docs/integrations/llms/ai21"}, "WandbCallbackHandler": {"Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking"}, "ObsidianLoader": {"Obsidian": "https://python.langchain.com/docs/integrations/document_loaders/obsidian"}, "create_sql_agent": {"CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "SQL": "https://python.langchain.com/docs/use_cases/sql"}, "SQLDatabaseToolkit": {"CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "SQL": "https://python.langchain.com/docs/use_cases/sql", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions"}, "SageMakerCallbackHandler": {"SageMaker Tracking": "https://python.langchain.com/docs/integrations/providers/sagemaker_tracking"}, "OpenAIModerationChain": {"OpenAI": "https://python.langchain.com/docs/integrations/providers/openai", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook"}, "ChatGPTLoader": {"OpenAI": "https://python.langchain.com/docs/integrations/providers/openai", "ChatGPT Data": "https://python.langchain.com/docs/integrations/document_loaders/chatgpt_loader"}, "Nebula": {"Nebula": "https://python.langchain.com/docs/integrations/providers/symblai_nebula"}, "AZLyricsLoader": {"AZLyrics": "https://python.langchain.com/docs/integrations/document_loaders/azlyrics"}, "ToMarkdownLoader": {"2Markdown": "https://python.langchain.com/docs/integrations/document_loaders/tomarkdown"}, "GitLoader": {"Git": "https://python.langchain.com/docs/integrations/document_loaders/git"}, "InfinoCallbackHandler": {"Infino": "https://python.langchain.com/docs/integrations/providers/infino"}, "MlflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway"}, "MlflowAIGatewayEmbeddings": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway"}, "ChatMLflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway"}, "SingleStoreDB": {"SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb"}, "Tigris": {"Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris"}, "Bedrock": {"Bedrock": "https://python.langchain.com/docs/integrations/llms/bedrock"}, "S3DirectoryLoader": {"AWS S3 Directory": "https://python.langchain.com/docs/integrations/document_loaders/aws_s3_directory"}, "S3FileLoader": {"AWS S3 Directory": "https://python.langchain.com/docs/integrations/providers/aws_s3", "AWS S3 File": "https://python.langchain.com/docs/integrations/document_loaders/aws_s3_file"}, "SQLDatabase": {"Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "SQL": "https://python.langchain.com/docs/use_cases/sql"}, "Weaviate": {"Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query"}, "AirbyteJSONLoader": {"Airbyte": "https://python.langchain.com/docs/integrations/providers/airbyte", "Airbyte JSON": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_json"}, "TelegramChatFileLoader": {"Telegram": "https://python.langchain.com/docs/integrations/document_loaders/telegram"}, "TelegramChatApiLoader": {"Telegram": "https://python.langchain.com/docs/integrations/document_loaders/telegram"}, "PredictionGuard": {"Prediction Guard": "https://python.langchain.com/docs/integrations/llms/predictionguard"}, "NotionDirectoryLoader": {"Notion DB": "https://python.langchain.com/docs/integrations/providers/notion", "Notion DB 1/2": "https://python.langchain.com/docs/integrations/document_loaders/notion", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA"}, "NotionDBLoader": {"Notion DB": "https://python.langchain.com/docs/integrations/providers/notion", "Notion DB 2/2": "https://python.langchain.com/docs/integrations/document_loaders/notiondb"}, "MWDumpLoader": {"MediaWikiDump": "https://python.langchain.com/docs/integrations/document_loaders/mediawikidump"}, "BraveSearchLoader": {"Brave Search": "https://python.langchain.com/docs/integrations/document_loaders/brave_search"}, "StarRocks": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks"}, "DatadogLogsLoader": {"Datadog Logs": "https://python.langchain.com/docs/integrations/document_loaders/datadog_logs"}, "ApifyDatasetLoader": {"Apify": "https://python.langchain.com/docs/integrations/providers/apify", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset"}, "NLPCloud": {"NLPCloud": "https://python.langchain.com/docs/integrations/providers/nlpcloud", "NLP Cloud": "https://python.langchain.com/docs/integrations/llms/nlpcloud"}, "Milvus": {"Milvus": "https://python.langchain.com/docs/integrations/vectorstores/milvus", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz"}, "Qdrant": {"Qdrant": "https://python.langchain.com/docs/integrations/vectorstores/qdrant", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query"}, "GitbookLoader": {"GitBook": "https://python.langchain.com/docs/integrations/document_loaders/gitbook"}, "OpenSearchVectorSearch": {"OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch"}, "Pinecone": {"Pinecone": "https://python.langchain.com/docs/integrations/vectorstores/pinecone", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone"}, "Rockset": {"Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset"}, "RocksetLoader": {"Rockset": "https://python.langchain.com/docs/integrations/document_loaders/rockset"}, "Minimax": {"Minimax": "https://python.langchain.com/docs/integrations/llms/minimax"}, "UnstructuredFileLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured", "Unstructured File": "https://python.langchain.com/docs/integrations/document_loaders/unstructured_file"}, "SelfHostedPipeline": {"Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse"}, "SelfHostedHuggingFaceLLM": {"Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse"}, "MlflowCallbackHandler": {"MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking"}, "SpreedlyLoader": {"Spreedly": "https://python.langchain.com/docs/integrations/document_loaders/spreedly"}, "OpenLLM": {"OpenLLM": "https://python.langchain.com/docs/integrations/llms/openllm", "Nebula": "https://python.langchain.com/docs/integrations/llms/symblai_nebula"}, "PubMedLoader": {"PubMed": "https://python.langchain.com/docs/integrations/document_loaders/pubmed"}, "SearxSearchResults": {"SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx"}, "SpacyTextSplitter": {"spaCy": "https://python.langchain.com/docs/integrations/providers/spacy", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas", "Split by tokens ": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/split_by_token"}, "Modal": {"Modal": "https://python.langchain.com/docs/integrations/llms/modal"}, "Xinference": {"Xorbits Inference (Xinference)": "https://python.langchain.com/docs/integrations/llms/xinference"}, "IFixitLoader": {"iFixit": "https://python.langchain.com/docs/integrations/document_loaders/ifixit"}, "AlephAlpha": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/llms/aleph_alpha"}, "PipelineAI": {"PipelineAI": "https://python.langchain.com/docs/integrations/llms/pipelineai_example"}, "LlamaCpp": {"Llama.cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "AwaDB": {"AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb"}, "ArxivLoader": {"Arxiv": "https://python.langchain.com/docs/integrations/document_loaders/arxiv"}, "Anyscale": {"Anyscale": "https://python.langchain.com/docs/integrations/llms/anyscale"}, "StripeLoader": {"Stripe": "https://python.langchain.com/docs/integrations/document_loaders/stripe"}, "BlackboardLoader": {"Blackboard": "https://python.langchain.com/docs/integrations/document_loaders/blackboard"}, "WhatsAppChatLoader": {"WhatsApp": "https://python.langchain.com/docs/integrations/providers/whatsapp", "WhatsApp Chat": "https://python.langchain.com/docs/integrations/document_loaders/whatsapp_chat"}, "LanceDB": {"LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb"}, "OneDriveLoader": {"Microsoft OneDrive": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_onedrive"}, "AnalyticDB": {"AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb"}, "YoutubeLoader": {"YouTube": "https://python.langchain.com/docs/integrations/providers/youtube", "YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript"}, "GoogleApiYoutubeLoader": {"YouTube": "https://python.langchain.com/docs/integrations/providers/youtube", "YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript"}, "PromptLayerOpenAI": {"PromptLayer": "https://python.langchain.com/docs/integrations/providers/promptlayer", "PromptLayer OpenAI": "https://python.langchain.com/docs/integrations/llms/promptlayer_openai"}, "DeepLake": {"Deep Lake": "https://python.langchain.com/docs/integrations/providers/deeplake", "Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/code/code-analysis-deeplake", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query"}, "WhyLabsCallbackHandler": {"WhyLabs": "https://python.langchain.com/docs/integrations/providers/whylabs_profiling"}, "FlyteCallbackHandler": {"Flyte": "https://python.langchain.com/docs/integrations/providers/flyte"}, "wandb_tracing_enabled": {"WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing"}, "ManifestWrapper": {"Hazy Research": "https://python.langchain.com/docs/integrations/providers/hazy_research", "Manifest": "https://python.langchain.com/docs/integrations/llms/manifest"}, "Marqo": {"Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo"}, "IMSDbLoader": {"IMSDb": "https://python.langchain.com/docs/integrations/document_loaders/imsdb"}, "PGVector": {"PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector"}, "DeepInfra": {"DeepInfra": "https://python.langchain.com/docs/integrations/llms/deepinfra_example"}, "ZeroShotAgent": {"Jina": "https://python.langchain.com/docs/integrations/providers/jina", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db", "How to add Memory to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory", "Custom MRKL agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_mrkl_agent", "Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools"}, "RedditPostsLoader": {"Reddit": "https://python.langchain.com/docs/integrations/document_loaders/reddit"}, "TrelloLoader": {"Trello": "https://python.langchain.com/docs/integrations/document_loaders/trello"}, "AtlasDB": {"AtlasDB": "https://python.langchain.com/docs/integrations/providers/atlas", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas"}, "SKLearnVectorStore": {"scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn"}, "EverNoteLoader": {"EverNote": "https://python.langchain.com/docs/integrations/document_loaders/evernote"}, "TwitterTweetLoader": {"Twitter": "https://python.langchain.com/docs/integrations/document_loaders/twitter"}, "DiscordChatLoader": {"Discord": "https://python.langchain.com/docs/integrations/document_loaders/discord"}, "RedisCache": {"Redis": "https://python.langchain.com/docs/integrations/providers/redis", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "RedisSemanticCache": {"Redis": "https://python.langchain.com/docs/integrations/providers/redis", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "Redis": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis"}, "SelfQueryRetriever": {"Chroma": "https://python.langchain.com/docs/integrations/providers/.ipynb_checkpoints/chroma-checkpoint", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query"}, "ClearMLCallbackHandler": {"ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking"}, "Cohere": {"Cohere": "https://python.langchain.com/docs/integrations/llms/cohere"}, "SlackDirectoryLoader": {"Slack": "https://python.langchain.com/docs/integrations/document_loaders/slack"}, "LLMContentHandler": {"SageMaker Endpoint": "https://python.langchain.com/docs/integrations/providers/sagemaker_endpoint", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker"}, "ContentHandlerBase": {"SageMaker Endpoint": "https://python.langchain.com/docs/integrations/providers/sagemaker_endpoint"}, "HNLoader": {"Hacker News": "https://python.langchain.com/docs/integrations/document_loaders/hacker_news"}, "Annoy": {"Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy"}, "GCSDirectoryLoader": {"Google Cloud Storage": "https://python.langchain.com/docs/integrations/providers/google_cloud_storage", "Google Cloud Storage Directory": "https://python.langchain.com/docs/integrations/document_loaders/google_cloud_storage_directory"}, "GCSFileLoader": {"Google Cloud Storage": "https://python.langchain.com/docs/integrations/providers/google_cloud_storage", "Google Cloud Storage File": "https://python.langchain.com/docs/integrations/document_loaders/google_cloud_storage_file"}, "ArthurCallbackHandler": {"Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking"}, "DuckDBLoader": {"DuckDB": "https://python.langchain.com/docs/integrations/document_loaders/duckdb"}, "Petals": {"Petals": "https://python.langchain.com/docs/integrations/llms/petals_example"}, "MomentoCache": {"Momento": "https://python.langchain.com/docs/integrations/providers/momento", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "AirtableLoader": {"Airtable": "https://python.langchain.com/docs/integrations/document_loaders/airtable"}, "TensorflowDatasetLoader": {"TensorFlow Datasets": "https://python.langchain.com/docs/integrations/document_loaders/tensorflow_datasets"}, "Clarifai": {"Clarifai": "https://python.langchain.com/docs/integrations/llms/clarifai"}, "BigQueryLoader": {"Google BigQuery": "https://python.langchain.com/docs/integrations/document_loaders/google_bigquery"}, "RoamLoader": {"Roam": "https://python.langchain.com/docs/integrations/document_loaders/roam"}, "Portkey": {"Log, Trace, and Monitor Langchain LLM Calls": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index"}, "Vectara": {"Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara", "Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "Vectara Text Generation": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_text_generation"}, "VectaraRetriever": {"Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat"}, "load_qa_chain": {"Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Use local LLMs": "https://python.langchain.com/docs/use_cases/question_answering/how_to/local_retrieval_qa", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs"}, "CONDENSE_QUESTION_PROMPT": {"Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat"}, "load_qa_with_sources_chain": {"Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "QA_PROMPT": {"Chat Over Documents with Vectara": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat"}, "create_csv_agent": {"CSV Agent": "https://python.langchain.com/docs/integrations/toolkits/csv"}, "create_xorbits_agent": {"Xorbits Agent": "https://python.langchain.com/docs/integrations/toolkits/xorbits"}, "JiraToolkit": {"Jira": "https://python.langchain.com/docs/integrations/toolkits/jira"}, "JiraAPIWrapper": {"Jira": "https://python.langchain.com/docs/integrations/toolkits/jira"}, "create_spark_dataframe_agent": {"Spark Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/spark"}, "PyPDFLoader": {"Document Comparison": "https://python.langchain.com/docs/integrations/toolkits/document_comparison_toolkit", "Google Cloud Storage File": "https://python.langchain.com/docs/integrations/document_loaders/google_cloud_storage_file", "MergeDocLoader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc_loader", "QA using Activeloop's DeepLake": "https://python.langchain.com/docs/use_cases/question_answering/integrations/semantic-search-over-chat"}, "create_python_agent": {"Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python"}, "PythonREPLTool": {"Python Agent": "https://python.langchain.com/docs/integrations/toolkits/python"}, "create_pbi_agent": {"PowerBI Dataset Agent": "https://python.langchain.com/docs/integrations/toolkits/powerbi"}, "PowerBIToolkit": {"PowerBI Dataset Agent": "https://python.langchain.com/docs/integrations/toolkits/powerbi"}, "PowerBIDataset": {"PowerBI Dataset Agent": "https://python.langchain.com/docs/integrations/toolkits/powerbi"}, "AzureCognitiveServicesToolkit": {"Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/toolkits/azure_cognitive_services"}, "Requests": {"Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla"}, "APIOperation": {"Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla"}, "OpenAPISpec": {"Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla"}, "NLAToolkit": {"Natural Language APIs": "https://python.langchain.com/docs/integrations/toolkits/openapi_nla", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval"}, "GmailToolkit": {"Gmail Toolkit": "https://python.langchain.com/docs/integrations/toolkits/gmail"}, "build_resource_service": {"Gmail Toolkit": "https://python.langchain.com/docs/integrations/toolkits/gmail"}, "get_gmail_credentials": {"Gmail Toolkit": "https://python.langchain.com/docs/integrations/toolkits/gmail"}, "create_json_agent": {"JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json"}, "JsonToolkit": {"JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json"}, "JsonSpec": {"JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json", "OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi"}, "GitHubToolkit": {"Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github"}, "GitHubAPIWrapper": {"Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github"}, "GitHubAction": {"Github Toolkit": "https://python.langchain.com/docs/integrations/toolkits/github"}, "create_spark_sql_agent": {"Spark SQL Agent": "https://python.langchain.com/docs/integrations/toolkits/spark_sql"}, "SparkSQLToolkit": {"Spark SQL Agent": "https://python.langchain.com/docs/integrations/toolkits/spark_sql"}, "SparkSQL": {"Spark SQL Agent": "https://python.langchain.com/docs/integrations/toolkits/spark_sql"}, "create_sync_playwright_browser": {"PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/toolkits/playwright"}, "O365Toolkit": {"Office365 Toolkit": "https://python.langchain.com/docs/integrations/toolkits/office365"}, "create_pandas_dataframe_agent": {"Pandas Dataframe Agent": "https://python.langchain.com/docs/integrations/toolkits/pandas", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "MultionToolkit": {"MultiOn Toolkit": "https://python.langchain.com/docs/integrations/toolkits/multion"}, "AmadeusToolkit": {"Amadeus Toolkit": "https://python.langchain.com/docs/integrations/toolkits/amadeus"}, "create_vectorstore_agent": {"Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore"}, "VectorStoreToolkit": {"Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore"}, "VectorStoreInfo": {"Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore"}, "create_vectorstore_router_agent": {"Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore"}, "VectorStoreRouterToolkit": {"Vectorstore Agent": "https://python.langchain.com/docs/integrations/toolkits/vectorstore"}, "reduce_openapi_spec": {"OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi"}, "RequestsWrapper": {"OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi"}, "create_openapi_agent": {"OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi"}, "OpenAPIToolkit": {"OpenAPI agents": "https://python.langchain.com/docs/integrations/toolkits/openapi"}, "RetrievalQAWithSourcesChain": {"Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "MatchingEngine": {"MatchingEngine": "https://python.langchain.com/docs/integrations/vectorstores/matchingengine"}, "OpenAIChat": {"Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/deeplake"}, "ScaNN": {"ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann"}, "google_palm": {"ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann"}, "XataVectorStore": {"Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata"}, "InMemoryDocstore": {"Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", "BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Generative Agents in LangChain": "https://python.langchain.com/docs/use_cases/agent_simulations/characters"}, "AlibabaCloudOpenSearch": {"Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch"}, "AlibabaCloudOpenSearchSettings": {"Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch"}, "StarRocksSettings": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks"}, "TokenTextSplitter": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks", "Split by tokens ": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/split_by_token"}, "DirectoryLoader": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks"}, "UnstructuredMarkdownLoader": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks"}, "DocArrayHnswSearch": {"DocArrayHnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw"}, "MyScaleSettings": {"MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale"}, "Clickhouse": {"ClickHouse Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse"}, "ClickhouseSettings": {"ClickHouse Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse"}, "SupabaseVectorStore": {"Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase"}, "AzureSearch": {"Azure Cognitive Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch"}, "Cassandra": {"Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra"}, "USearch": {"USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch"}, "ElasticVectorSearch": {"ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch", "How to add memory to a Multi-Input Chain": "https://python.langchain.com/docs/modules/memory/adding_memory_chain_multiple_inputs"}, "ElasticKnnSearch": {"ElasticSearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch"}, "DocArrayInMemorySearch": {"DocArrayInMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory"}, "PGEmbedding": {"pg_embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding"}, "MongoDBAtlasVectorSearch": {"MongoDB Atlas": "https://python.langchain.com/docs/integrations/vectorstores/mongodb_atlas"}, "Meilisearch": {"Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch"}, "NucliaTextTransformer": {"Nuclia Understanding API document transformer": "https://python.langchain.com/docs/integrations/document_transformers/nuclia_transformer"}, "create_metadata_tagger": {"OpenAI Functions Metadata Tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger"}, "AsyncHtmlLoader": {"html2text": "https://python.langchain.com/docs/integrations/document_transformers/html2text", "AsyncHtmlLoader": "https://python.langchain.com/docs/integrations/document_loaders/async_html"}, "Html2TextTransformer": {"html2text": "https://python.langchain.com/docs/integrations/document_transformers/html2text"}, "DoctranPropertyExtractor": {"Doctran Extract Properties": "https://python.langchain.com/docs/integrations/document_transformers/doctran_extract_properties"}, "DoctranQATransformer": {"Doctran Interrogate Documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_interrogate_document"}, "DoctranTextTranslator": {"Doctran Translate Documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_translate_document"}, "SnowflakeLoader": {"Snowflake": "https://python.langchain.com/docs/integrations/document_loaders/snowflake"}, "AcreomLoader": {"acreom": "https://python.langchain.com/docs/integrations/document_loaders/acreom"}, "UnstructuredCSVLoader": {"CSV": "https://python.langchain.com/docs/integrations/document_loaders/csv"}, "XorbitsLoader": {"Xorbits Pandas DataFrame": "https://python.langchain.com/docs/integrations/document_loaders/xorbits"}, "UnstructuredEmailLoader": {"Email": "https://python.langchain.com/docs/integrations/document_loaders/email"}, "OutlookMessageLoader": {"Email": "https://python.langchain.com/docs/integrations/document_loaders/email"}, "BlockchainDocumentLoader": {"Blockchain": "https://python.langchain.com/docs/integrations/document_loaders/blockchain"}, "BlockchainType": {"Blockchain": "https://python.langchain.com/docs/integrations/document_loaders/blockchain"}, "RecursiveUrlLoader": {"Recursive URL Loader": "https://python.langchain.com/docs/integrations/document_loaders/recursive_url_loader"}, "JoplinLoader": {"Joplin": "https://python.langchain.com/docs/integrations/document_loaders/joplin"}, "AirbyteSalesforceLoader": {"Airbyte Salesforce": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_salesforce"}, "EtherscanLoader": {"Etherscan Loader": "https://python.langchain.com/docs/integrations/document_loaders/Etherscan"}, "AirbyteCDKLoader": {"Airbyte CDK": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_cdk"}, "Docx2txtLoader": {"Microsoft Word": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_word"}, "OpenAIWhisperParser": {"Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio"}, "YoutubeAudioLoader": {"Loading documents from a YouTube url": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio"}, "UnstructuredURLLoader": {"URL": "https://python.langchain.com/docs/integrations/document_loaders/url"}, "SeleniumURLLoader": {"URL": "https://python.langchain.com/docs/integrations/document_loaders/url"}, "PlaywrightURLLoader": {"URL": "https://python.langchain.com/docs/integrations/document_loaders/url"}, "AirbyteStripeLoader": {"Airbyte Stripe": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_stripe"}, "OpenCityDataLoader": {"Geopandas": "https://python.langchain.com/docs/integrations/document_loaders/geopandas", "Open City Data": "https://python.langchain.com/docs/integrations/document_loaders/open_city_data"}, "GeoDataFrameLoader": {"Geopandas": "https://python.langchain.com/docs/integrations/document_loaders/geopandas"}, "OBSFileLoader": {"Huawei OBS File": "https://python.langchain.com/docs/integrations/document_loaders/huawei_obs_file"}, "HuggingFaceDatasetLoader": {"HuggingFace dataset": "https://python.langchain.com/docs/integrations/document_loaders/hugging_face_dataset"}, "DropboxLoader": {"Dropbox": "https://python.langchain.com/docs/integrations/document_loaders/dropbox"}, "AirbyteTypeformLoader": {"Airbyte Typeform": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_typeform"}, "MHTMLLoader": {"mhtml": "https://python.langchain.com/docs/integrations/document_loaders/mhtml"}, "NewsURLLoader": {"News URL": "https://python.langchain.com/docs/integrations/document_loaders/news"}, "ImageCaptionLoader": {"Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions"}, "UnstructuredRSTLoader": {"RST": "https://python.langchain.com/docs/integrations/document_loaders/rst"}, "ConversationBufferWindowMemory": {"Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Meta-Prompt": "https://python.langchain.com/docs/use_cases/autonomous_agents/meta_prompt", "Create ChatGPT clone": "https://python.langchain.com/docs/modules/agents/how_to/chatgpt_clone"}, "UnstructuredImageLoader": {"Images": "https://python.langchain.com/docs/integrations/document_loaders/image"}, "NucliaLoader": {"Nuclia Understanding API document loader": "https://python.langchain.com/docs/integrations/document_loaders/nuclia"}, "TencentCOSFileLoader": {"Tencent COS File": "https://python.langchain.com/docs/integrations/document_loaders/tencent_cos_file"}, "TomlLoader": {"TOML": "https://python.langchain.com/docs/integrations/document_loaders/toml"}, "UnstructuredAPIFileLoader": {"Unstructured File": "https://python.langchain.com/docs/integrations/document_loaders/unstructured_file"}, "PsychicLoader": {"Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic"}, "TencentCOSDirectoryLoader": {"Tencent COS Directory": "https://python.langchain.com/docs/integrations/document_loaders/tencent_cos_directory"}, "GitHubIssuesLoader": {"GitHub": "https://python.langchain.com/docs/integrations/document_loaders/github"}, "UnstructuredOrgModeLoader": {"Org-mode": "https://python.langchain.com/docs/integrations/document_loaders/org_mode"}, "LarkSuiteDocLoader": {"LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite"}, "load_summarize_chain": {"LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching", "Summarization": "https://python.langchain.com/docs/use_cases/summarization"}, "IuguLoader": {"Iugu": "https://python.langchain.com/docs/integrations/document_loaders/iugu"}, "UnstructuredEPubLoader": {"EPub ": "https://python.langchain.com/docs/integrations/document_loaders/epub"}, "AttributeInfo": {"Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Weaviate self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/weaviate_self_query", "Chroma self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/chroma_self_query", "DeepLake self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/deeplake_self_query", "Self-querying with Pinecone": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/pinecone", "Self-querying with MyScale": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/myscale_self_query", "Qdrant self-querying ": "https://python.langchain.com/docs/modules/data_connection/retrievers/self_query/qdrant_self_query"}, "UnstructuredFileIOLoader": {"Google Drive": "https://python.langchain.com/docs/integrations/document_loaders/google_drive"}, "BrowserlessLoader": {"Browserless": "https://python.langchain.com/docs/integrations/document_loaders/browserless"}, "BibtexLoader": {"BibTeX": "https://python.langchain.com/docs/integrations/document_loaders/bibtex"}, "AirbyteHubspotLoader": {"Airbyte Hubspot": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_hubspot"}, "AirbyteGongLoader": {"Airbyte Gong": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_gong"}, "ReadTheDocsLoader": {"ReadTheDocs Documentation": "https://python.langchain.com/docs/integrations/document_loaders/readthedocs_documentation"}, "DataFrameLoader": {"Pandas DataFrame": "https://python.langchain.com/docs/integrations/document_loaders/pandas_dataframe"}, "GoogleApiClient": {"YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript"}, "ConcurrentLoader": {"Concurrent Loader": "https://python.langchain.com/docs/integrations/document_loaders/concurrent"}, "RSSFeedLoader": {"RSS Feeds": "https://python.langchain.com/docs/integrations/document_loaders/rss"}, "NotebookLoader": {"Jupyter Notebook": "https://python.langchain.com/docs/integrations/document_loaders/jupyter_notebook", "Notebook": "https://python.langchain.com/docs/integrations/document_loaders/example_data/notebook"}, "UnstructuredTSVLoader": {"TSV": "https://python.langchain.com/docs/integrations/document_loaders/tsv"}, "UnstructuredODTLoader": {"Open Document Format (ODT)": "https://python.langchain.com/docs/integrations/document_loaders/odt"}, "EmbaasBlobLoader": {"Embaas": "https://python.langchain.com/docs/integrations/document_loaders/embaas"}, "Blob": {"Embaas": "https://python.langchain.com/docs/integrations/document_loaders/embaas"}, "EmbaasLoader": {"Embaas": "https://python.langchain.com/docs/integrations/document_loaders/embaas"}, "UnstructuredXMLLoader": {"XML": "https://python.langchain.com/docs/integrations/document_loaders/xml"}, "MaxComputeLoader": {"Alibaba Cloud MaxCompute": "https://python.langchain.com/docs/integrations/document_loaders/alibaba_cloud_maxcompute"}, "CubeSemanticLoader": {"Cube Semantic Layer": "https://python.langchain.com/docs/integrations/document_loaders/cube_semantic"}, "UnstructuredExcelLoader": {"Microsoft Excel": "https://python.langchain.com/docs/integrations/document_loaders/excel"}, "Language": {"Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code"}, "LanguageParser": {"Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code"}, "SRTLoader": {"Subtitle": "https://python.langchain.com/docs/integrations/document_loaders/subtitle"}, "MastodonTootsLoader": {"Mastodon": "https://python.langchain.com/docs/integrations/document_loaders/mastodon"}, "AirbyteShopifyLoader": {"Airbyte Shopify": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_shopify"}, "MergedDataLoader": {"MergeDocLoader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc_loader"}, "PySparkDataFrameLoader": {"PySpark DataFrame Loader": "https://python.langchain.com/docs/integrations/document_loaders/pyspark_dataframe"}, "AirbyteZendeskSupportLoader": {"Airbyte Zendesk Support": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_zendesk_support"}, "CoNLLULoader": {"CoNLL-U": "https://python.langchain.com/docs/integrations/document_loaders/conll-u"}, "OBSDirectoryLoader": {"Huawei OBS Directory": "https://python.langchain.com/docs/integrations/document_loaders/huawei_obs_directory"}, "FaunaLoader": {"Fauna": "https://python.langchain.com/docs/integrations/document_loaders/fauna"}, "SitemapLoader": {"Sitemap": "https://python.langchain.com/docs/integrations/document_loaders/sitemap"}, "StochasticAI": {"StochasticAI": "https://python.langchain.com/docs/integrations/llms/stochasticai"}, "ForefrontAI": {"ForefrontAI": "https://python.langchain.com/docs/integrations/llms/forefrontai_example"}, "CerebriumAI": {"CerebriumAI": "https://python.langchain.com/docs/integrations/llms/cerebriumai_example"}, "FireworksChat": {"Fireworks": "https://python.langchain.com/docs/integrations/llms/Fireworks"}, "OctoAIEndpoint": {"OctoAI Compute Service": "https://python.langchain.com/docs/integrations/llms/octoai"}, "Writer": {"Writer": "https://python.langchain.com/docs/integrations/llms/writer"}, "TextGen": {"TextGen": "https://python.langchain.com/docs/integrations/llms/textgen"}, "MosaicML": {"MosaicML": "https://python.langchain.com/docs/integrations/llms/mosaicml"}, "KoboldApiLLM": {"KoboldAI API": "https://python.langchain.com/docs/integrations/llms/koboldai"}, "VertexAI": {"Google Cloud Platform Vertex AI PaLM ": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm"}, "Ollama": {"Ollama": "https://python.langchain.com/docs/integrations/llms/ollama"}, "LLMResult": {"Ollama": "https://python.langchain.com/docs/integrations/llms/ollama", "Async callbacks": "https://python.langchain.com/docs/modules/callbacks/async_callbacks"}, "BaseCallbackHandler": {"Ollama": "https://python.langchain.com/docs/integrations/llms/ollama", "Custom callback handlers": "https://python.langchain.com/docs/modules/callbacks/custom_callbacks", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Async callbacks": "https://python.langchain.com/docs/modules/callbacks/async_callbacks", "Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only"}, "TitanTakeoff": {"Titan Takeoff": "https://python.langchain.com/docs/integrations/llms/titan_takeoff"}, "GooseAI": {"GooseAI": "https://python.langchain.com/docs/integrations/llms/gooseai_example"}, "Databricks": {"Databricks": "https://python.langchain.com/docs/integrations/llms/databricks"}, "EdenAI": {"Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai"}, "VLLM": {"vLLM": "https://python.langchain.com/docs/integrations/llms/vllm"}, "MapReduceChain": {"Manifest": "https://python.langchain.com/docs/integrations/llms/manifest", "Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching", "Summarization": "https://python.langchain.com/docs/use_cases/summarization"}, "ModelLaboratory": {"Manifest": "https://python.langchain.com/docs/integrations/llms/manifest", "Model comparison": "https://python.langchain.com/docs/guides/model_laboratory"}, "Tongyi": {"Tongyi Qwen": "https://python.langchain.com/docs/integrations/llms/tongyi"}, "InMemoryCache": {"Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "SQLiteCache": {"Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "GPTCache": {"Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "SQLAlchemyCache": {"Caching integrations": "https://python.langchain.com/docs/integrations/llms/llm_caching"}, "AzureMLOnlineEndpoint": {"AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example"}, "ContentFormatterBase": {"AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example"}, "DollyContentFormatter": {"AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example"}, "load_llm": {"AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example", "Serialization": "https://python.langchain.com/docs/modules/model_io/models/llms/llm_serialization"}, "AzureMLEndpointClient": {"AzureML Online Endpoint": "https://python.langchain.com/docs/integrations/llms/azureml_endpoint_example"}, "OpenLM": {"OpenLM": "https://python.langchain.com/docs/integrations/llms/openlm"}, "HuggingFaceTextGenInference": {"Huggingface TextGen Inference": "https://python.langchain.com/docs/integrations/llms/huggingface_textgen_inference"}, "ChatGLM": {"ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm"}, "Replicate": {"Replicate": "https://python.langchain.com/docs/integrations/llms/replicate"}, "tracing_v2_enabled": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough"}, "wait_for_all_tracers": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough"}, "EvaluatorType": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough", "Criteria Evaluation": "https://python.langchain.com/docs/guides/evaluation/string/criteria_eval_chain"}, "RunEvalConfig": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough"}, "arun_on_dataset": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough"}, "run_on_dataset": {"LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough"}, "load_evaluator": {"Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", "Pairwise Embedding Distance ": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_embedding_distance", "Pairwise String Comparison": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_string", "Criteria Evaluation": "https://python.langchain.com/docs/guides/evaluation/string/criteria_eval_chain", "String Distance": "https://python.langchain.com/docs/guides/evaluation/string/string_distance", "Embedding Distance": "https://python.langchain.com/docs/guides/evaluation/string/embedding_distance"}, "load_dataset": {"Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons"}, "AgentAction": {"Custom Trajectory Evaluator": "https://python.langchain.com/docs/guides/evaluation/trajectory/custom", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", "Custom multi-action agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_multi_action_agent", "Custom agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "AgentTrajectoryEvaluator": {"Custom Trajectory Evaluator": "https://python.langchain.com/docs/guides/evaluation/trajectory/custom"}, "EmbeddingDistance": {"Pairwise Embedding Distance ": "https://python.langchain.com/docs/guides/evaluation/comparison/pairwise_embedding_distance", "Embedding Distance": "https://python.langchain.com/docs/guides/evaluation/string/embedding_distance"}, "PairwiseStringEvaluator": {"Custom Pairwise Evaluator": "https://python.langchain.com/docs/guides/evaluation/comparison/custom"}, "Criteria": {"Criteria Evaluation": "https://python.langchain.com/docs/guides/evaluation/string/criteria_eval_chain"}, "StringEvaluator": {"Custom String Evaluator": "https://python.langchain.com/docs/guides/evaluation/string/custom"}, "StringDistance": {"String Distance": "https://python.langchain.com/docs/guides/evaluation/string/string_distance"}, "StrOutputParser": {"Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook"}, "JsonOutputFunctionsParser": {"Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook"}, "JsonKeyOutputFunctionsParser": {"Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook"}, "RunnablePassthrough": {"Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook"}, "RunnableMap": {"Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook"}, "format_document": {"Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook"}, "create_tagging_chain_pydantic": {"Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "Tagging": "https://python.langchain.com/docs/use_cases/tagging"}, "RouterRunnable": {"Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook"}, "RunnableLambda": {"Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook"}, "MessagesPlaceholder": {"Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents", "How to add Memory to an LLMChain": "https://python.langchain.com/docs/modules/memory/adding_memory", "Add Memory to OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/add_memory_openai_functions", "Types of `MessagePromptTemplate`": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/msg_prompt_templates"}, "ConversationSummaryMemory": {"Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory"}, "ConversationSummaryBufferMemory": {"Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "ConversationSummaryBufferMemory": "https://python.langchain.com/docs/modules/memory/types/summary_buffer"}, "StuffDocumentsChain": {"Summarization": "https://python.langchain.com/docs/use_cases/summarization", "Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa", "Lost in the middle: The problem with long contexts": "https://python.langchain.com/docs/modules/data_connection/document_transformers/post_retrieval/long_context_reorder"}, "ReduceDocumentsChain": {"Summarization": "https://python.langchain.com/docs/use_cases/summarization"}, "MapReduceDocumentsChain": {"Summarization": "https://python.langchain.com/docs/use_cases/summarization"}, "create_extraction_chain_pydantic": {"Extraction": "https://python.langchain.com/docs/use_cases/extraction"}, "PydanticOutputParser": {"Extraction": "https://python.langchain.com/docs/use_cases/extraction", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever", "WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research", "Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry", "Pydantic (JSON) parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/pydantic"}, "get_openapi_chain": {"Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis"}, "APIChain": {"Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis"}, "open_meteo_docs": {"Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis"}, "tmdb_docs": {"Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis"}, "podcast_docs": {"Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis"}, "LLMRequestsChain": {"Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis"}, "create_sql_query_chain": {"SQL": "https://python.langchain.com/docs/use_cases/sql"}, "ElasticsearchDatabaseChain": {"SQL": "https://python.langchain.com/docs/use_cases/sql"}, "FileChatMessageHistory": {"AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt"}, "BaseLLM": {"BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context"}, "VectorStore": {"BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent"}, "Chain": {"BabyAGI User Guide": "https://python.langchain.com/docs/use_cases/agents/baby_agi", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "BaseTool": {"!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools", "Combine agents and vector stores": "https://python.langchain.com/docs/modules/agents/how_to/agent_vectorstore", "Custom functions with OpenAI Functions Agent": "https://python.langchain.com/docs/modules/agents/how_to/custom-functions-with-openai-functions-agent"}, "BaseCombineDocumentsChain": {"!pip install bs4": "https://python.langchain.com/docs/use_cases/autonomous_agents/marathon_times"}, "MultiQueryRetriever": {"QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "MultiQueryRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever"}, "MarkdownHeaderTextSplitter": {"Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "MarkdownHeaderTextSplitter": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/markdown_header_metadata"}, "create_retriever_tool": {"Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents"}, "create_conversational_retrieval_agent": {"Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents"}, "AgentTokenBufferMemory": {"Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents"}, "create_citation_fuzzy_match_chain": {"Cite sources": "https://python.langchain.com/docs/use_cases/question_answering/how_to/qa_citations"}, "BaseRetriever": {"Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare"}, "AsyncCallbackManagerForRetrieverRun": {"Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare"}, "CallbackManagerForRetrieverRun": {"Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare"}, "FlareChain": {"Retrieve as you generate with FLARE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/flare"}, "HypotheticalDocumentEmbedder": {"Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde"}, "create_qa_with_sources_chain": {"Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa"}, "create_qa_with_structure_chain": {"Structure answers with OpenAI functions": "https://python.langchain.com/docs/use_cases/question_answering/integrations/openai_functions_retrieval_qa"}, "NeptuneGraph": {"Neptune Open Cypher QA Chain": "https://python.langchain.com/docs/use_cases/graph/neptune_cypher_qa"}, "NeptuneOpenCypherQAChain": {"Neptune Open Cypher QA Chain": "https://python.langchain.com/docs/use_cases/graph/neptune_cypher_qa"}, "NebulaGraphQAChain": {"NebulaGraphQAChain": "https://python.langchain.com/docs/use_cases/graph/graph_nebula_qa"}, "NebulaGraph": {"NebulaGraphQAChain": "https://python.langchain.com/docs/use_cases/graph/graph_nebula_qa"}, "KuzuGraph": {"KuzuQAChain": "https://python.langchain.com/docs/use_cases/graph/graph_kuzu_qa"}, "KuzuQAChain": {"KuzuQAChain": "https://python.langchain.com/docs/use_cases/graph/graph_kuzu_qa"}, "HugeGraphQAChain": {"HugeGraph QA Chain": "https://python.langchain.com/docs/use_cases/graph/graph_hugegraph_qa"}, "HugeGraph": {"HugeGraph QA Chain": "https://python.langchain.com/docs/use_cases/graph/graph_hugegraph_qa"}, "GraphSparqlQAChain": {"GraphSparqlQAChain": "https://python.langchain.com/docs/use_cases/graph/graph_sparql_qa"}, "RdfGraph": {"GraphSparqlQAChain": "https://python.langchain.com/docs/use_cases/graph/graph_sparql_qa"}, "ArangoGraph": {"ArangoDB QA chain": "https://python.langchain.com/docs/use_cases/graph/graph_arangodb_qa"}, "ArangoGraphQAChain": {"ArangoDB QA chain": "https://python.langchain.com/docs/use_cases/graph/graph_arangodb_qa"}, "GraphIndexCreator": {"Graph QA": "https://python.langchain.com/docs/use_cases/graph/graph_qa"}, "GraphQAChain": {"Graph QA": "https://python.langchain.com/docs/use_cases/graph/graph_qa"}, "NetworkxEntityGraph": {"Graph QA": "https://python.langchain.com/docs/use_cases/graph/graph_qa"}, "GraphCypherQAChain": {"Graph DB QA chain": "https://python.langchain.com/docs/use_cases/graph/graph_cypher_qa"}, "Neo4jGraph": {"Graph DB QA chain": "https://python.langchain.com/docs/use_cases/graph/graph_cypher_qa"}, "LLMSingleActionAgent": {"Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "AgentOutputParser": {"Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "StringPromptTemplate": {"Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval", "Custom prompt template": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/custom_prompt_template", "Connecting to a Feature Store": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store"}, "AgentFinish": {"Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Wikibase Agent": "https://python.langchain.com/docs/use_cases/agents/wikibase_agent", "SalesGPT - Your Context-Aware AI Sales Assistant With Knowledge Base": "https://python.langchain.com/docs/use_cases/agents/sales_agent_with_context", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval", "Custom multi-action agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_multi_action_agent", "Running Agent as an Iterator": "https://python.langchain.com/docs/modules/agents/how_to/agent_iter", "Custom agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent", "Custom agent with tool retrieval": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval"}, "AIPlugin": {"Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", "Custom Agent with PlugIn Retrieval": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval"}, "SteamshipImageGenerationTool": {"Multi-modal outputs: Image & Text": "https://python.langchain.com/docs/use_cases/multi_modal/image_agent"}, "BaseMessage": {"CAMEL Role-Playing Autonomous Cooperative Agents": "https://python.langchain.com/docs/use_cases/agent_simulations/camel_role_playing", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Multi-Player Dungeons & Dragons": "https://python.langchain.com/docs/use_cases/agent_simulations/multi_player_dnd", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools"}, "LLMBashChain": {"Bash chain": "https://python.langchain.com/docs/use_cases/code_writing/llm_bash"}, "BashOutputParser": {"Bash chain": "https://python.langchain.com/docs/use_cases/code_writing/llm_bash"}, "BashProcess": {"Bash chain": "https://python.langchain.com/docs/use_cases/code_writing/llm_bash"}, "LLMSymbolicMathChain": {"LLM Symbolic Math ": "https://python.langchain.com/docs/use_cases/code_writing/llm_symbolic_math"}, "LLMSummarizationCheckerChain": {"Summarization checker chain": "https://python.langchain.com/docs/use_cases/self_check/llm_summarization_checker"}, "LLMCheckerChain": {"Self-checking chain": "https://python.langchain.com/docs/use_cases/self_check/llm_checker"}, "RegexParser": {"Multi-Agent Simulated Environment: Petting Zoo": "https://python.langchain.com/docs/use_cases/agent_simulations/petting_zoo", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", "Multi-agent authoritarian speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_authoritarian", "Simulated Environment: Gymnasium": "https://python.langchain.com/docs/use_cases/agent_simulations/gymnasium"}, "TimeWeightedVectorStoreRetriever": {"Generative Agents in LangChain": "https://python.langchain.com/docs/use_cases/agent_simulations/characters"}, "InMemoryStore": {"Caching Embeddings": "https://python.langchain.com/docs/modules/data_connection/caching_embeddings", "Parent Document Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/parent_document_retriever"}, "LocalFileStore": {"Caching Embeddings": "https://python.langchain.com/docs/modules/data_connection/caching_embeddings"}, "EnsembleRetriever": {"Ensemble Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/ensemble"}, "ParentDocumentRetriever": {"Parent Document Retriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/parent_document_retriever"}, "WebResearchRetriever": {"WebResearchRetriever": "https://python.langchain.com/docs/modules/data_connection/retrievers/web_research"}, "SentenceTransformersTokenTextSplitter": {"Split by tokens ": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/split_by_token"}, "NLTKTextSplitter": {"Split by tokens ": "https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/split_by_token"}, "ChatMessageHistory": {"Adding Message Memory backed by a database to an Agent": "https://python.langchain.com/docs/modules/memory/agent_with_memory_in_db"}, "BaseMemory": {"How to create a custom Memory class": "https://python.langchain.com/docs/modules/memory/custom_memory"}, "CombinedMemory": {"How to use multiple memory classes in the same chain": "https://python.langchain.com/docs/modules/memory/multiple_memory"}, "ConversationKGMemory": {"Conversation Knowledge Graph Memory": "https://python.langchain.com/docs/modules/memory/types/kg"}, "ConversationTokenBufferMemory": {"ConversationTokenBufferMemory": "https://python.langchain.com/docs/modules/memory/types/token_buffer"}, "tracing_enabled": {"Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks"}, "FileCallbackHandler": {"Logging to file": "https://python.langchain.com/docs/modules/callbacks/filecallbackhandler"}, "AsyncCallbackHandler": {"Async callbacks": "https://python.langchain.com/docs/modules/callbacks/async_callbacks"}, "StructuredTool": {"Multi-Input Tools": "https://python.langchain.com/docs/modules/agents/tools/multi_input_tool", "Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools"}, "AsyncCallbackManagerForToolRun": {"Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools"}, "CallbackManagerForToolRun": {"Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools"}, "ToolException": {"Defining Custom Tools": "https://python.langchain.com/docs/modules/agents/tools/custom_tools"}, "format_tool_to_openai_function": {"Tools as OpenAI Functions": "https://python.langchain.com/docs/modules/agents/tools/tools_as_openai_functions"}, "RequestsGetTool": {"Tool Input Schema": "https://python.langchain.com/docs/modules/agents/tools/tool_input_validation"}, "HumanApprovalCallbackHandler": {"Human-in-the-loop Tool Validation": "https://python.langchain.com/docs/modules/agents/tools/human_approval"}, "XMLAgent": {"XML Agent": "https://python.langchain.com/docs/modules/agents/agent_types/xml_agent"}, "DocstoreExplorer": {"ReAct document store": "https://python.langchain.com/docs/modules/agents/agent_types/react_docstore"}, "ReadOnlySharedMemory": {"Shared memory across agents and tools": "https://python.langchain.com/docs/modules/agents/how_to/sharedmemory_for_tools"}, "BaseMultiActionAgent": {"Custom multi-action agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_multi_action_agent"}, "FinalStreamingStdOutCallbackHandler": {"Streaming final agent output": "https://python.langchain.com/docs/modules/agents/how_to/streaming_stdout_final_only"}, "LangChainTracer": {"Async API": "https://python.langchain.com/docs/modules/agents/how_to/async_agent"}, "BaseSingleActionAgent": {"Custom agent": "https://python.langchain.com/docs/modules/agents/how_to/custom_agent"}, "HumanInputChatModel": {"Human input Chat Model": "https://python.langchain.com/docs/modules/model_io/models/chat/human_input_chat_model"}, "FakeListLLM": {"Fake LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/fake_llm"}, "CallbackManagerForLLMRun": {"Custom LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/custom_llm"}, "LLM": {"Custom LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/custom_llm"}, "HumanInputLLM": {"Human input LLM": "https://python.langchain.com/docs/modules/model_io/models/llms/human_input_llm"}, "OutputFixingParser": {"Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry"}, "RetryOutputParser": {"Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry"}, "RetryWithErrorOutputParser": {"Retry parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/retry"}, "EnumOutputParser": {"Enum parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/enum"}, "DatetimeOutputParser": {"Datetime parser": "https://python.langchain.com/docs/modules/model_io/output_parsers/datetime"}, "MaxMarginalRelevanceExampleSelector": {"Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr"}, "SemanticSimilarityExampleSelector": {"Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr", "Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat"}, "FewShotPromptTemplate": {"Select by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/mmr", "Select by n-gram overlap": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/ngram_overlap"}, "BaseExampleSelector": {"Custom example selector": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/custom_example_selector"}, "NGramOverlapExampleSelector": {"Select by n-gram overlap": "https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/ngram_overlap"}, "FewShotChatMessagePromptTemplate": {"Few shot examples for chat models": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/few_shot_examples_chat"}, "load_prompt": {"Serialization": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/prompt_serialization"}, "ChatMessagePromptTemplate": {"Types of `MessagePromptTemplate`": "https://python.langchain.com/docs/modules/model_io/prompts/prompt_templates/msg_prompt_templates"}, "MultiPromptChain": {"Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "LLMRouterChain": {"Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "RouterOutputParser": {"Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "EmbeddingRouterChain": {"Router": "https://python.langchain.com/docs/modules/chains/foundational/router"}, "BaseLanguageModel": {"Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "AsyncCallbackManagerForChainRun": {"Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "CallbackManagerForChainRun": {"Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "BasePromptTemplate": {"Custom chain": "https://python.langchain.com/docs/modules/chains/how_to/custom_chain"}, "load_chain": {"Serialization": "https://python.langchain.com/docs/modules/chains/how_to/serialization", "Loading from LangChainHub": "https://python.langchain.com/docs/modules/chains/how_to/from_hub"}, "create_openai_fn_chain": {"Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/how_to/openai_functions"}, "create_structured_output_chain": {"Using OpenAI functions": "https://python.langchain.com/docs/modules/chains/how_to/openai_functions"}} \ No newline at end of file From 6c70f491bac5b03eee4a338f8ab57745a96ab649 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Thu, 10 Aug 2023 14:40:55 -0400 Subject: [PATCH 020/175] ChatPromptTemplate pending deprecation proposal (#9004) Pending deprecations for ChatPromptTemplate proposals --- libs/langchain/langchain/prompts/chat.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libs/langchain/langchain/prompts/chat.py b/libs/langchain/langchain/prompts/chat.py index b724d6b7b..aff7b6da4 100644 --- a/libs/langchain/langchain/prompts/chat.py +++ b/libs/langchain/langchain/prompts/chat.py @@ -7,6 +7,7 @@ from typing import Any, Callable, List, Sequence, Tuple, Type, TypeVar, Union from pydantic import Field, root_validator +from langchain._api import deprecated from langchain.load.serializable import Serializable from langchain.prompts.base import StringPromptTemplate from langchain.prompts.prompt import PromptTemplate @@ -419,6 +420,7 @@ class ChatPromptTemplate(BaseChatPromptTemplate, ABC): return cls.from_messages([message]) @classmethod + @deprecated("0.0.260", alternative="from_messages classmethod.", pending=True) def from_role_strings( cls, string_messages: List[Tuple[str, str]] ) -> ChatPromptTemplate: @@ -438,6 +440,7 @@ class ChatPromptTemplate(BaseChatPromptTemplate, ABC): ) @classmethod + @deprecated("0.0.260", alternative="from_messages classmethod.", pending=True) def from_strings( cls, string_messages: List[Tuple[Type[BaseMessagePromptTemplate], str]] ) -> ChatPromptTemplate: From b7bc8ec87ff921ad0da1798741dc864331874412 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Thu, 10 Aug 2023 14:56:58 -0400 Subject: [PATCH 021/175] Add excludes to FileSystemBlobLoader (#9064) Add option to specify exclude patterns. https://github.com/langchain-ai/langchain/discussions/9059 --- .../blob_loaders/file_system.py | 16 ++ .../test_filesystem_blob_loader.py | 139 ++++++++++++------ 2 files changed, 107 insertions(+), 48 deletions(-) diff --git a/libs/langchain/langchain/document_loaders/blob_loaders/file_system.py b/libs/langchain/langchain/document_loaders/blob_loaders/file_system.py index 4705b2c56..f4d7ec4ce 100644 --- a/libs/langchain/langchain/document_loaders/blob_loaders/file_system.py +++ b/libs/langchain/langchain/document_loaders/blob_loaders/file_system.py @@ -54,6 +54,7 @@ class FileSystemBlobLoader(BlobLoader): path: Union[str, Path], *, glob: str = "**/[!.]*", + exclude: Sequence[str] = (), suffixes: Optional[Sequence[str]] = None, show_progress: bool = False, ) -> None: @@ -63,6 +64,7 @@ class FileSystemBlobLoader(BlobLoader): path: Path to directory to load from glob: Glob pattern relative to the specified path by default set to pick up all non-hidden files + exclude: patterns to exclude from results, use glob syntax suffixes: Provide to keep only files with these suffixes Useful when wanting to keep files with different suffixes Suffixes must include the dot, e.g. ".txt" @@ -77,11 +79,21 @@ class FileSystemBlobLoader(BlobLoader): # Recursively load all text files in a directory. loader = FileSystemBlobLoader("/path/to/directory", glob="**/*.txt") + # Recursively load all files in a directory, except for py or pyc files. + loader = FileSystemBlobLoader( + "/path/to/directory", + glob="**/*.txt", + exclude=["**/*.py", "**/*.pyc"] + ) + # Recursively load all non-hidden files in a directory. loader = FileSystemBlobLoader("/path/to/directory", glob="**/[!.]*") # Load all files in a directory without recursion. loader = FileSystemBlobLoader("/path/to/directory", glob="*") + + # Load all files in a directory without recursion. + """ if isinstance(path, Path): _path = path @@ -94,6 +106,7 @@ class FileSystemBlobLoader(BlobLoader): self.glob = glob self.suffixes = set(suffixes or []) self.show_progress = show_progress + self.exclude = exclude def yield_blobs( self, @@ -110,6 +123,9 @@ class FileSystemBlobLoader(BlobLoader): """Yield paths that match the requested pattern.""" paths = self.path.glob(self.glob) for path in paths: + if self.exclude: + if any(path.match(glob) for glob in self.exclude): + continue if path.is_file(): if self.suffixes and path.suffix not in self.suffixes: continue diff --git a/libs/langchain/tests/unit_tests/document_loaders/blob_loaders/test_filesystem_blob_loader.py b/libs/langchain/tests/unit_tests/document_loaders/blob_loaders/test_filesystem_blob_loader.py index 0c40bc08b..2544f9a14 100644 --- a/libs/langchain/tests/unit_tests/document_loaders/blob_loaders/test_filesystem_blob_loader.py +++ b/libs/langchain/tests/unit_tests/document_loaders/blob_loaders/test_filesystem_blob_loader.py @@ -2,7 +2,7 @@ import os import tempfile from pathlib import Path -from typing import Generator, Sequence +from typing import Generator import pytest @@ -42,56 +42,98 @@ def toy_dir() -> Generator[Path, None, None]: yield Path(temp_dir) -@pytest.mark.parametrize( - "glob, suffixes, relative_filenames", - [ - ( - "**/[!.]*", - None, - [ - "test.html", - "test.txt", - "some_dir/nested_file.txt", - "some_dir/other_dir/more_nested.txt", - ], - ), - ("*", None, ["test.html", "test.txt", ".hidden_file"]), - ("**/*.html", None, ["test.html"]), - ("*/*.txt", None, ["some_dir/nested_file.txt"]), - ( - "**/*.txt", - None, - [ - "test.txt", - "some_dir/nested_file.txt", - "some_dir/other_dir/more_nested.txt", - ], - ), - ( - "**/*", - [".txt"], - [ - "test.txt", - "some_dir/nested_file.txt", - "some_dir/other_dir/more_nested.txt", - ], - ), - ("meeeeeeow", None, []), - ("*", [".html", ".txt"], ["test.html", "test.txt"]), - ], -) -def test_file_names_exist( - toy_dir: str, - glob: str, - suffixes: Sequence[str], - relative_filenames: Sequence[str], -) -> None: +_TEST_CASES = [ + { + "glob": "**/[!.]*", + "suffixes": None, + "exclude": (), + "relative_filenames": [ + "test.html", + "test.txt", + "some_dir/nested_file.txt", + "some_dir/other_dir/more_nested.txt", + ], + }, + { + "glob": "*", + "suffixes": None, + "exclude": (), + "relative_filenames": ["test.html", "test.txt", ".hidden_file"], + }, + { + "glob": "**/*.html", + "suffixes": None, + "exclude": (), + "relative_filenames": ["test.html"], + }, + { + "glob": "*/*.txt", + "suffixes": None, + "exclude": (), + "relative_filenames": ["some_dir/nested_file.txt"], + }, + { + "glob": "**/*.txt", + "suffixes": None, + "exclude": (), + "relative_filenames": [ + "test.txt", + "some_dir/nested_file.txt", + "some_dir/other_dir/more_nested.txt", + ], + }, + { + "glob": "**/*", + "suffixes": [".txt"], + "exclude": (), + "relative_filenames": [ + "test.txt", + "some_dir/nested_file.txt", + "some_dir/other_dir/more_nested.txt", + ], + }, + { + "glob": "meeeeeeow", + "suffixes": None, + "exclude": (), + "relative_filenames": [], + }, + { + "glob": "*", + "suffixes": [".html", ".txt"], + "exclude": (), + "relative_filenames": ["test.html", "test.txt"], + }, + # Using exclude patterns + { + "glob": "**/*", + "suffixes": [".txt"], + "exclude": ("some_dir/*",), + "relative_filenames": ["test.txt", "some_dir/other_dir/more_nested.txt"], + }, + # Using 2 exclude patterns, one of which is recursive + { + "glob": "**/*", + "suffixes": None, + "exclude": ("**/*.txt", ".hidden*"), + "relative_filenames": ["test.html"], + }, +] + + +@pytest.mark.parametrize("params", _TEST_CASES) +def test_file_names_exist(toy_dir: str, params: dict) -> None: """Verify that the file names exist.""" - loader = FileSystemBlobLoader(toy_dir, glob=glob, suffixes=suffixes) - blobs = list(loader.yield_blobs()) + glob_pattern = params["glob"] + suffixes = params["suffixes"] + exclude = params["exclude"] + relative_filenames = params["relative_filenames"] - assert loader.count_matching_files() == len(relative_filenames) + loader = FileSystemBlobLoader( + toy_dir, glob=glob_pattern, suffixes=suffixes, exclude=exclude + ) + blobs = list(loader.yield_blobs()) file_names = sorted(str(blob.path) for blob in blobs) @@ -101,6 +143,7 @@ def test_file_names_exist( ) assert file_names == expected_filenames + assert loader.count_matching_files() == len(relative_filenames) @pytest.mark.requires("tqdm") From e94a5d753fe01aff1fa1592cd59d37fa64ef24a2 Mon Sep 17 00:00:00 2001 From: Mike Lambert Date: Thu, 10 Aug 2023 14:57:28 -0400 Subject: [PATCH 022/175] Move from test to supported claude-instant-1 model (#9066) Moves from "test" model to "claude-instant-1" model which is supported and has actual capacity --- libs/langchain/tests/integration_tests/llms/test_anthropic.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/langchain/tests/integration_tests/llms/test_anthropic.py b/libs/langchain/tests/integration_tests/llms/test_anthropic.py index 1d0a9475b..3604f6196 100644 --- a/libs/langchain/tests/integration_tests/llms/test_anthropic.py +++ b/libs/langchain/tests/integration_tests/llms/test_anthropic.py @@ -11,14 +11,14 @@ from tests.unit_tests.callbacks.fake_callback_handler import FakeCallbackHandler def test_anthropic_call() -> None: """Test valid call to anthropic.""" - llm = Anthropic(model="test") + llm = Anthropic(model="claude-instant-1") output = llm("Say foo:") assert isinstance(output, str) def test_anthropic_streaming() -> None: """Test streaming tokens from anthropic.""" - llm = Anthropic(model="test") + llm = Anthropic(model="claude-instant-1") generator = llm.stream("I'm Pickle Rick") assert isinstance(generator, Generator) From fcbbddedaed196b0aa0377ca8c78b3410f62420f Mon Sep 17 00:00:00 2001 From: Leonid Ganeline Date: Thu, 10 Aug 2023 11:59:39 -0700 Subject: [PATCH 023/175] ArxivLoader fix for issue 9046 (#9061) Fixed #9046 Added ut-s for this fix. @eyurtsev --- libs/langchain/langchain/utilities/arxiv.py | 4 ++- .../document_loaders/test_arxiv.py | 28 +++++++++++++++++++ .../integration_tests/utilities/test_arxiv.py | 5 ++-- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/libs/langchain/langchain/utilities/arxiv.py b/libs/langchain/langchain/utilities/arxiv.py index 246ed8904..bd4aa2f15 100644 --- a/libs/langchain/langchain/utilities/arxiv.py +++ b/libs/langchain/langchain/utilities/arxiv.py @@ -128,6 +128,8 @@ class ArxivAPIWrapper(BaseModel): ) try: + # Remove the ":" and "-" from the query, as they can cause search problems + query = query.replace(":", "").replace("-", "") results = self.arxiv_search( # type: ignore query[: self.ARXIV_MAX_QUERY_LENGTH], max_results=self.load_max_docs ).results() @@ -141,7 +143,7 @@ class ArxivAPIWrapper(BaseModel): doc_file_name: str = result.download_pdf() with fitz.open(doc_file_name) as doc_file: text: str = "".join(page.get_text() for page in doc_file) - except FileNotFoundError as f_ex: + except (FileNotFoundError, fitz.fitz.FileDataError) as f_ex: logger.debug(f_ex) continue if self.load_all_available_meta: diff --git a/libs/langchain/tests/integration_tests/document_loaders/test_arxiv.py b/libs/langchain/tests/integration_tests/document_loaders/test_arxiv.py index 60315e52b..fbd5cf45f 100644 --- a/libs/langchain/tests/integration_tests/document_loaders/test_arxiv.py +++ b/libs/langchain/tests/integration_tests/document_loaders/test_arxiv.py @@ -1,5 +1,7 @@ from typing import List +import pytest + from langchain.document_loaders.arxiv import ArxivLoader from langchain.schema import Document @@ -53,3 +55,29 @@ def test_load_returns_full_set_of_metadata() -> None: ) print(doc.metadata) assert len(set(doc.metadata)) > 4 + + +@pytest.mark.skip(reason="test could be flaky") +def test_load_issue_9046() -> None: + """Test for the fixed issue 9046""" + expected_docs = 3 + + # ":" character could not be an issue + loader = ArxivLoader( + query="MetaGPT: Meta Programming for Multi-Agent Collaborative Framework", + load_max_docs=expected_docs, + ) + docs = loader.load() + + assert_docs(docs) + assert "MetaGPT" in docs[0].metadata["Title"] + + # "-" character could not be an issue + loader = ArxivLoader( + query="MetaGPT - Meta Programming for Multi-Agent Collaborative Framework", + load_max_docs=expected_docs, + ) + docs = loader.load() + + assert_docs(docs) + assert "MetaGPT" in docs[0].metadata["Title"] diff --git a/libs/langchain/tests/integration_tests/utilities/test_arxiv.py b/libs/langchain/tests/integration_tests/utilities/test_arxiv.py index 0fc2fd6de..17dd13374 100644 --- a/libs/langchain/tests/integration_tests/utilities/test_arxiv.py +++ b/libs/langchain/tests/integration_tests/utilities/test_arxiv.py @@ -5,6 +5,7 @@ import pytest from langchain.agents.load_tools import load_tools from langchain.schema import Document +from langchain.tools import ArxivQueryRun from langchain.tools.base import BaseTool from langchain.utilities import ArxivAPIWrapper @@ -81,7 +82,7 @@ def test_load_returns_unlimited_doc_content_chars() -> None: doc_content_chars_max = None api_client = ArxivAPIWrapper(doc_content_chars_max=doc_content_chars_max) docs = api_client.load("1605.08386") - assert len(docs[0].page_content) == 54337 + assert len(docs[0].page_content) == pytest.approx(54338, rel=1e-2) def test_load_returns_full_set_of_metadata() -> None: @@ -120,7 +121,7 @@ def test_load_arxiv_from_universal_entry_with_params() -> None: "load_all_available_meta": True, } arxiv_tool = _load_arxiv_from_universal_entry(**params) - assert isinstance(arxiv_tool, ArxivAPIWrapper) + assert isinstance(arxiv_tool, ArxivQueryRun) wp = arxiv_tool.api_wrapper assert wp.top_k_results == 1, "failed to assert top_k_results" assert wp.load_max_docs == 10, "failed to assert load_max_docs" From 80b98812e139e76a467d21be9eecc0f283c84e0e Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 12:01:20 -0700 Subject: [PATCH 024/175] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b2e823aa..201903c6c 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Looking for the JS/TS version? Check out [LangChain.js](https://github.com/hwcha **Production Support:** As you move your LangChains into production, we'd love to offer more hands-on support. Fill out [this form](https://airtable.com/appwQzlErAS2qiP0L/shrGtGaVBVAz7NcV2) to share more about what you're building, and our team will get in touch. -## 🚨Breaking Changes for select chains (SQLDatabase) on 7/28 +## 🚨Breaking Changes for select chains (SQLDatabase) on 7/28/23 In an effort to make `langchain` leaner and safer, we are moving select chains to `langchain_experimental`. This migration has already started, but we are remaining backwards compatible until 7/28. From a5a4c53280b4dae8ea2e09430fed88e0cd4e03d2 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Thu, 10 Aug 2023 15:30:29 -0400 Subject: [PATCH 025/175] RedisStore: Update init and Documentation updates (#9044) * Update Redis Store to support init from parameters * Update notebook to show how to use redis store, and some fixes in documentation --- .../data_connection/caching_embeddings.ipynb | 425 ++++++++++++------ libs/langchain/langchain/storage/__init__.py | 4 +- libs/langchain/langchain/storage/redis.py | 41 +- .../integration_tests/storage/test_redis.py | 10 +- 4 files changed, 317 insertions(+), 163 deletions(-) diff --git a/docs/extras/modules/data_connection/caching_embeddings.ipynb b/docs/extras/modules/data_connection/caching_embeddings.ipynb index de549ea88..bf87f9e05 100644 --- a/docs/extras/modules/data_connection/caching_embeddings.ipynb +++ b/docs/extras/modules/data_connection/caching_embeddings.ipynb @@ -9,7 +9,7 @@ "\n", "Embeddings can be stored or temporarily cached to avoid needing to recompute them.\n", "\n", - "Caching embeddings can be done using a `CacheBackedEmbedder`.\n", + "Caching embeddings can be done using a `CacheBackedEmbeddings`.\n", "\n", "The cache backed embedder is a wrapper around an embedder that caches\n", "embeddings in a key-value store. \n", @@ -17,7 +17,7 @@ "The text is hashed and the hash is used as the key in the cache.\n", "\n", "\n", - "The main supported way to initialized a `CacheBackedEmbedder` is `from_bytes_store`. This takes in the following parameters:\n", + "The main supported way to initialized a `CacheBackedEmbeddings` is `from_bytes_store`. This takes in the following parameters:\n", "\n", "- underlying_embedder: The embedder to use for embedding.\n", "- document_embedding_cache: The cache to use for storing document embeddings.\n", @@ -28,17 +28,200 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "id": "a463c3c2-749b-40d1-a433-84f68a1cd1c7", "metadata": { "tags": [] }, "outputs": [], "source": [ - "from langchain.embeddings import CacheBackedEmbedder\n", - "from langchain.storage import InMemoryStore\n", - "from langchain.storage import LocalFileStore\n", - "from langchain.embeddings import OpenAIEmbeddings" + "from langchain.storage import InMemoryStore, LocalFileStore, RedisStore\n", + "from langchain.embeddings import OpenAIEmbeddings, CacheBackedEmbeddings" + ] + }, + { + "cell_type": "markdown", + "id": "9ddf07dd-3e72-41de-99d4-78e9521e272f", + "metadata": {}, + "source": [ + "## Using with a vectorstore\n", + "\n", + "First, let's see an example that uses the local file system for storing embeddings and uses FAISS vectorstore for retrieval." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9e4314d8-88ef-4f52-81ae-0be771168bb6", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import TextLoader\n", + "from langchain.embeddings.openai import OpenAIEmbeddings\n", + "from langchain.text_splitter import CharacterTextSplitter\n", + "from langchain.vectorstores import FAISS" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "3e751f26-9b5b-4c10-843a-d784b5ea8538", + "metadata": {}, + "outputs": [], + "source": [ + "underlying_embeddings = OpenAIEmbeddings()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "30743664-38f5-425d-8216-772b64e7f348", + "metadata": {}, + "outputs": [], + "source": [ + "fs = LocalFileStore(\"./cache/\")\n", + "\n", + "cached_embedder = CacheBackedEmbeddings.from_bytes_store(\n", + " underlying_embeddings, fs, namespace=underlying_embeddings.model\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "f8cdf33c-321d-4d2c-b76b-d6f5f8b42a92", + "metadata": {}, + "source": [ + "The cache is empty prior to embedding" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f9ad627f-ced2-4277-b336-2434f22f2c8a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(fs.yield_keys())" + ] + }, + { + "cell_type": "markdown", + "id": "a4effe04-b40f-42f8-a449-72fe6991cf20", + "metadata": {}, + "source": [ + "Load the document, split it into chunks, embed each chunk and load it into the vector store." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "cf958ac2-e60e-4668-b32c-8bb2d78b3c61", + "metadata": {}, + "outputs": [], + "source": [ + "raw_documents = TextLoader(\"../state_of_the_union.txt\").load()\n", + "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\n", + "documents = text_splitter.split_documents(raw_documents)" + ] + }, + { + "cell_type": "markdown", + "id": "f526444b-93f8-423f-b6d1-dab539450921", + "metadata": {}, + "source": [ + "create the vectorstore" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "3a1d7bb8-3b72-4bb5-9013-cf7729caca61", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 608 ms, sys: 58.9 ms, total: 667 ms\n", + "Wall time: 1.3 s\n" + ] + } + ], + "source": [ + "%%time\n", + "db = FAISS.from_documents(documents, cached_embedder)" + ] + }, + { + "cell_type": "markdown", + "id": "64fc53f5-d559-467f-bf62-5daef32ffbc0", + "metadata": {}, + "source": [ + "If we try to create the vectostore again, it'll be much faster since it does not need to re-compute any embeddings." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "714cb2e2-77ba-41a8-bb83-84e75342af2d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 33.6 ms, sys: 3.96 ms, total: 37.6 ms\n", + "Wall time: 36.8 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "db2 = FAISS.from_documents(documents, cached_embedder)" + ] + }, + { + "cell_type": "markdown", + "id": "1acc76b9-9c70-4160-b593-5f932c75e2b6", + "metadata": {}, + "source": [ + "And here are some of the embeddings that got created:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "f2ca32dd-3712-4093-942b-4122f3dc8a8e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['text-embedding-ada-002614d7cf6-46f1-52fa-9d3a-740c39e7a20e',\n", + " 'text-embedding-ada-0020fc1ede2-407a-5e14-8f8f-5642214263f5',\n", + " 'text-embedding-ada-002e4ad20ef-dfaa-5916-9459-f90c6d8e8159',\n", + " 'text-embedding-ada-002a5ef11e4-0474-5725-8d80-81c91943b37f',\n", + " 'text-embedding-ada-00281426526-23fe-58be-9e84-6c7c72c8ca9a']" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(fs.yield_keys())[:5]" ] }, { @@ -54,7 +237,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 14, "id": "13bd1c5b-b7ba-4394-957c-7d5b5a841972", "metadata": { "tags": [] @@ -66,22 +249,22 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 15, "id": "9d99885f-99e1-498c-904d-6db539ac9466", "metadata": { "tags": [] }, "outputs": [], "source": [ - "underlying_embedder = OpenAIEmbeddings()\n", - "embedder = CacheBackedEmbedder.from_bytes_store(\n", - " underlying_embedder, store, namespace=underlying_embedder.model\n", + "underlying_embeddings = OpenAIEmbeddings()\n", + "embedder = CacheBackedEmbeddings.from_bytes_store(\n", + " underlying_embeddings, store, namespace=underlying_embeddings.model\n", ")" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 16, "id": "682eb5d4-0b7a-4dac-b8fb-3de4ca6e421c", "metadata": { "tags": [] @@ -91,8 +274,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 405 ms, sys: 32.9 ms, total: 438 ms\n", - "Wall time: 715 ms\n" + "CPU times: user 10.9 ms, sys: 916 µs, total: 11.8 ms\n", + "Wall time: 159 ms\n" ] } ], @@ -111,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 17, "id": "f819c3ff-a212-4d06-a5f7-5eb1435c1feb", "metadata": { "tags": [] @@ -121,8 +304,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1.55 ms, sys: 436 µs, total: 1.99 ms\n", - "Wall time: 1.99 ms\n" + "CPU times: user 1.67 ms, sys: 342 µs, total: 2.01 ms\n", + "Wall time: 2.01 ms\n" ] } ], @@ -133,7 +316,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 18, "id": "ec38fb72-90a9-4687-a483-c62c87d1f4dd", "metadata": { "tags": [] @@ -145,7 +328,7 @@ "True" ] }, - "execution_count": 6, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -161,38 +344,38 @@ "source": [ "## File system\n", "\n", - "This section covers how to use a file system store" + "This section covers how to use a file system store." ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 19, "id": "a0070271-0809-4528-97e0-2a88216846f3", "metadata": { "tags": [] }, "outputs": [], "source": [ - "fs = LocalFileStore(\"./cache/\")" + "fs = LocalFileStore(\"./test_cache/\")" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 20, "id": "0b20e9fe-f57f-4d7c-9f81-105c5f8726f4", "metadata": { "tags": [] }, "outputs": [], "source": [ - "embedder2 = CacheBackedEmbedder.from_bytes_store(\n", - " underlying_embedder, fs, namespace=underlying_embedder.model\n", + "embedder2 = CacheBackedEmbeddings.from_bytes_store(\n", + " underlying_embeddings, fs, namespace=underlying_embeddings.model\n", ")" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 21, "id": "630515fd-bf5c-4d9c-a404-9705308f3a2c", "metadata": { "tags": [] @@ -202,8 +385,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 10.5 ms, sys: 988 µs, total: 11.5 ms\n", - "Wall time: 220 ms\n" + "CPU times: user 6.89 ms, sys: 4.89 ms, total: 11.8 ms\n", + "Wall time: 184 ms\n" ] } ], @@ -214,7 +397,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 22, "id": "30e6bb87-42c9-4d08-88ac-0d22c9c449a1", "metadata": { "tags": [] @@ -224,8 +407,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 3.49 ms, sys: 0 ns, total: 3.49 ms\n", - "Wall time: 3.03 ms\n" + "CPU times: user 0 ns, sys: 3.24 ms, total: 3.24 ms\n", + "Wall time: 2.84 ms\n" ] } ], @@ -239,14 +422,14 @@ "id": "12ed5a45-8352-4e0f-8583-5537397f53c0", "metadata": {}, "source": [ - "Here are the embeddings that have been persisted to the directory `./cache`. \n", + "Here are the embeddings that have been persisted to the directory `./test_cache`. \n", "\n", "Notice that the embedder takes a namespace parameter." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 23, "id": "658e2914-05e9-44a3-a8fe-3fe17ca84039", "metadata": {}, "outputs": [ @@ -257,7 +440,7 @@ " 'text-embedding-ada-0026ba52e44-59c9-5cc9-a084-284061b13c80']" ] }, - "execution_count": 11, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -268,53 +451,84 @@ }, { "cell_type": "markdown", - "id": "c67f8e97-4851-4e26-ab6f-3418b0188dc4", + "id": "cd5f5a96-6ffa-429d-aa82-00b3f6532871", "metadata": {}, "source": [ - "## Using with a vectorstore\n", - "\n", - "Let's see this cache in action with the FAISS vectorstore." + "## Redis Store\n", + "\n" ] }, { "cell_type": "code", - "execution_count": 12, - "id": "9e4314d8-88ef-4f52-81ae-0be771168bb6", + "execution_count": 24, + "id": "4879c134-141f-48a0-acfe-7d6f30253af0", "metadata": {}, "outputs": [], "source": [ - "from langchain.document_loaders import TextLoader\n", - "from langchain.embeddings.openai import OpenAIEmbeddings\n", - "from langchain.text_splitter import CharacterTextSplitter\n", - "from langchain.vectorstores import FAISS" + "from langchain.storage import RedisStore" ] }, { "cell_type": "code", - "execution_count": 13, - "id": "30743664-38f5-425d-8216-772b64e7f348", + "execution_count": 25, + "id": "8b2bb9a0-6549-4487-8532-29ab4ab7336f", "metadata": {}, "outputs": [], "source": [ - "fs = LocalFileStore(\"./cache/\")\n", + "# For cache isolation can use a separate DB\n", + "# Or additional namepace\n", + "store = RedisStore(redis_url=\"redis://localhost:6379\", client_kwargs={'db': 2}, namespace='embedding_caches')\n", "\n", - "cached_embedder = CacheBackedEmbedder.from_bytes_store(\n", - " OpenAIEmbeddings(), fs, namespace=underlying_embedder.model\n", + "underlying_embeddings = OpenAIEmbeddings()\n", + "embedder = CacheBackedEmbeddings.from_bytes_store(\n", + " underlying_embeddings, store, namespace=underlying_embeddings.model\n", ")" ] }, { - "cell_type": "markdown", - "id": "06a6f305-724f-4b71-adef-be0169f61381", + "cell_type": "code", + "execution_count": 26, + "id": "eca3cb99-2bb3-49d5-81f9-1dee03da4b8c", "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 3.99 ms, sys: 0 ns, total: 3.99 ms\n", + "Wall time: 3.5 ms\n" + ] + } + ], "source": [ - "The cache is empty prior to embedding" + "%%time\n", + "embeddings = embedder.embed_documents([\"hello\", \"goodbye\"])" ] }, { "cell_type": "code", - "execution_count": 14, - "id": "f9ad627f-ced2-4277-b336-2434f22f2c8a", + "execution_count": 27, + "id": "317ba5d8-89f9-462c-b807-ad4ef26e518b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 2.47 ms, sys: 767 µs, total: 3.24 ms\n", + "Wall time: 2.75 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "embeddings = embedder.embed_documents([\"hello\", \"goodbye\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "8a540317-5142-4491-9062-a097932b56e3", "metadata": {}, "outputs": [ { @@ -324,122 +538,35 @@ " 'text-embedding-ada-0026ba52e44-59c9-5cc9-a084-284061b13c80']" ] }, - "execution_count": 14, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "list(fs.yield_keys())" - ] - }, - { - "cell_type": "markdown", - "id": "5814aa9c-e8e4-4079-accf-53c49615971e", - "metadata": {}, - "source": [ - "Load the document, split it into chunks, embed each chunk and load it into the vector store." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "cf958ac2-e60e-4668-b32c-8bb2d78b3c61", - "metadata": {}, - "outputs": [], - "source": [ - "raw_documents = TextLoader(\"../state_of_the_union.txt\").load()\n", - "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\n", - "documents = text_splitter.split_documents(raw_documents)" - ] - }, - { - "cell_type": "markdown", - "id": "fc433fec-ab64-4f11-ae8b-fc3dd76cd79a", - "metadata": {}, - "source": [ - "create the vectorstore" + "list(store.yield_keys())" ] }, { "cell_type": "code", "execution_count": 17, - "id": "3a1d7bb8-3b72-4bb5-9013-cf7729caca61", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 124 ms, sys: 22.6 ms, total: 146 ms\n", - "Wall time: 832 ms\n" - ] - } - ], - "source": [ - "%%time\n", - "db = FAISS.from_documents(documents, cached_embedder)" - ] - }, - { - "cell_type": "markdown", - "id": "c94a734c-fa66-40ce-8610-12b00b7df334", - "metadata": {}, - "source": [ - "If we try to create the vectostore again, it'll be much faster since it does not need to re-compute any embeddings." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "714cb2e2-77ba-41a8-bb83-84e75342af2d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 32.9 ms, sys: 286 µs, total: 33.2 ms\n", - "Wall time: 32.5 ms\n" - ] - } - ], - "source": [ - "%%time\n", - "db2 = FAISS.from_documents(documents, cached_embedder)" - ] - }, - { - "cell_type": "markdown", - "id": "93d37b2a-5406-4e2c-b786-869e2430d19d", - "metadata": {}, - "source": [ - "And here are some of the embeddings that got created:" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "f2ca32dd-3712-4093-942b-4122f3dc8a8e", + "id": "cd9b0d4a-f816-4dce-9dde-cde1ad9a65fb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['text-embedding-ada-002614d7cf6-46f1-52fa-9d3a-740c39e7a20e',\n", - " 'text-embedding-ada-0020fc1ede2-407a-5e14-8f8f-5642214263f5',\n", - " 'text-embedding-ada-002e885db5b-c0bd-5fbc-88b1-4d1da6020aa5',\n", - " 'text-embedding-ada-002e4ad20ef-dfaa-5916-9459-f90c6d8e8159',\n", - " 'text-embedding-ada-002a5ef11e4-0474-5725-8d80-81c91943b37f']" + "[b'embedding_caches/text-embedding-ada-002e885db5b-c0bd-5fbc-88b1-4d1da6020aa5',\n", + " b'embedding_caches/text-embedding-ada-0026ba52e44-59c9-5cc9-a084-284061b13c80']" ] }, - "execution_count": 19, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "list(fs.yield_keys())[:5]" + "list(store.client.scan_iter())" ] } ], diff --git a/libs/langchain/langchain/storage/__init__.py b/libs/langchain/langchain/storage/__init__.py index 6b0511aba..ecc2e817f 100644 --- a/libs/langchain/langchain/storage/__init__.py +++ b/libs/langchain/langchain/storage/__init__.py @@ -9,9 +9,11 @@ The primary goal of these storages is to support implementation of caching. from langchain.storage.encoder_backed import EncoderBackedStore from langchain.storage.file_system import LocalFileStore from langchain.storage.in_memory import InMemoryStore +from langchain.storage.redis import RedisStore __all__ = [ "EncoderBackedStore", - "LocalFileStore", "InMemoryStore", + "LocalFileStore", + "RedisStore", ] diff --git a/libs/langchain/langchain/storage/redis.py b/libs/langchain/langchain/storage/redis.py index 900144aa2..bfb3e4a4a 100644 --- a/libs/langchain/langchain/storage/redis.py +++ b/libs/langchain/langchain/storage/redis.py @@ -1,6 +1,7 @@ from typing import Any, Iterator, List, Optional, Sequence, Tuple, cast from langchain.schema import BaseStore +from langchain.utilities.redis import get_client class RedisStore(BaseStore[str, bytes]): @@ -13,7 +14,7 @@ class RedisStore(BaseStore[str, bytes]): # Instantiate the RedisStore with a Redis connection from langchain.storage import RedisStore - from langchain.vectorstores.redis import get_client + from langchain.utilities.redis import get_client client = get_client('redis://localhost:6379') redis_store = RedisStore(client) @@ -34,12 +35,22 @@ class RedisStore(BaseStore[str, bytes]): """ def __init__( - self, client: Any, *, ttl: Optional[int] = None, namespace: Optional[str] = None + self, + *, + client: Any = None, + redis_url: Optional[str] = None, + client_kwargs: Optional[dict] = None, + ttl: Optional[int] = None, + namespace: Optional[str] = None, ) -> None: """Initialize the RedisStore with a Redis connection. + Must provide either a Redis client or a redis_url with optional client_kwargs. + Args: client: A Redis connection instance + redis_url: redis url + client_kwargs: Keyword arguments to pass to the Redis client ttl: time to expire keys in seconds if provided, if None keys will never expire namespace: if provided, all keys will be prefixed with this namespace @@ -52,19 +63,32 @@ class RedisStore(BaseStore[str, bytes]): "pip install redis" ) from e - if not isinstance(client, Redis): - raise TypeError( - f"Expected Redis client, got {type(client).__name__} instead." + if client and redis_url or client and client_kwargs: + raise ValueError( + "Either a Redis client or a redis_url with optional client_kwargs " + "must be provided, but not both." ) - self.client = client + if client: + if not isinstance(client, Redis): + raise TypeError( + f"Expected Redis client, got {type(client).__name__} instead." + ) + _client = client + else: + if not redis_url: + raise ValueError( + "Either a Redis client or a redis_url must be provided." + ) + _client = get_client(redis_url, **(client_kwargs or {})) + + self.client = _client if not isinstance(ttl, int) and ttl is not None: raise TypeError(f"Expected int or None, got {type(ttl)} instead.") self.ttl = ttl self.namespace = namespace - self.namespace_delimiter = "/" def _get_prefixed_key(self, key: str) -> str: """Get the key with the namespace prefix. @@ -75,8 +99,9 @@ class RedisStore(BaseStore[str, bytes]): Returns: str: The key with the namespace prefix. """ + delimiter = "/" if self.namespace: - return f"{self.namespace}{self.namespace_delimiter}{key}" + return f"{self.namespace}{delimiter}{key}" return key def mget(self, keys: Sequence[str]) -> List[Optional[bytes]]: diff --git a/libs/langchain/tests/integration_tests/storage/test_redis.py b/libs/langchain/tests/integration_tests/storage/test_redis.py index c5b4a6959..109c8b1f5 100644 --- a/libs/langchain/tests/integration_tests/storage/test_redis.py +++ b/libs/langchain/tests/integration_tests/storage/test_redis.py @@ -41,7 +41,7 @@ def redis_client() -> Redis: def test_mget(redis_client: Redis) -> None: """Test mget method.""" - store = RedisStore(redis_client, ttl=None) + store = RedisStore(client=redis_client, ttl=None) keys = ["key1", "key2"] redis_client.mset({"key1": b"value1", "key2": b"value2"}) result = store.mget(keys) @@ -50,7 +50,7 @@ def test_mget(redis_client: Redis) -> None: def test_mset(redis_client: Redis) -> None: """Test that multiple keys can be set.""" - store = RedisStore(redis_client, ttl=None) + store = RedisStore(client=redis_client, ttl=None) key_value_pairs = [("key1", b"value1"), ("key2", b"value2")] store.mset(key_value_pairs) result = redis_client.mget(["key1", "key2"]) @@ -59,7 +59,7 @@ def test_mset(redis_client: Redis) -> None: def test_mdelete(redis_client: Redis) -> None: """Test that deletion works as expected.""" - store = RedisStore(redis_client, ttl=None) + store = RedisStore(client=redis_client, ttl=None) keys = ["key1", "key2"] redis_client.mset({"key1": b"value1", "key2": b"value2"}) store.mdelete(keys) @@ -68,7 +68,7 @@ def test_mdelete(redis_client: Redis) -> None: def test_yield_keys(redis_client: Redis) -> None: - store = RedisStore(redis_client, ttl=None) + store = RedisStore(client=redis_client, ttl=None) redis_client.mset({"key1": b"value1", "key2": b"value2"}) assert sorted(store.yield_keys()) == ["key1", "key2"] assert sorted(store.yield_keys(prefix="key*")) == ["key1", "key2"] @@ -77,7 +77,7 @@ def test_yield_keys(redis_client: Redis) -> None: def test_namespace(redis_client: Redis) -> None: """Test that a namespace is prepended to all keys properly.""" - store = RedisStore(redis_client, ttl=None, namespace="meow") + store = RedisStore(client=redis_client, ttl=None, namespace="meow") key_value_pairs = [("key1", b"value1"), ("key2", b"value2")] store.mset(key_value_pairs) From 1edead28b87c0e4ec32a247a2546f4abe5c051e7 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 13:41:35 -0700 Subject: [PATCH 026/175] Add docs community page (#8992) Co-authored-by: briannawolfson --- docs/docs_skeleton/docs/community.md | 54 ++++++++++++++++++++++++++++ docs/docs_skeleton/sidebars.js | 1 + 2 files changed, 55 insertions(+) create mode 100644 docs/docs_skeleton/docs/community.md diff --git a/docs/docs_skeleton/docs/community.md b/docs/docs_skeleton/docs/community.md new file mode 100644 index 000000000..934a88ed1 --- /dev/null +++ b/docs/docs_skeleton/docs/community.md @@ -0,0 +1,54 @@ +# Community Navigator + +Hi! Thanks for being here. We’re lucky to have a community of so many passionate developers building with LangChain–we have so much to teach and learn from each other. Community members contribute code, host meetups, write blog posts, amplify each other’s work, become each other's customers and collaborators, and so much more. + +Whether you’re new to LangChain, looking to go deeper, or just want to get more exposure to the world of building with LLMs, this page can point you in the right direction. + +- **🦜 Contribute to LangChain** + +- **🌍 Meetups, Events, and Hackathons** + +- **📣 Help Us Amplify Your Work** + +- **💬 Stay in the loop** + + +# 🦜 Contribute to LangChain + +LangChain is the product of over 5,000+ contributions by 1,500+ contributors, and there is ******still****** so much to do together. Here are some ways to get involved: + +- **[Open a pull request](https://github.com/langchain-ai/langchain/issues):** we’d appreciate all forms of contributions–new features, infrastructure improvements, better documentation, bug fixes, etc. If you have an improvement or an idea, we’d love to work on it with you. +- **[Read our contributor guidelines:](https://github.com/langchain-ai/langchain/blob/bbd22b9b761389a5e40fc45b0570e1830aabb707/.github/CONTRIBUTING.md)** We ask contributors to follow a ["fork and pull request"](https://docs.github.com/en/get-started/quickstart/contributing-to-projects) workflow, run a few local checks for formatting, linting, and testing before submitting, and follow certain documentation and testing conventions. + - **First time contributor?** [Try one of these PRs with the “good first issue” tag](https://github.com/langchain-ai/langchain/contribute). +- **Become an expert:** our experts help the community by answering product questions in Discord. If that’s a role you’d like to play, we’d be so grateful! (And we have some special experts-only goodies/perks we can tell you more about). Send us an email to introduce yourself at hello@langchain.dev and we’ll take it from there! +- **Integrate with LangChain:** if your product integrates with LangChain–or aspires to–we want to help make sure the experience is as smooth as possible for you and end users. Send us an email at hello@langchain.dev and tell us what you’re working on. + - **Become an Integration Maintainer:** Partner with our team to ensure your integration stays up-to-date and talk directly with users (and answer their inquiries) in our Discord. Introduce yourself at hello@langchain.dev if you’d like to explore this role. + + +# 🌍 Meetups, Events, and Hackathons + +One of our favorite things about working in AI is how much enthusiasm there is for building together. We want to help make that as easy and impactful for you as possible! +- **Find a meetup, hackathon, or webinar:** you can find the one for you on on our [global events calendar](https://mirror-feeling-d80.notion.site/0bc81da76a184297b86ca8fc782ee9a3?v=0d80342540df465396546976a50cfb3f). + - **Submit an event to our calendar:** email us at events@langchain.dev with a link to your event page! We can also help you spread the word with our local communities. +- **Host a meetup:** If you want to bring a group of builders together, we want to help! We can publicize your event on our event calendar/Twitter, share with our local communities in Discord, send swag, or potentially hook you up with a sponsor. Email us at events@langchain.dev to tell us about your event! +- **Become a meetup sponsor:** we often hear from groups of builders that want to get together, but are blocked or limited on some dimension (space to host, budget for snacks, prizes to distribute, etc.). If you’d like to help, send us an email to events@langchain.dev we can share more about how it works! +- **Speak at an event:** meetup hosts are always looking for great speakers, presenters, and panelists. If you’d like to do that at an event, send us an email to hello@langchain.dev with more information about yourself, what you want to talk about, and what city you’re based in and we’ll try to match you with an upcoming event! +- **Tell us about your LLM community:** If you host or participate in a community that would welcome support from LangChain and/or our team, send us an email at hello@langchain.dev and let us know how we can help. + +# 📣 Help Us Amplify Your Work + +If you’re working on something you’re proud of, and think the LangChain community would benefit from knowing about it, we want to help you show it off. + +- **Post about your work and mention us:** we love hanging out on Twitter to see what people in the space are talking about and working on. If you tag [@langchainai](https://twitter.com/LangChainAI), we’ll almost certainly see it and can show you some love. +- **Publish something on our blog:** if you’re writing about your experience building with LangChain, we’d love to post (or crosspost) it on our blog! E-mail hello@langchain.dev with a draft of your post! Or even an idea for something you want to write about. +- **Get your product onto our [integrations hub](https://integrations.langchain.com/):** Many developers take advantage of our seamless integrations with other products, and come to our integrations hub to find out who those are. If you want to get your product up there, tell us about it (and how it works with LangChain) at hello@langchain.dev. + +# ☀️ Stay in the loop + +Here’s where our team hangs out, talks shop, spotlights cool work, and shares what we’re up to. We’d love to see you there too. + +- **[Twitter](https://twitter.com/LangChainAI):** we post about what we’re working on and what cool things we’re seeing in the space. If you tag @langchainai in your post, we’ll almost certainly see it, and can snow you some love! +- **[Discord](https://discord.gg/6adMQxSpJS):** connect with with >30k developers who are building with LangChain +- **[GitHub](https://github.com/langchain-ai/langchain):** open pull requests, contribute to a discussion, and/or contribute +- **[Subscribe to our bi-weekly Release Notes](https://6w1pwbss0py.typeform.com/to/KjZB1auB):** a twice/month email roundup of the coolest things going on in our orbit +- **Slack:** if you’re building an application in production at your company, we’d love to get into a Slack channel together. Fill out [this form](https://airtable.com/appwQzlErAS2qiP0L/shrGtGaVBVAz7NcV2) and we’ll get in touch about setting one up. diff --git a/docs/docs_skeleton/sidebars.js b/docs/docs_skeleton/sidebars.js index 308782e49..90950592b 100644 --- a/docs/docs_skeleton/sidebars.js +++ b/docs/docs_skeleton/sidebars.js @@ -75,6 +75,7 @@ module.exports = { slug: "additional_resources", }, }, + 'community' ], integrations: [ { From e3fb11bc10a46eeb801a5ab070ef7ef305c3d408 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Thu, 10 Aug 2023 16:46:06 -0400 Subject: [PATCH 027/175] docs: (Mendable Search) Fixes stuck when tabbing out issue (#9074) This fixes Mendable not completing when tabbing out and fixes the duplicate message issue as well. --- docs/docs_skeleton/package-lock.json | 8 ++++---- docs/docs_skeleton/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs_skeleton/package-lock.json b/docs/docs_skeleton/package-lock.json index 9a9c91f90..db966d261 100644 --- a/docs/docs_skeleton/package-lock.json +++ b/docs/docs_skeleton/package-lock.json @@ -12,7 +12,7 @@ "@docusaurus/preset-classic": "2.4.0", "@docusaurus/remark-plugin-npm2yarn": "^2.4.0", "@mdx-js/react": "^1.6.22", - "@mendable/search": "^0.0.137", + "@mendable/search": "^0.0.150", "clsx": "^1.2.1", "json-loader": "^0.5.7", "process": "^0.11.10", @@ -3212,9 +3212,9 @@ } }, "node_modules/@mendable/search": { - "version": "0.0.137", - "resolved": "https://registry.npmjs.org/@mendable/search/-/search-0.0.137.tgz", - "integrity": "sha512-2J2fd5eqToK+mLzrSDA6NAr4F1kfql7QRiHpD7AUJJX0nqpvInhr/mMJKBCUSCv2z76UKCmF5wLuPSw+C90Qdg==", + "version": "0.0.150", + "resolved": "https://registry.npmjs.org/@mendable/search/-/search-0.0.150.tgz", + "integrity": "sha512-Eb5SeAWlMxzEim/8eJ/Ysn01Pyh39xlPBzRBw/5OyOBhti0HVLXk4wd1Fq2TKgJC2ppQIvhEKO98PUcj9dNDFw==", "dependencies": { "html-react-parser": "^4.2.0", "posthog-js": "^1.45.1" diff --git a/docs/docs_skeleton/package.json b/docs/docs_skeleton/package.json index b280212e8..8256b3a33 100644 --- a/docs/docs_skeleton/package.json +++ b/docs/docs_skeleton/package.json @@ -23,7 +23,7 @@ "@docusaurus/preset-classic": "2.4.0", "@docusaurus/remark-plugin-npm2yarn": "^2.4.0", "@mdx-js/react": "^1.6.22", - "@mendable/search": "^0.0.137", + "@mendable/search": "^0.0.150", "clsx": "^1.2.1", "json-loader": "^0.5.7", "process": "^0.11.10", From 46f3428cb38f501b0ae775de2e583ac808d4c6d7 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Thu, 10 Aug 2023 16:49:15 -0400 Subject: [PATCH 028/175] Fix more incorrect code blocks in doc strings (#9073) Fix 2 more incorrect code blocks in strings --- libs/langchain/langchain/chains/base.py | 2 +- libs/langchain/langchain/embeddings/cache.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/langchain/langchain/chains/base.py b/libs/langchain/langchain/chains/base.py index 751dcbd58..bfdee8224 100644 --- a/libs/langchain/langchain/chains/base.py +++ b/libs/langchain/langchain/chains/base.py @@ -577,7 +577,7 @@ class Chain(Serializable, Runnable[Dict[str, Any], Dict[str, Any]], ABC): A dictionary representation of the chain. Example: - ..code-block:: python + .. code-block:: python chain.dict(exclude_unset=True) # -> {"_type": "foo", "verbose": False, ...} diff --git a/libs/langchain/langchain/embeddings/cache.py b/libs/langchain/langchain/embeddings/cache.py index f3833e0fe..7acdc2873 100644 --- a/libs/langchain/langchain/embeddings/cache.py +++ b/libs/langchain/langchain/embeddings/cache.py @@ -59,7 +59,7 @@ class CacheBackedEmbeddings(Embeddings): Examples: - ..code-block:: python + .. code-block: python from langchain.embeddings import CacheBackedEmbeddings, OpenAIEmbeddings from langchain.storage import LocalFileStore From 67ca1875603b0743b28717e946f90c86bec4b75e Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Thu, 10 Aug 2023 17:13:42 -0400 Subject: [PATCH 029/175] Fix incorrect code blocks in documentation (#9060) Fixes incorrect code block syntax in doc strings. --- .../blob_loaders/file_system.py | 29 ++++++------ .../langchain/document_loaders/generic.py | 6 +-- .../parsers/language/language_parser.py | 6 +-- .../retrievers/parent_document_retriever.py | 45 ++++++++++--------- libs/langchain/langchain/storage/in_memory.py | 3 +- libs/langchain/langchain/tools/base.py | 4 +- 6 files changed, 47 insertions(+), 46 deletions(-) diff --git a/libs/langchain/langchain/document_loaders/blob_loaders/file_system.py b/libs/langchain/langchain/document_loaders/blob_loaders/file_system.py index f4d7ec4ce..aecc1d62f 100644 --- a/libs/langchain/langchain/document_loaders/blob_loaders/file_system.py +++ b/libs/langchain/langchain/document_loaders/blob_loaders/file_system.py @@ -74,26 +74,23 @@ class FileSystemBlobLoader(BlobLoader): Examples: - ... code-block:: python + .. code-block:: python - # Recursively load all text files in a directory. - loader = FileSystemBlobLoader("/path/to/directory", glob="**/*.txt") + # Recursively load all text files in a directory. + loader = FileSystemBlobLoader("/path/to/directory", glob="**/*.txt") - # Recursively load all files in a directory, except for py or pyc files. - loader = FileSystemBlobLoader( - "/path/to/directory", - glob="**/*.txt", - exclude=["**/*.py", "**/*.pyc"] - ) + # Recursively load all non-hidden files in a directory. + loader = FileSystemBlobLoader("/path/to/directory", glob="**/[!.]*") - # Recursively load all non-hidden files in a directory. - loader = FileSystemBlobLoader("/path/to/directory", glob="**/[!.]*") - - # Load all files in a directory without recursion. - loader = FileSystemBlobLoader("/path/to/directory", glob="*") - - # Load all files in a directory without recursion. + # Load all files in a directory without recursion. + loader = FileSystemBlobLoader("/path/to/directory", glob="*") + # Recursively load all files in a directory, except for py or pyc files. + loader = FileSystemBlobLoader( + "/path/to/directory", + glob="**/*.txt", + exclude=["**/*.py", "**/*.pyc"] + ) """ if isinstance(path, Path): _path = path diff --git a/libs/langchain/langchain/document_loaders/generic.py b/libs/langchain/langchain/document_loaders/generic.py index 0625507b2..7dbfc6e1e 100644 --- a/libs/langchain/langchain/document_loaders/generic.py +++ b/libs/langchain/langchain/document_loaders/generic.py @@ -22,7 +22,7 @@ class GenericLoader(BaseLoader): Examples: - .. code-block:: python + .. code-block:: python from langchain.document_loaders import GenericLoader from langchain.document_loaders.blob_loaders import FileSystemBlobLoader @@ -39,7 +39,7 @@ class GenericLoader(BaseLoader): Example instantiations to change which files are loaded: - ... code-block:: python + .. code-block:: python # Recursively load all text files in a directory. loader = GenericLoader.from_filesystem("/path/to/dir", glob="**/*.txt") @@ -52,7 +52,7 @@ class GenericLoader(BaseLoader): Example instantiations to change which parser is used: - ... code-block:: python + .. code-block:: python from langchain.document_loaders.parsers.pdf import PyPDFParser diff --git a/libs/langchain/langchain/document_loaders/parsers/language/language_parser.py b/libs/langchain/langchain/document_loaders/parsers/language/language_parser.py index 3b3928cd6..12a11380c 100644 --- a/libs/langchain/langchain/document_loaders/parsers/language/language_parser.py +++ b/libs/langchain/langchain/document_loaders/parsers/language/language_parser.py @@ -35,7 +35,7 @@ class LanguageParser(BaseBlobParser): Examples: - .. code-block:: python + .. code-block:: python from langchain.text_splitter.Language from langchain.document_loaders.generic import GenericLoader @@ -51,7 +51,7 @@ class LanguageParser(BaseBlobParser): Example instantiations to manually select the language: - ... code-block:: python + .. code-block:: python from langchain.text_splitter import Language @@ -64,7 +64,7 @@ class LanguageParser(BaseBlobParser): Example instantiations to set number of lines threshold: - ... code-block:: python + .. code-block:: python loader = GenericLoader.from_filesystem( "./code", diff --git a/libs/langchain/langchain/retrievers/parent_document_retriever.py b/libs/langchain/langchain/retrievers/parent_document_retriever.py index ce6906713..f427b1f7b 100644 --- a/libs/langchain/langchain/retrievers/parent_document_retriever.py +++ b/libs/langchain/langchain/retrievers/parent_document_retriever.py @@ -30,31 +30,32 @@ class ParentDocumentRetriever(BaseRetriever): chunk. Examples: - ... code-block:: python - # Imports - from langchain.vectorstores import Chroma - from langchain.embeddings import OpenAIEmbeddings - from langchain.text_splitter import RecursiveCharacterTextSplitter - from langchain.storage import InMemoryStore + .. code-block:: python - # This text splitter is used to create the parent documents - parent_splitter = RecursiveCharacterTextSplitter(chunk_size=2000) - # This text splitter is used to create the child documents - # It should create documents smaller than the parent - child_splitter = RecursiveCharacterTextSplitter(chunk_size=400) - # The vectorstore to use to index the child chunks - vectorstore = Chroma(embedding_function=OpenAIEmbeddings()) - # The storage layer for the parent documents - store = InMemoryStore() + # Imports + from langchain.vectorstores import Chroma + from langchain.embeddings import OpenAIEmbeddings + from langchain.text_splitter import RecursiveCharacterTextSplitter + from langchain.storage import InMemoryStore - # Initialize the retriever - retriever = ParentDocumentRetriever( - vectorstore=vectorstore, - docstore=store, - child_splitter=child_splitter, - parent_splitter=parent_splitter, - ) + # This text splitter is used to create the parent documents + parent_splitter = RecursiveCharacterTextSplitter(chunk_size=2000) + # This text splitter is used to create the child documents + # It should create documents smaller than the parent + child_splitter = RecursiveCharacterTextSplitter(chunk_size=400) + # The vectorstore to use to index the child chunks + vectorstore = Chroma(embedding_function=OpenAIEmbeddings()) + # The storage layer for the parent documents + store = InMemoryStore() + + # Initialize the retriever + retriever = ParentDocumentRetriever( + vectorstore=vectorstore, + docstore=store, + child_splitter=child_splitter, + parent_splitter=parent_splitter, + ) """ vectorstore: VectorStore diff --git a/libs/langchain/langchain/storage/in_memory.py b/libs/langchain/langchain/storage/in_memory.py index 906d08e85..3350f75f4 100644 --- a/libs/langchain/langchain/storage/in_memory.py +++ b/libs/langchain/langchain/storage/in_memory.py @@ -16,7 +16,8 @@ class InMemoryStore(BaseStore[str, Any]): the key-value pairs. Examples: - ... code-block:: python + + .. code-block:: python from langchain.storage import InMemoryStore diff --git a/libs/langchain/langchain/tools/base.py b/libs/langchain/langchain/tools/base.py index f8607d514..732940bd0 100644 --- a/libs/langchain/langchain/tools/base.py +++ b/libs/langchain/langchain/tools/base.py @@ -663,7 +663,9 @@ class StructuredTool(BaseTool): The tool Examples: - ... code-block:: python + + .. code-block:: python + def add(a: int, b: int) -> int: \"\"\"Add two numbers\"\"\" return a + b From 8eea46ed0e16f238168d8073063490f4449fbff2 Mon Sep 17 00:00:00 2001 From: Piyush Jain Date: Thu, 10 Aug 2023 14:21:03 -0700 Subject: [PATCH 030/175] Bedrock embeddings async methods (#9024) ## Description This PR adds the `aembed_query` and `aembed_documents` async methods for improving the embeddings generation for large documents. The implementation uses asyncio tasks and gather to achieve concurrency as there is no bedrock async API in boto3. ### Maintainers @agola11 @aarora79 ### Open questions To avoid throttling from the Bedrock API, should there be an option to limit the concurrency of the calls? --- docs/extras/integrations/llms/bedrock.ipynb | 5 +-- .../integrations/text_embedding/bedrock.ipynb | 30 ++++++++++++-- .../langchain/langchain/embeddings/bedrock.py | 40 +++++++++++++++---- 3 files changed, 60 insertions(+), 15 deletions(-) diff --git a/docs/extras/integrations/llms/bedrock.ipynb b/docs/extras/integrations/llms/bedrock.ipynb index 56847a00f..06ae9f4ce 100644 --- a/docs/extras/integrations/llms/bedrock.ipynb +++ b/docs/extras/integrations/llms/bedrock.ipynb @@ -31,12 +31,11 @@ }, "outputs": [], "source": [ - "from langchain.llms.bedrock import Bedrock\n", + "from langchain.llms import Bedrock\n", "\n", "llm = Bedrock(\n", " credentials_profile_name=\"bedrock-admin\",\n", - " model_id=\"amazon.titan-tg1-large\",\n", - " endpoint_url=\"custom_endpoint_url\",\n", + " model_id=\"amazon.titan-tg1-large\"\n", ")" ] }, diff --git a/docs/extras/integrations/text_embedding/bedrock.ipynb b/docs/extras/integrations/text_embedding/bedrock.ipynb index a69c99de1..7c16cb8ea 100644 --- a/docs/extras/integrations/text_embedding/bedrock.ipynb +++ b/docs/extras/integrations/text_embedding/bedrock.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "282239c8-e03a-4abc-86c1-ca6120231a20", "metadata": {}, "outputs": [], @@ -28,7 +28,7 @@ "from langchain.embeddings import BedrockEmbeddings\n", "\n", "embeddings = BedrockEmbeddings(\n", - " credentials_profile_name=\"bedrock-admin\", endpoint_url=\"custom_endpoint_url\"\n", + " credentials_profile_name=\"bedrock-admin\", region_name=\"us-east-1\"\n", ")" ] }, @@ -49,7 +49,29 @@ "metadata": {}, "outputs": [], "source": [ - "embeddings.embed_documents([\"This is a content of the document\"])" + "embeddings.embed_documents([\"This is a content of the document\", \"This is another document\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9f6b364d", + "metadata": {}, + "outputs": [], + "source": [ + "# async embed query\n", + "await embeddings.aembed_query(\"This is a content of the document\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c9240a5a", + "metadata": {}, + "outputs": [], + "source": [ + "# async embed documents\n", + "await embeddings.aembed_documents([\"This is a content of the document\", \"This is another document\"])" ] } ], @@ -69,7 +91,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.13" } }, "nbformat": 4, diff --git a/libs/langchain/langchain/embeddings/bedrock.py b/libs/langchain/langchain/embeddings/bedrock.py index 93b3d69bb..9396b320c 100644 --- a/libs/langchain/langchain/embeddings/bedrock.py +++ b/libs/langchain/langchain/embeddings/bedrock.py @@ -1,5 +1,7 @@ +import asyncio import json import os +from functools import partial from typing import Any, Dict, List, Optional from pydantic import BaseModel, Extra, root_validator @@ -128,17 +130,11 @@ class BedrockEmbeddings(BaseModel, Embeddings): except Exception as e: raise ValueError(f"Error raised by inference endpoint: {e}") - def embed_documents( - self, texts: List[str], chunk_size: int = 1 - ) -> List[List[float]]: + def embed_documents(self, texts: List[str]) -> List[List[float]]: """Compute doc embeddings using a Bedrock model. Args: - texts: The list of texts to embed. - chunk_size: Bedrock currently only allows single string - inputs, so chunk size is always 1. This input is here - only for compatibility with the embeddings interface. - + texts: The list of texts to embed Returns: List of embeddings, one for each text. @@ -159,3 +155,31 @@ class BedrockEmbeddings(BaseModel, Embeddings): Embeddings for the text. """ return self._embedding_func(text) + + async def aembed_query(self, text: str) -> List[float]: + """Asynchronous compute query embeddings using a Bedrock model. + + Args: + text: The text to embed. + + Returns: + Embeddings for the text. + """ + + return await asyncio.get_running_loop().run_in_executor( + None, partial(self.embed_query, text) + ) + + async def aembed_documents(self, texts: List[str]) -> List[List[float]]: + """Asynchronous compute doc embeddings using a Bedrock model. + + Args: + texts: The list of texts to embed + + Returns: + List of embeddings, one for each text. + """ + + result = await asyncio.gather(*[self.aembed_query(text) for text in texts]) + + return list(result) From 16bd328aab52e25f4a22283916d3a16ec8bccd4b Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 14:22:41 -0700 Subject: [PATCH 031/175] Use Embeddings in pinecone (#8982) cc @eyurtsev @olivier-lacroix @jamescalam redo of #2741 --- .../langchain/vectorstores/pinecone.py | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/libs/langchain/langchain/vectorstores/pinecone.py b/libs/langchain/langchain/vectorstores/pinecone.py index f9cc2303a..df5b86844 100644 --- a/libs/langchain/langchain/vectorstores/pinecone.py +++ b/libs/langchain/langchain/vectorstores/pinecone.py @@ -3,7 +3,8 @@ from __future__ import annotations import logging import uuid -from typing import Any, Callable, Iterable, List, Optional, Tuple +import warnings +from typing import Any, Callable, Iterable, List, Optional, Tuple, Union import numpy as np @@ -38,7 +39,7 @@ class Pinecone(VectorStore): def __init__( self, index: Any, - embedding_function: Callable, + embedding: Union[Embeddings, Callable], text_key: str, namespace: Optional[str] = None, distance_strategy: Optional[DistanceStrategy] = DistanceStrategy.COSINE, @@ -47,7 +48,7 @@ class Pinecone(VectorStore): try: import pinecone except ImportError: - raise ValueError( + raise ImportError( "Could not import pinecone python package. " "Please install it with `pip install pinecone-client`." ) @@ -56,17 +57,36 @@ class Pinecone(VectorStore): f"client should be an instance of pinecone.index.Index, " f"got {type(index)}" ) + if not isinstance(embedding, Embeddings): + warnings.warn( + "Passing in `embedding` as a Callable is deprecated. Please pass in an" + " Embeddings object instead." + ) self._index = index - self._embedding_function = embedding_function + self._embedding = embedding self._text_key = text_key self._namespace = namespace self.distance_strategy = distance_strategy @property def embeddings(self) -> Optional[Embeddings]: - # TODO: Accept this object directly + """Access the query embedding object if available.""" + if isinstance(self._embedding, Embeddings): + return self._embedding return None + def _embed_documents(self, texts: Iterable[str]) -> List[List[float]]: + """Embed search docs.""" + if isinstance(self._embedding, Embeddings): + return self._embedding.embed_documents(list(texts)) + return [self._embedding(t) for t in texts] + + def _embed_query(self, text: str) -> List[float]: + """Embed query text.""" + if isinstance(self._embedding, Embeddings): + return self._embedding.embed_query(text) + return self._embedding(text) + def add_texts( self, texts: Iterable[str], @@ -93,8 +113,8 @@ class Pinecone(VectorStore): # Embed and create the documents docs = [] ids = ids or [str(uuid.uuid4()) for _ in texts] - for i, text in enumerate(texts): - embedding = self._embedding_function(text) + embeddings = self._embed_documents(texts) + for i, (text, embedding) in enumerate(zip(texts, embeddings)): metadata = metadatas[i] if metadatas else {} metadata[self._text_key] = text docs.append((ids[i], embedding, metadata)) @@ -124,7 +144,7 @@ class Pinecone(VectorStore): """ if namespace is None: namespace = self._namespace - query_obj = self._embedding_function(query) + query_obj = self._embed_query(query) docs = [] results = self._index.query( [query_obj], @@ -265,7 +285,7 @@ class Pinecone(VectorStore): Returns: List of Documents selected by maximal marginal relevance. """ - embedding = self._embedding_function(query) + embedding = self._embed_query(query) return self.max_marginal_relevance_search_by_vector( embedding, k, fetch_k, lambda_mult, filter, namespace ) @@ -356,7 +376,7 @@ class Pinecone(VectorStore): # upsert to Pinecone _upsert_kwargs = upsert_kwargs or {} index.upsert(vectors=list(to_upsert), namespace=namespace, **_upsert_kwargs) - return cls(index, embedding.embed_query, text_key, namespace, **kwargs) + return cls(index, embedding, text_key, namespace, **kwargs) @classmethod def from_existing_index( @@ -375,9 +395,7 @@ class Pinecone(VectorStore): "Please install it with `pip install pinecone-client`." ) - return cls( - pinecone.Index(index_name), embedding.embed_query, text_key, namespace - ) + return cls(pinecone.Index(index_name), embedding, text_key, namespace) def delete( self, From cb5fb751e91808e057df23e7c18f10b5f91cf71f Mon Sep 17 00:00:00 2001 From: Junlin Zhou Date: Fri, 11 Aug 2023 05:26:07 +0800 Subject: [PATCH 032/175] Enhance regex of structured_chat agents' output parser (#8965) Current regex only extracts agent's action between '` ``` ``` `', this commit will extract action between both '` ```json ``` `' and '` ``` ``` `' This is very similar to #7511 Co-authored-by: zjl --- .../agents/structured_chat/output_parser.py | 4 +- .../unit_tests/agents/test_structured_chat.py | 47 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 libs/langchain/tests/unit_tests/agents/test_structured_chat.py diff --git a/libs/langchain/langchain/agents/structured_chat/output_parser.py b/libs/langchain/langchain/agents/structured_chat/output_parser.py index 6d40848e0..5b1b598ac 100644 --- a/libs/langchain/langchain/agents/structured_chat/output_parser.py +++ b/libs/langchain/langchain/agents/structured_chat/output_parser.py @@ -19,12 +19,14 @@ logger = logging.getLogger(__name__) class StructuredChatOutputParser(AgentOutputParser): """Output parser for the structured chat agent.""" + pattern = re.compile(r"```(?:json)?\n(.*?)```", re.DOTALL) + def get_format_instructions(self) -> str: return FORMAT_INSTRUCTIONS def parse(self, text: str) -> Union[AgentAction, AgentFinish]: try: - action_match = re.search(r"```(.*?)```?", text, re.DOTALL) + action_match = self.pattern.search(text) if action_match is not None: response = json.loads(action_match.group(1).strip(), strict=False) if isinstance(response, list): diff --git a/libs/langchain/tests/unit_tests/agents/test_structured_chat.py b/libs/langchain/tests/unit_tests/agents/test_structured_chat.py new file mode 100644 index 000000000..356c3d87e --- /dev/null +++ b/libs/langchain/tests/unit_tests/agents/test_structured_chat.py @@ -0,0 +1,47 @@ +"""Unittests for langchain.agents.chat package.""" +from typing import Tuple + +from langchain.agents.structured_chat.output_parser import StructuredChatOutputParser +from langchain.schema import AgentAction + +output_parser = StructuredChatOutputParser() + + +def get_action_and_input(text: str) -> Tuple[str, str]: + output = output_parser.parse(text) + if isinstance(output, AgentAction): + return output.tool, str(output.tool_input) + else: + return "Final Answer", output.return_values["output"] + + +def test_parse_with_language() -> None: + llm_output = """I can use the `foo` tool to achieve the goal. + + Action: + ```json + { + "action": "foo", + "action_input": "bar" + } + ``` + """ + action, action_input = get_action_and_input(llm_output) + assert action == "foo" + assert action_input == "bar" + + +def test_parse_without_language() -> None: + llm_output = """I can use the `foo` tool to achieve the goal. + + Action: + ``` + { + "action": "foo", + "action_input": "bar" + } + ``` + """ + action, action_input = get_action_and_input(llm_output) + assert action == "foo" + assert action_input == "bar" From 6221eb5974d48f405c4369c80367bb40c9b546eb Mon Sep 17 00:00:00 2001 From: Zend <108248080+proximal-phalanx@users.noreply.github.com> Date: Fri, 11 Aug 2023 05:50:31 +0800 Subject: [PATCH 033/175] Recursive url loader w/ test (#8813) Description: Due to some issue on the test, this is a separate PR with the test for #8502 Tag maintainer: @rlancemartin --------- Co-authored-by: Lance Martin Co-authored-by: Bagatur --- .../test_recursive_url_loader.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 libs/langchain/tests/integration_tests/document_loaders/test_recursive_url_loader.py diff --git a/libs/langchain/tests/integration_tests/document_loaders/test_recursive_url_loader.py b/libs/langchain/tests/integration_tests/document_loaders/test_recursive_url_loader.py new file mode 100644 index 000000000..c31bd369d --- /dev/null +++ b/libs/langchain/tests/integration_tests/document_loaders/test_recursive_url_loader.py @@ -0,0 +1,30 @@ +from langchain.document_loaders.recursive_url_loader import RecursiveUrlLoader + + +def test_async_recursive_url_loader() -> None: + url = "https://docs.python.org/3.9/" + loader = RecursiveUrlLoader( + url=url, extractor=lambda _: "placeholder", use_async=True, max_depth=1 + ) + docs = loader.load() + assert len(docs) == 24 + assert docs[0].page_content == "placeholder" + + +def test_sync_recursive_url_loader() -> None: + url = "https://docs.python.org/3.9/" + loader = RecursiveUrlLoader( + url=url, extractor=lambda _: "placeholder", use_async=False, max_depth=1 + ) + docs = loader.load() + assert len(docs) == 24 + assert docs[0].page_content == "placeholder" + + +def test_loading_invalid_url() -> None: + url = "https://this.url.is.invalid/this/is/a/test" + loader = RecursiveUrlLoader( + url=url, max_depth=1, extractor=lambda _: "placeholder", use_async=False + ) + docs = loader.load() + assert len(docs) == 0 From 105c787e5af36ded72fe831a462c5f449a16dc15 Mon Sep 17 00:00:00 2001 From: Neil Murphy Date: Thu, 10 Aug 2023 15:45:30 -0700 Subject: [PATCH 034/175] =?UTF-8?q?Add=20convenience=20methods=20to=20Conv?= =?UTF-8?q?ersationBufferMemory=20and=20ConversationB=E2=80=A6=20(#8981)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add convenience methods to `ConversationBufferMemory` and `ConversationBufferWindowMemory` to get buffer either as messages or as string. Helps when `return_messages` is set to `True` but you want access to the messages as a string, and vice versa. @hwchase17 One use case: Using a `MultiPromptRouter` where `default_chain` is `ConversationChain`, but destination chains are `LLMChains`. Injecting chat memory into prompts for destination chains prints a stringified `List[Messages]` in the prompt, which creates a lot of noise. These convenience methods allow caller to choose either as needed. --------- Co-authored-by: Bagatur --- libs/langchain/langchain/memory/buffer.py | 23 ++++++++----- .../langchain/memory/buffer_window.py | 33 +++++++++++-------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/libs/langchain/langchain/memory/buffer.py b/libs/langchain/langchain/memory/buffer.py index 50b1468b6..7eac112b4 100644 --- a/libs/langchain/langchain/memory/buffer.py +++ b/libs/langchain/langchain/memory/buffer.py @@ -17,14 +17,21 @@ class ConversationBufferMemory(BaseChatMemory): @property def buffer(self) -> Any: """String buffer of memory.""" - if self.return_messages: - return self.chat_memory.messages - else: - return get_buffer_string( - self.chat_memory.messages, - human_prefix=self.human_prefix, - ai_prefix=self.ai_prefix, - ) + return self.buffer_as_messages if self.return_messages else self.buffer_as_str + + @property + def buffer_as_str(self) -> str: + """Exposes the buffer as a string in case return_messages is True.""" + return get_buffer_string( + self.chat_memory.messages, + human_prefix=self.human_prefix, + ai_prefix=self.ai_prefix, + ) + + @property + def buffer_as_messages(self) -> List[Any]: + """Exposes the buffer as a list of messages in case return_messages is False.""" + return self.chat_memory.messages @property def memory_variables(self) -> List[str]: diff --git a/libs/langchain/langchain/memory/buffer_window.py b/libs/langchain/langchain/memory/buffer_window.py index af27f41d3..05b883e6d 100644 --- a/libs/langchain/langchain/memory/buffer_window.py +++ b/libs/langchain/langchain/memory/buffer_window.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, List +from typing import Any, Dict, List, Union from langchain.memory.chat_memory import BaseChatMemory from langchain.schema.messages import BaseMessage, get_buffer_string @@ -14,9 +14,24 @@ class ConversationBufferWindowMemory(BaseChatMemory): """Number of messages to store in buffer.""" @property - def buffer(self) -> List[BaseMessage]: + def buffer(self) -> Union[str, List[BaseMessage]]: """String buffer of memory.""" - return self.chat_memory.messages + return self.buffer_as_messages if self.return_messages else self.buffer_as_str + + @property + def buffer_as_str(self) -> str: + """Exposes the buffer as a string in case return_messages is True.""" + messages = self.chat_memory.messages[-self.k * 2 :] if self.k > 0 else [] + return get_buffer_string( + messages, + human_prefix=self.human_prefix, + ai_prefix=self.ai_prefix, + ) + + @property + def buffer_as_messages(self) -> List[BaseMessage]: + """Exposes the buffer as a list of messages in case return_messages is False.""" + return self.chat_memory.messages[-self.k * 2 :] if self.k > 0 else [] @property def memory_variables(self) -> List[str]: @@ -26,14 +41,6 @@ class ConversationBufferWindowMemory(BaseChatMemory): """ return [self.memory_key] - def load_memory_variables(self, inputs: Dict[str, Any]) -> Dict[str, str]: + def load_memory_variables(self, inputs: Dict[str, Any]) -> Dict[str, Any]: """Return history buffer.""" - - buffer: Any = self.buffer[-self.k * 2 :] if self.k > 0 else [] - if not self.return_messages: - buffer = get_buffer_string( - buffer, - human_prefix=self.human_prefix, - ai_prefix=self.ai_prefix, - ) - return {self.memory_key: buffer} + return {self.memory_key: self.buffer} From 45f0f9460a6f5a6491ecd91f160defc14e6edc14 Mon Sep 17 00:00:00 2001 From: Harrison Chase Date: Thu, 10 Aug 2023 16:07:06 -0700 Subject: [PATCH 035/175] add async for python repl (#9080) --- libs/langchain/langchain/tools/python/tool.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libs/langchain/langchain/tools/python/tool.py b/libs/langchain/langchain/tools/python/tool.py index d5ae95092..a820ba614 100644 --- a/libs/langchain/langchain/tools/python/tool.py +++ b/libs/langchain/langchain/tools/python/tool.py @@ -131,3 +131,15 @@ class PythonAstREPLTool(BaseTool): return io_buffer.getvalue() except Exception as e: return "{}: {}".format(type(e).__name__, str(e)) + + async def _arun( + self, + query: str, + run_manager: Optional[AsyncCallbackManagerForToolRun] = None, + ) -> Any: + """Use the tool asynchronously.""" + + loop = asyncio.get_running_loop() + result = await loop.run_in_executor(None, self._run, query) + + return result From bb6fbf4c71eb820ab5153569848d2c3275835eb3 Mon Sep 17 00:00:00 2001 From: Harrison Chase Date: Thu, 10 Aug 2023 16:08:50 -0700 Subject: [PATCH 036/175] openai adapters (#8988) Co-authored-by: Eugene Yurtsev Co-authored-by: Nuno Campos --- docs/extras/guides/adapters/openai.ipynb | 323 ++++++++++++++++++ libs/langchain/langchain/adapters/__init__.py | 0 libs/langchain/langchain/adapters/openai.py | 208 +++++++++++ .../langchain/chat_models/anyscale.py | 4 +- .../langchain/langchain/chat_models/openai.py | 69 +--- .../integration_tests/adapters/__init__.py | 0 .../integration_tests/adapters/test_openai.py | 107 ++++++ .../unit_tests/chat_models/test_openai.py | 10 +- 8 files changed, 649 insertions(+), 72 deletions(-) create mode 100644 docs/extras/guides/adapters/openai.ipynb create mode 100644 libs/langchain/langchain/adapters/__init__.py create mode 100644 libs/langchain/langchain/adapters/openai.py create mode 100644 libs/langchain/tests/integration_tests/adapters/__init__.py create mode 100644 libs/langchain/tests/integration_tests/adapters/test_openai.py diff --git a/docs/extras/guides/adapters/openai.ipynb b/docs/extras/guides/adapters/openai.ipynb new file mode 100644 index 000000000..e00241d74 --- /dev/null +++ b/docs/extras/guides/adapters/openai.ipynb @@ -0,0 +1,323 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "700a516b", + "metadata": {}, + "source": [ + "# OpenAI Adapter\n", + "\n", + "A lot of people get started with OpenAI but want to explore other models. LangChain's integrations with many model providers make this easy to do so. While LangChain has it's own message and model APIs, we've also made it as easy as possible to explore other models by exposing an adapter to adapt LangChain models to the OpenAI api.\n", + "\n", + "At the moment this only deals with output and does not return other information (token counts, stop reasons, etc)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6017f26a", + "metadata": {}, + "outputs": [], + "source": [ + "import openai\n", + "from langchain.adapters import openai as lc_openai" + ] + }, + { + "cell_type": "markdown", + "id": "b522ceda", + "metadata": {}, + "source": [ + "## ChatCompletion.create" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "1d22eb61", + "metadata": {}, + "outputs": [], + "source": [ + "messages = [{\"role\": \"user\", \"content\": \"hi\"}]" + ] + }, + { + "cell_type": "markdown", + "id": "d550d3ad", + "metadata": {}, + "source": [ + "Original OpenAI call" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "e1d27dfa", + "metadata": {}, + "outputs": [], + "source": [ + "result = openai.ChatCompletion.create(\n", + " messages=messages, \n", + " model=\"gpt-3.5-turbo\", \n", + " temperature=0\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "012d81ae", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'role': 'assistant', 'content': 'Hello! How can I assist you today?'}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result[\"choices\"][0]['message'].to_dict_recursive()" + ] + }, + { + "cell_type": "markdown", + "id": "db5b5500", + "metadata": {}, + "source": [ + "LangChain OpenAI wrapper call" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "87c2d515", + "metadata": {}, + "outputs": [], + "source": [ + "lc_result = lc_openai.ChatCompletion.create(\n", + " messages=messages, \n", + " model=\"gpt-3.5-turbo\", \n", + " temperature=0\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "c67a5ac8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'role': 'assistant', 'content': 'Hello! How can I assist you today?'}" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lc_result[\"choices\"][0]['message']" + ] + }, + { + "cell_type": "markdown", + "id": "034ba845", + "metadata": {}, + "source": [ + "Swapping out model providers" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "7a2c011c", + "metadata": {}, + "outputs": [], + "source": [ + "lc_result = lc_openai.ChatCompletion.create(\n", + " messages=messages, \n", + " model=\"claude-2\", \n", + " temperature=0, \n", + " provider=\"ChatAnthropic\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "f7c94827", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'role': 'assistant', 'content': ' Hello!'}" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lc_result[\"choices\"][0]['message']" + ] + }, + { + "cell_type": "markdown", + "id": "cb3f181d", + "metadata": {}, + "source": [ + "## ChatCompletion.stream" + ] + }, + { + "cell_type": "markdown", + "id": "f7b8cd18", + "metadata": {}, + "source": [ + "Original OpenAI call" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "fd8cb1ea", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'role': 'assistant', 'content': ''}\n", + "{'content': 'Hello'}\n", + "{'content': '!'}\n", + "{'content': ' How'}\n", + "{'content': ' can'}\n", + "{'content': ' I'}\n", + "{'content': ' assist'}\n", + "{'content': ' you'}\n", + "{'content': ' today'}\n", + "{'content': '?'}\n", + "{}\n" + ] + } + ], + "source": [ + "for c in openai.ChatCompletion.create(\n", + " messages = messages,\n", + " model=\"gpt-3.5-turbo\", \n", + " temperature=0,\n", + " stream=True\n", + "):\n", + " print(c[\"choices\"][0]['delta'].to_dict_recursive())" + ] + }, + { + "cell_type": "markdown", + "id": "0b2a076b", + "metadata": {}, + "source": [ + "LangChain OpenAI wrapper call" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "9521218c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'role': 'assistant', 'content': ''}\n", + "{'content': 'Hello'}\n", + "{'content': '!'}\n", + "{'content': ' How'}\n", + "{'content': ' can'}\n", + "{'content': ' I'}\n", + "{'content': ' assist'}\n", + "{'content': ' you'}\n", + "{'content': ' today'}\n", + "{'content': '?'}\n", + "{}\n" + ] + } + ], + "source": [ + "for c in lc_openai.ChatCompletion.create(\n", + " messages = messages,\n", + " model=\"gpt-3.5-turbo\", \n", + " temperature=0,\n", + " stream=True\n", + "):\n", + " print(c[\"choices\"][0]['delta'])" + ] + }, + { + "cell_type": "markdown", + "id": "0fc39750", + "metadata": {}, + "source": [ + "Swapping out model providers" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "68f0214e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'role': 'assistant', 'content': ' Hello'}\n", + "{'content': '!'}\n", + "{}\n" + ] + } + ], + "source": [ + "for c in lc_openai.ChatCompletion.create(\n", + " messages = messages,\n", + " model=\"claude-2\", \n", + " temperature=0,\n", + " stream=True,\n", + " provider=\"ChatAnthropic\",\n", + "):\n", + " print(c[\"choices\"][0]['delta'])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/libs/langchain/langchain/adapters/__init__.py b/libs/langchain/langchain/adapters/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/libs/langchain/langchain/adapters/openai.py b/libs/langchain/langchain/adapters/openai.py new file mode 100644 index 000000000..e9f18408c --- /dev/null +++ b/libs/langchain/langchain/adapters/openai.py @@ -0,0 +1,208 @@ +from __future__ import annotations + +import importlib +from typing import ( + Any, + AsyncIterator, + Dict, + Iterable, + List, + Mapping, + Sequence, + Union, + overload, +) + +from typing_extensions import Literal + +from langchain.schema.messages import ( + AIMessage, + AIMessageChunk, + BaseMessage, + BaseMessageChunk, + ChatMessage, + FunctionMessage, + HumanMessage, + SystemMessage, +) + + +async def aenumerate( + iterable: AsyncIterator[Any], start: int = 0 +) -> AsyncIterator[tuple[int, Any]]: + """Async version of enumerate.""" + i = start + async for x in iterable: + yield i, x + i += 1 + + +def convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage: + role = _dict["role"] + if role == "user": + return HumanMessage(content=_dict["content"]) + elif role == "assistant": + # Fix for azure + # Also OpenAI returns None for tool invocations + content = _dict.get("content", "") or "" + if _dict.get("function_call"): + additional_kwargs = {"function_call": dict(_dict["function_call"])} + else: + additional_kwargs = {} + return AIMessage(content=content, additional_kwargs=additional_kwargs) + elif role == "system": + return SystemMessage(content=_dict["content"]) + elif role == "function": + return FunctionMessage(content=_dict["content"], name=_dict["name"]) + else: + return ChatMessage(content=_dict["content"], role=role) + + +def convert_message_to_dict(message: BaseMessage) -> dict: + message_dict: Dict[str, Any] + if isinstance(message, ChatMessage): + message_dict = {"role": message.role, "content": message.content} + elif isinstance(message, HumanMessage): + message_dict = {"role": "user", "content": message.content} + elif isinstance(message, AIMessage): + message_dict = {"role": "assistant", "content": message.content} + if "function_call" in message.additional_kwargs: + message_dict["function_call"] = message.additional_kwargs["function_call"] + # If function call only, content is None not empty string + if message_dict["content"] == "": + message_dict["content"] = None + elif isinstance(message, SystemMessage): + message_dict = {"role": "system", "content": message.content} + elif isinstance(message, FunctionMessage): + message_dict = { + "role": "function", + "content": message.content, + "name": message.name, + } + else: + raise TypeError(f"Got unknown type {message}") + if "name" in message.additional_kwargs: + message_dict["name"] = message.additional_kwargs["name"] + return message_dict + + +def convert_openai_messages(messages: Sequence[Dict[str, Any]]) -> List[BaseMessage]: + """Convert dictionaries representing OpenAI messages to LangChain format. + + Args: + messages: List of dictionaries representing OpenAI messages + + Returns: + List of LangChain BaseMessage objects. + """ + return [convert_dict_to_message(m) for m in messages] + + +def _convert_message_chunk_to_delta(chunk: BaseMessageChunk, i: int) -> Dict[str, Any]: + _dict: Dict[str, Any] = {} + if isinstance(chunk, AIMessageChunk): + if i == 0: + # Only shows up in the first chunk + _dict["role"] = "assistant" + if "function_call" in chunk.additional_kwargs: + _dict["function_call"] = chunk.additional_kwargs["function_call"] + # If the first chunk is a function call, the content is not empty string, + # not missing, but None. + if i == 0: + _dict["content"] = None + else: + _dict["content"] = chunk.content + else: + raise ValueError(f"Got unexpected streaming chunk type: {type(chunk)}") + # This only happens at the end of streams, and OpenAI returns as empty dict + if _dict == {"content": ""}: + _dict = {} + return {"choices": [{"delta": _dict}]} + + +class ChatCompletion: + @overload + @staticmethod + def create( + messages: Sequence[Dict[str, Any]], + *, + provider: str = "ChatOpenAI", + stream: Literal[False] = False, + **kwargs: Any, + ) -> dict: + ... + + @overload + @staticmethod + def create( + messages: Sequence[Dict[str, Any]], + *, + provider: str = "ChatOpenAI", + stream: Literal[True], + **kwargs: Any, + ) -> Iterable: + ... + + @staticmethod + def create( + messages: Sequence[Dict[str, Any]], + *, + provider: str = "ChatOpenAI", + stream: bool = False, + **kwargs: Any, + ) -> Union[dict, Iterable]: + models = importlib.import_module("langchain.chat_models") + model_cls = getattr(models, provider) + model_config = model_cls(**kwargs) + converted_messages = convert_openai_messages(messages) + if not stream: + result = model_config.invoke(converted_messages) + return {"choices": [{"message": convert_message_to_dict(result)}]} + else: + return ( + _convert_message_chunk_to_delta(c, i) + for i, c in enumerate(model_config.stream(converted_messages)) + ) + + @overload + @staticmethod + async def acreate( + messages: Sequence[Dict[str, Any]], + *, + provider: str = "ChatOpenAI", + stream: Literal[False] = False, + **kwargs: Any, + ) -> dict: + ... + + @overload + @staticmethod + async def acreate( + messages: Sequence[Dict[str, Any]], + *, + provider: str = "ChatOpenAI", + stream: Literal[True], + **kwargs: Any, + ) -> AsyncIterator: + ... + + @staticmethod + async def acreate( + messages: Sequence[Dict[str, Any]], + *, + provider: str = "ChatOpenAI", + stream: bool = False, + **kwargs: Any, + ) -> Union[dict, AsyncIterator]: + models = importlib.import_module("langchain.chat_models") + model_cls = getattr(models, provider) + model_config = model_cls(**kwargs) + converted_messages = convert_openai_messages(messages) + if not stream: + result = await model_config.ainvoke(converted_messages) + return {"choices": [{"message": convert_message_to_dict(result)}]} + else: + return ( + _convert_message_chunk_to_delta(c, i) + async for i, c in aenumerate(model_config.astream(converted_messages)) + ) diff --git a/libs/langchain/langchain/chat_models/anyscale.py b/libs/langchain/langchain/chat_models/anyscale.py index 6981b3f45..4362d28e0 100644 --- a/libs/langchain/langchain/chat_models/anyscale.py +++ b/libs/langchain/langchain/chat_models/anyscale.py @@ -9,9 +9,9 @@ from typing import TYPE_CHECKING, Optional, Set import requests from pydantic import Field, root_validator +from langchain.adapters.openai import convert_message_to_dict from langchain.chat_models.openai import ( ChatOpenAI, - _convert_message_to_dict, _import_tiktoken, ) from langchain.schema.messages import BaseMessage @@ -178,7 +178,7 @@ class ChatAnyscale(ChatOpenAI): tokens_per_message = 3 tokens_per_name = 1 num_tokens = 0 - messages_dict = [_convert_message_to_dict(m) for m in messages] + messages_dict = [convert_message_to_dict(m) for m in messages] for message in messages_dict: num_tokens += tokens_per_message for key, value in message.items(): diff --git a/libs/langchain/langchain/chat_models/openai.py b/libs/langchain/langchain/chat_models/openai.py index 7e321c896..56d3eec39 100644 --- a/libs/langchain/langchain/chat_models/openai.py +++ b/libs/langchain/langchain/chat_models/openai.py @@ -19,6 +19,7 @@ from typing import ( from pydantic import Field, root_validator +from langchain.adapters.openai import convert_dict_to_message, convert_message_to_dict from langchain.callbacks.manager import ( AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun, @@ -27,17 +28,12 @@ from langchain.chat_models.base import BaseChatModel from langchain.llms.base import create_base_retry_decorator from langchain.schema import ChatGeneration, ChatResult from langchain.schema.messages import ( - AIMessage, AIMessageChunk, BaseMessage, BaseMessageChunk, - ChatMessage, ChatMessageChunk, - FunctionMessage, FunctionMessageChunk, - HumanMessage, HumanMessageChunk, - SystemMessage, SystemMessageChunk, ) from langchain.schema.output import ChatGenerationChunk @@ -121,63 +117,6 @@ def _convert_delta_to_message_chunk( return default_class(content=content) -def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage: - role = _dict["role"] - if role == "user": - return HumanMessage(content=_dict["content"]) - elif role == "assistant": - # Fix for azure - # Also OpenAI returns None for tool invocations - content = _dict.get("content", "") or "" - if _dict.get("function_call"): - additional_kwargs = {"function_call": dict(_dict["function_call"])} - else: - additional_kwargs = {} - return AIMessage(content=content, additional_kwargs=additional_kwargs) - elif role == "system": - return SystemMessage(content=_dict["content"]) - elif role == "function": - return FunctionMessage(content=_dict["content"], name=_dict["name"]) - else: - return ChatMessage(content=_dict["content"], role=role) - - -def convert_openai_messages(messages: List[dict]) -> List[BaseMessage]: - """Convert dictionaries representing OpenAI messages to LangChain format. - - Args: - messages: List of dictionaries representing OpenAI messages - - Returns: - List of LangChain BaseMessage objects. - """ - return [_convert_dict_to_message(m) for m in messages] - - -def _convert_message_to_dict(message: BaseMessage) -> dict: - if isinstance(message, ChatMessage): - message_dict = {"role": message.role, "content": message.content} - elif isinstance(message, HumanMessage): - message_dict = {"role": "user", "content": message.content} - elif isinstance(message, AIMessage): - message_dict = {"role": "assistant", "content": message.content} - if "function_call" in message.additional_kwargs: - message_dict["function_call"] = message.additional_kwargs["function_call"] - elif isinstance(message, SystemMessage): - message_dict = {"role": "system", "content": message.content} - elif isinstance(message, FunctionMessage): - message_dict = { - "role": "function", - "content": message.content, - "name": message.name, - } - else: - raise ValueError(f"Got unknown type {message}") - if "name" in message.additional_kwargs: - message_dict["name"] = message.additional_kwargs["name"] - return message_dict - - class ChatOpenAI(BaseChatModel): """Wrapper around OpenAI Chat large language models. @@ -411,13 +350,13 @@ class ChatOpenAI(BaseChatModel): if "stop" in params: raise ValueError("`stop` found in both the input and default params.") params["stop"] = stop - message_dicts = [_convert_message_to_dict(m) for m in messages] + message_dicts = [convert_message_to_dict(m) for m in messages] return message_dicts, params def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult: generations = [] for res in response["choices"]: - message = _convert_dict_to_message(res["message"]) + message = convert_dict_to_message(res["message"]) gen = ChatGeneration( message=message, generation_info=dict(finish_reason=res.get("finish_reason")), @@ -568,7 +507,7 @@ class ChatOpenAI(BaseChatModel): "information on how messages are converted to tokens." ) num_tokens = 0 - messages_dict = [_convert_message_to_dict(m) for m in messages] + messages_dict = [convert_message_to_dict(m) for m in messages] for message in messages_dict: num_tokens += tokens_per_message for key, value in message.items(): diff --git a/libs/langchain/tests/integration_tests/adapters/__init__.py b/libs/langchain/tests/integration_tests/adapters/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/libs/langchain/tests/integration_tests/adapters/test_openai.py b/libs/langchain/tests/integration_tests/adapters/test_openai.py new file mode 100644 index 000000000..2e27f0365 --- /dev/null +++ b/libs/langchain/tests/integration_tests/adapters/test_openai.py @@ -0,0 +1,107 @@ +from typing import Any + +import openai +import pytest + +from langchain.adapters import openai as lcopenai + + +def _test_no_stream(**kwargs: Any) -> None: + result = openai.ChatCompletion.create(**kwargs) + lc_result = lcopenai.ChatCompletion.create(**kwargs) + if isinstance(lc_result, dict): + if isinstance(result, dict): + result_dict = result["choices"][0]["message"].to_dict_recursive() + lc_result_dict = lc_result["choices"][0]["message"] + assert result_dict == lc_result_dict + return + + +def _test_stream(**kwargs: Any) -> None: + result = [] + for c in openai.ChatCompletion.create(**kwargs): + result.append(c["choices"][0]["delta"].to_dict_recursive()) + + lc_result = [] + for c in lcopenai.ChatCompletion.create(**kwargs): + lc_result.append(c["choices"][0]["delta"]) + assert result == lc_result + + +async def _test_async(**kwargs: Any) -> None: + result = await openai.ChatCompletion.acreate(**kwargs) + lc_result = await lcopenai.ChatCompletion.acreate(**kwargs) + if isinstance(lc_result, dict): + if isinstance(result, dict): + result_dict = result["choices"][0]["message"].to_dict_recursive() + lc_result_dict = lc_result["choices"][0]["message"] + assert result_dict == lc_result_dict + return + + +async def _test_astream(**kwargs: Any) -> None: + result = [] + async for c in await openai.ChatCompletion.acreate(**kwargs): + result.append(c["choices"][0]["delta"].to_dict_recursive()) + + lc_result = [] + async for c in await lcopenai.ChatCompletion.acreate(**kwargs): + lc_result.append(c["choices"][0]["delta"]) + assert result == lc_result + + +FUNCTIONS = [ + { + "name": "get_current_weather", + "description": "Get the current weather in a given location", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}, + }, + "required": ["location"], + }, + } +] + + +async def _test_module(**kwargs: Any) -> None: + _test_no_stream(**kwargs) + await _test_async(**kwargs) + _test_stream(stream=True, **kwargs) + await _test_astream(stream=True, **kwargs) + + +@pytest.mark.asyncio +async def test_normal_call() -> None: + await _test_module( + messages=[{"role": "user", "content": "hi"}], + model="gpt-3.5-turbo", + temperature=0, + ) + + +@pytest.mark.asyncio +async def test_function_calling() -> None: + await _test_module( + messages=[{"role": "user", "content": "whats the weather in boston"}], + model="gpt-3.5-turbo", + functions=FUNCTIONS, + temperature=0, + ) + + +@pytest.mark.asyncio +async def test_answer_with_function_calling() -> None: + await _test_module( + messages=[ + {"role": "user", "content": "say hi, then whats the weather in boston"} + ], + model="gpt-3.5-turbo", + functions=FUNCTIONS, + temperature=0, + ) diff --git a/libs/langchain/tests/unit_tests/chat_models/test_openai.py b/libs/langchain/tests/unit_tests/chat_models/test_openai.py index 95ecbe9e5..b417d82e9 100644 --- a/libs/langchain/tests/unit_tests/chat_models/test_openai.py +++ b/libs/langchain/tests/unit_tests/chat_models/test_openai.py @@ -5,9 +5,9 @@ from unittest.mock import MagicMock, patch import pytest +from langchain.adapters.openai import convert_dict_to_message from langchain.chat_models.openai import ( ChatOpenAI, - _convert_dict_to_message, ) from langchain.schema.messages import ( AIMessage, @@ -20,7 +20,7 @@ from langchain.schema.messages import ( def test_function_message_dict_to_function_message() -> None: content = json.dumps({"result": "Example #1"}) name = "test_function" - result = _convert_dict_to_message( + result = convert_dict_to_message( { "role": "function", "name": name, @@ -34,21 +34,21 @@ def test_function_message_dict_to_function_message() -> None: def test__convert_dict_to_message_human() -> None: message = {"role": "user", "content": "foo"} - result = _convert_dict_to_message(message) + result = convert_dict_to_message(message) expected_output = HumanMessage(content="foo") assert result == expected_output def test__convert_dict_to_message_ai() -> None: message = {"role": "assistant", "content": "foo"} - result = _convert_dict_to_message(message) + result = convert_dict_to_message(message) expected_output = AIMessage(content="foo") assert result == expected_output def test__convert_dict_to_message_system() -> None: message = {"role": "system", "content": "foo"} - result = _convert_dict_to_message(message) + result = convert_dict_to_message(message) expected_output = SystemMessage(content="foo") assert result == expected_output From ee52482db836057fb1264e58f91368d04491e20f Mon Sep 17 00:00:00 2001 From: DJ Atha Date: Thu, 10 Aug 2023 17:29:31 -0600 Subject: [PATCH 037/175] Fix issue 7445 (#7635) Description: updated BabyAGI examples and experimental to append the iteration to the result id to fix error storing data to vectorstore. Issue: 7445 Dependencies: no Tag maintainer: @eyurtsev This fix worked for me locally. Happy to take some feedback and iterate on a better solution. I was considering appending a uuid instead but didn't want to over complicate the example. --------- Co-authored-by: Bagatur --- .../autonomous_agents/baby_agi/baby_agi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/experimental/langchain_experimental/autonomous_agents/baby_agi/baby_agi.py b/libs/experimental/langchain_experimental/autonomous_agents/baby_agi/baby_agi.py index 72ed46d46..cd4f03fb9 100644 --- a/libs/experimental/langchain_experimental/autonomous_agents/baby_agi/baby_agi.py +++ b/libs/experimental/langchain_experimental/autonomous_agents/baby_agi/baby_agi.py @@ -145,7 +145,7 @@ class BabyAGI(Chain, BaseModel): self.print_task_result(result) # Step 3: Store the result in Pinecone - result_id = f"result_{task['task_id']}" + result_id = f"result_{task['task_id']}_{num_iters}" self.vectorstore.add_texts( texts=[result], metadatas=[{"task": task["task_name"]}], From 02430e25b6417d7a01b408b0b1b32b4ea2dabbeb Mon Sep 17 00:00:00 2001 From: Bidhan Roy Date: Thu, 10 Aug 2023 18:48:36 -0500 Subject: [PATCH 038/175] BagelDB (bageldb.ai), VectorStore integration. (#8971) - **Description**: [BagelDB](bageldb.ai) a collaborative vector database. Integrated the bageldb PyPi package with langchain with related tests and code. - **Issue**: Not applicable. - **Dependencies**: `betabageldb` PyPi package. - **Tag maintainer**: @rlancemartin, @eyurtsev, @baskaryan - **Twitter handle**: bageldb_ai (https://twitter.com/BagelDB_ai) We ran `make format`, `make lint` and `make test` locally. Followed the contribution guideline thoroughly https://github.com/hwchase17/langchain/blob/master/.github/CONTRIBUTING.md --------- Co-authored-by: Towhid1 --- .../extras/integrations/providers/bageldb.mdx | 21 + .../integrations/vectorstores/bageldb.ipynb | 300 ++++++++++++ .../langchain/vectorstores/__init__.py | 2 + .../langchain/vectorstores/bageldb.py | 432 ++++++++++++++++++ libs/langchain/poetry.lock | 415 +++++++++++------ libs/langchain/pyproject.toml | 12 +- .../vectorstores/test_bagel.py | 169 +++++++ 7 files changed, 1218 insertions(+), 133 deletions(-) create mode 100644 docs/extras/integrations/providers/bageldb.mdx create mode 100644 docs/extras/integrations/vectorstores/bageldb.ipynb create mode 100644 libs/langchain/langchain/vectorstores/bageldb.py create mode 100644 libs/langchain/tests/integration_tests/vectorstores/test_bagel.py diff --git a/docs/extras/integrations/providers/bageldb.mdx b/docs/extras/integrations/providers/bageldb.mdx new file mode 100644 index 000000000..ec0549316 --- /dev/null +++ b/docs/extras/integrations/providers/bageldb.mdx @@ -0,0 +1,21 @@ +# BagelDB + +> [BagelDB](https://www.bageldb.ai/) (`Open Vector Database for AI`), is like GitHub for AI data. +It is a collaborative platform where users can create, +share, and manage vector datasets. It can support private projects for independent developers, +internal collaborations for enterprises, and public contributions for data DAOs. + +## Installation and Setup + +```bash +pip install betabageldb +``` + + +## VectorStore + +See a [usage example](/docs/integrations/vectorstores/bageldb). + +```python +from langchain.vectorstores import Bagel +``` diff --git a/docs/extras/integrations/vectorstores/bageldb.ipynb b/docs/extras/integrations/vectorstores/bageldb.ipynb new file mode 100644 index 000000000..7f6548656 --- /dev/null +++ b/docs/extras/integrations/vectorstores/bageldb.ipynb @@ -0,0 +1,300 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# BagelDB\n", + "\n", + "> [BagelDB](https://www.bageldb.ai/) (`Open Vector Database for AI`), is like GitHub for AI data.\n", + "It is a collaborative platform where users can create,\n", + "share, and manage vector datasets. It can support private projects for independent developers,\n", + "internal collaborations for enterprises, and public contributions for data DAOs.\n", + "\n", + "### Installation and Setup\n", + "\n", + "```bash\n", + "pip install betabageldb\n", + "```\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create VectorStore from texts" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.vectorstores import Bagel\n", + "\n", + "texts = [\"hello bagel\", \"hello langchain\", \"I love salad\", \"my car\", \"a dog\"]\n", + "# create cluster and add texts\n", + "cluster = Bagel.from_texts(cluster_name=\"testing\", texts=texts)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content='hello bagel', metadata={}),\n", + " Document(page_content='my car', metadata={}),\n", + " Document(page_content='I love salad', metadata={})]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# similarity search\n", + "cluster.similarity_search(\"bagel\", k=3)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(Document(page_content='hello bagel', metadata={}), 0.27392977476119995),\n", + " (Document(page_content='my car', metadata={}), 1.4783176183700562),\n", + " (Document(page_content='I love salad', metadata={}), 1.5342965126037598)]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# the score is a distance metric, so lower is better\n", + "cluster.similarity_search_with_score(\"bagel\", k=3)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# delete the cluster\n", + "cluster.delete_cluster()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create VectorStore from docs" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import TextLoader\n", + "from langchain.text_splitter import CharacterTextSplitter\n", + "\n", + "loader = TextLoader(\"../../../state_of_the_union.txt\")\n", + "documents = loader.load()\n", + "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\n", + "docs = text_splitter.split_documents(documents)[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "# create cluster with docs\n", + "cluster = Bagel.from_documents(cluster_name=\"testing_with_docs\", documents=docs)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and the \n" + ] + } + ], + "source": [ + "# similarity search\n", + "query = \"What did the president say about Ketanji Brown Jackson\"\n", + "docs = cluster.similarity_search(query)\n", + "print(docs[0].page_content[:102])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Get all text/doc from Cluster" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "texts = [\"hello bagel\", \"this is langchain\"]\n", + "cluster = Bagel.from_texts(cluster_name=\"testing\", texts=texts)\n", + "cluster_data = cluster.get()" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['ids', 'embeddings', 'metadatas', 'documents'])" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# all keys\n", + "cluster_data.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ids': ['578c6d24-3763-11ee-a8ab-b7b7b34f99ba',\n", + " '578c6d25-3763-11ee-a8ab-b7b7b34f99ba',\n", + " 'fb2fc7d8-3762-11ee-a8ab-b7b7b34f99ba',\n", + " 'fb2fc7d9-3762-11ee-a8ab-b7b7b34f99ba',\n", + " '6b40881a-3762-11ee-a8ab-b7b7b34f99ba',\n", + " '6b40881b-3762-11ee-a8ab-b7b7b34f99ba',\n", + " '581e691e-3762-11ee-a8ab-b7b7b34f99ba',\n", + " '581e691f-3762-11ee-a8ab-b7b7b34f99ba'],\n", + " 'embeddings': None,\n", + " 'metadatas': [{}, {}, {}, {}, {}, {}, {}, {}],\n", + " 'documents': ['hello bagel',\n", + " 'this is langchain',\n", + " 'hello bagel',\n", + " 'this is langchain',\n", + " 'hello bagel',\n", + " 'this is langchain',\n", + " 'hello bagel',\n", + " 'this is langchain']}" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# all values and keys\n", + "cluster_data" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "cluster.delete_cluster()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create cluster with metadata & filter using metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(Document(page_content='hello bagel', metadata={'source': 'notion'}), 0.0)]" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "texts = [\"hello bagel\", \"this is langchain\"]\n", + "metadatas = [{\"source\": \"notion\"}, {\"source\": \"google\"}]\n", + "\n", + "cluster = Bagel.from_texts(cluster_name=\"testing\", texts=texts, metadatas=metadatas)\n", + "cluster.similarity_search_with_score(\"hello bagel\", where={\"source\": \"notion\"})" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "# delete the cluster\n", + "cluster.delete_cluster()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/libs/langchain/langchain/vectorstores/__init__.py b/libs/langchain/langchain/vectorstores/__init__.py index aefd5e69c..4c254daed 100644 --- a/libs/langchain/langchain/vectorstores/__init__.py +++ b/libs/langchain/langchain/vectorstores/__init__.py @@ -27,6 +27,7 @@ from langchain.vectorstores.annoy import Annoy from langchain.vectorstores.atlas import AtlasDB from langchain.vectorstores.awadb import AwaDB from langchain.vectorstores.azuresearch import AzureSearch +from langchain.vectorstores.bageldb import Bagel from langchain.vectorstores.base import VectorStore from langchain.vectorstores.cassandra import Cassandra from langchain.vectorstores.chroma import Chroma @@ -75,6 +76,7 @@ __all__ = [ "AtlasDB", "AwaDB", "AzureSearch", + "Bagel", "Cassandra", "Chroma", "Clickhouse", diff --git a/libs/langchain/langchain/vectorstores/bageldb.py b/libs/langchain/langchain/vectorstores/bageldb.py new file mode 100644 index 000000000..ab0e7868c --- /dev/null +++ b/libs/langchain/langchain/vectorstores/bageldb.py @@ -0,0 +1,432 @@ +"""BagelDB integration""" +from __future__ import annotations + +import uuid +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + Iterable, + List, + Optional, + Tuple, + Type, +) + +if TYPE_CHECKING: + import bagel + import bagel.config + from bagel.api.types import ID, OneOrMany, Where, WhereDocument + +from langchain.docstore.document import Document +from langchain.embeddings.base import Embeddings +from langchain.utils import xor_args +from langchain.vectorstores.base import VectorStore + +DEFAULT_K = 5 + + +def _results_to_docs(results: Any) -> List[Document]: + return [doc for doc, _ in _results_to_docs_and_scores(results)] + + +def _results_to_docs_and_scores(results: Any) -> List[Tuple[Document, float]]: + return [ + (Document(page_content=result[0], metadata=result[1] or {}), result[2]) + for result in zip( + results["documents"][0], + results["metadatas"][0], + results["distances"][0], + ) + ] + + +class Bagel(VectorStore): + """Wrapper around BagelDB.ai vector store. + + To use, you should have the ``betabageldb`` python package installed. + + Example: + .. code-block:: python + + from langchain.vectorstores import Bagel + vectorstore = Bagel(cluster_name="langchain_store") + """ + + _LANGCHAIN_DEFAULT_CLUSTER_NAME = "langchain" + + def __init__( + self, + cluster_name: str = _LANGCHAIN_DEFAULT_CLUSTER_NAME, + client_settings: Optional[bagel.config.Settings] = None, + embedding_function: Optional[Embeddings] = None, + cluster_metadata: Optional[Dict] = None, + client: Optional[bagel.Client] = None, + relevance_score_fn: Optional[Callable[[float], float]] = None, + ) -> None: + """Initialize with bagel client""" + try: + import bagel + import bagel.config + except ImportError: + raise ValueError("Please install bagel `pip install betabageldb`.") + if client is not None: + self._client_settings = client_settings + self._client = client + else: + if client_settings: + _client_settings = client_settings + else: + _client_settings = bagel.config.Settings( + bagel_api_impl="rest", + bagel_server_host="api.bageldb.ai", + ) + self._client_settings = _client_settings + self._client = bagel.Client(_client_settings) + + self._cluster = self._client.get_or_create_cluster( + name=cluster_name, + metadata=cluster_metadata, + ) + self.override_relevance_score_fn = relevance_score_fn + self._embedding_function = embedding_function + + @property + def embeddings(self) -> Optional[Embeddings]: + return self._embedding_function + + @xor_args(("query_texts", "query_embeddings")) + def __query_cluster( + self, + query_texts: Optional[List[str]] = None, + query_embeddings: Optional[List[List[float]]] = None, + n_results: int = 4, + where: Optional[Dict[str, str]] = None, + **kwargs: Any, + ) -> List[Document]: + """Query the BagelDB cluster based on the provided parameters.""" + try: + import bagel # noqa: F401 + except ImportError: + raise ValueError("Please install bagel `pip install betabageldb`.") + return self._cluster.find( + query_texts=query_texts, + query_embeddings=query_embeddings, + n_results=n_results, + where=where, + **kwargs, + ) + + def add_texts( + self, + texts: Iterable[str], + metadatas: Optional[List[dict]] = None, + ids: Optional[List[str]] = None, + embeddings: Optional[List[List[float]]] = None, + **kwargs: Any, + ) -> List[str]: + """ + Add texts along with their corresponding embeddings and optional + metadata to the BagelDB cluster. + + Args: + texts (Iterable[str]): Texts to be added. + embeddings (Optional[List[float]]): List of embeddingvectors + metadatas (Optional[List[dict]]): Optional list of metadatas. + ids (Optional[List[str]]): List of unique ID for the texts. + + Returns: + List[str]: List of unique ID representing the added texts. + """ + # creating unique ids if None + if ids is None: + ids = [str(uuid.uuid1()) for _ in texts] + + texts = list(texts) + if self._embedding_function and embeddings is None and texts: + embeddings = self._embedding_function.embed_documents(texts) + if metadatas: + length_diff = len(texts) - len(metadatas) + if length_diff: + metadatas = metadatas + [{}] * length_diff + empty_ids = [] + non_empty_ids = [] + for idx, metadata in enumerate(metadatas): + if metadata: + non_empty_ids.append(idx) + else: + empty_ids.append(idx) + if non_empty_ids: + metadatas = [metadatas[idx] for idx in non_empty_ids] + texts_with_metadatas = [texts[idx] for idx in non_empty_ids] + embeddings_with_metadatas = ( + [embeddings[idx] for idx in non_empty_ids] if embeddings else None + ) + ids_with_metadata = [ids[idx] for idx in non_empty_ids] + self._cluster.upsert( + embeddings=embeddings_with_metadatas, + metadatas=metadatas, + documents=texts_with_metadatas, + ids=ids_with_metadata, + ) + if empty_ids: + texts_without_metadatas = [texts[j] for j in empty_ids] + embeddings_without_metadatas = ( + [embeddings[j] for j in empty_ids] if embeddings else None + ) + ids_without_metadatas = [ids[j] for j in empty_ids] + self._cluster.upsert( + embeddings=embeddings_without_metadatas, + documents=texts_without_metadatas, + ids=ids_without_metadatas, + ) + else: + metadatas = [{}] * len(texts) + self._cluster.upsert( + embeddings=embeddings, + documents=texts, + metadatas=metadatas, + ids=ids, + ) + return ids + + def similarity_search( + self, + query: str, + k: int = DEFAULT_K, + where: Optional[Dict[str, str]] = None, + **kwargs: Any, + ) -> List[Document]: + """ + Run a similarity search with BagelDB. + + Args: + query (str): The query text to search for similar documents/texts. + k (int): The number of results to return. + where (Optional[Dict[str, str]]): Metadata filters to narrow down. + + Returns: + List[Document]: List of documents objects representing + the documents most similar to the query text. + """ + docs_and_scores = self.similarity_search_with_score(query, k, where=where) + return [doc for doc, _ in docs_and_scores] + + def similarity_search_with_score( + self, + query: str, + k: int = DEFAULT_K, + where: Optional[Dict[str, str]] = None, + **kwargs: Any, + ) -> List[Tuple[Document, float]]: + """ + Run a similarity search with BagelDB and return documents with their + corresponding similarity scores. + + Args: + query (str): The query text to search for similar documents. + k (int): The number of results to return. + where (Optional[Dict[str, str]]): Filter using metadata. + + Returns: + List[Tuple[Document, float]]: List of tuples, each containing a + Document object representing a similar document and its + corresponding similarity score. + + """ + results = self.__query_cluster(query_texts=[query], n_results=k, where=where) + return _results_to_docs_and_scores(results) + + @classmethod + def from_texts( + cls: Type[Bagel], + texts: List[str], + embedding: Optional[Embeddings] = None, + metadatas: Optional[List[dict]] = None, + ids: Optional[List[str]] = None, + cluster_name: str = _LANGCHAIN_DEFAULT_CLUSTER_NAME, + client_settings: Optional[bagel.config.Settings] = None, + cluster_metadata: Optional[Dict] = None, + client: Optional[bagel.Client] = None, + text_embeddings: Optional[List[List[float]]] = None, + **kwargs: Any, + ) -> Bagel: + """ + Create and initialize a Bagel instance from list of texts. + + Args: + texts (List[str]): List of text content to be added. + cluster_name (str): The name of the BagelDB cluster. + client_settings (Optional[bagel.config.Settings]): Client settings. + cluster_metadata (Optional[Dict]): Metadata of the cluster. + embeddings (Optional[Embeddings]): List of embedding. + metadatas (Optional[List[dict]]): List of metadata. + ids (Optional[List[str]]): List of unique ID. Defaults to None. + client (Optional[bagel.Client]): Bagel client instance. + + Returns: + Bagel: Bagel vectorstore. + """ + bagel_cluster = cls( + cluster_name=cluster_name, + embedding_function=embedding, + client_settings=client_settings, + client=client, + cluster_metadata=cluster_metadata, + **kwargs, + ) + _ = bagel_cluster.add_texts( + texts=texts, embeddings=text_embeddings, metadatas=metadatas, ids=ids + ) + return bagel_cluster + + def delete_cluster(self) -> None: + """Delete the cluster.""" + self._client.delete_cluster(self._cluster.name) + + def similarity_search_by_vector_with_relevance_scores( + self, + query_embeddings: List[float], + k: int = DEFAULT_K, + where: Optional[Dict[str, str]] = None, + **kwargs: Any, + ) -> List[Tuple[Document, float]]: + """ + Return docs most similar to embedding vector and similarity score. + """ + results = self.__query_cluster( + query_embeddings=query_embeddings, n_results=k, where=where + ) + return _results_to_docs_and_scores(results) + + def similarity_search_by_vector( + self, + embedding: List[float], + k: int = DEFAULT_K, + where: Optional[Dict[str, str]] = None, + **kwargs: Any, + ) -> List[Document]: + """Return docs most similar to embedding vector.""" + results = self.__query_cluster( + query_embeddings=embedding, n_results=k, where=where + ) + return _results_to_docs(results) + + def _select_relevance_score_fn(self) -> Callable[[float], float]: + """ + Select and return the appropriate relevance score function based + on the distance metric used in the BagelDB cluster. + """ + if self.override_relevance_score_fn: + return self.override_relevance_score_fn + + distance = "l2" + distance_key = "hnsw:space" + metadata = self._cluster.metadata + + if metadata and distance_key in metadata: + distance = metadata[distance_key] + + if distance == "cosine": + return self._cosine_relevance_score_fn + elif distance == "l2": + return self._euclidean_relevance_score_fn + elif distance == "ip": + return self._max_inner_product_relevance_score_fn + else: + raise ValueError( + "No supported normalization function for distance" + f" metric of type: {distance}. Consider providing" + " relevance_score_fn to Bagel constructor." + ) + + @classmethod + def from_documents( + cls: Type[Bagel], + documents: List[Document], + embedding: Optional[Embeddings] = None, + ids: Optional[List[str]] = None, + cluster_name: str = _LANGCHAIN_DEFAULT_CLUSTER_NAME, + client_settings: Optional[bagel.config.Settings] = None, + client: Optional[bagel.Client] = None, + cluster_metadata: Optional[Dict] = None, + **kwargs: Any, + ) -> Bagel: + """ + Create a Bagel vectorstore from a list of documents. + + Args: + documents (List[Document]): List of Document objects to add to the + Bagel vectorstore. + embedding (Optional[List[float]]): List of embedding. + ids (Optional[List[str]]): List of IDs. Defaults to None. + cluster_name (str): The name of the BagelDB cluster. + client_settings (Optional[bagel.config.Settings]): Client settings. + client (Optional[bagel.Client]): Bagel client instance. + cluster_metadata (Optional[Dict]): Metadata associated with the + Bagel cluster. Defaults to None. + + Returns: + Bagel: Bagel vectorstore. + """ + texts = [doc.page_content for doc in documents] + metadatas = [doc.metadata for doc in documents] + return cls.from_texts( + texts=texts, + embedding=embedding, + metadatas=metadatas, + ids=ids, + cluster_name=cluster_name, + client_settings=client_settings, + client=client, + cluster_metadata=cluster_metadata, + **kwargs, + ) + + def update_document(self, document_id: str, document: Document) -> None: + """Update a document in the cluster. + + Args: + document_id (str): ID of the document to update. + document (Document): Document to update. + """ + text = document.page_content + metadata = document.metadata + self._cluster.update( + ids=[document_id], + documents=[text], + metadatas=[metadata], + ) + + def get( + self, + ids: Optional[OneOrMany[ID]] = None, + where: Optional[Where] = None, + limit: Optional[int] = None, + offset: Optional[int] = None, + where_document: Optional[WhereDocument] = None, + include: Optional[List[str]] = None, + ) -> Dict[str, Any]: + """Gets the collection.""" + kwargs = { + "ids": ids, + "where": where, + "limit": limit, + "offset": offset, + "where_document": where_document, + } + + if include is not None: + kwargs["include"] = include + + return self._cluster.get(**kwargs) + + def delete(self, ids: Optional[List[str]] = None, **kwargs: Any) -> None: + """ + Delete by IDs. + + Args: + ids: List of ids to delete. + """ + self._cluster.delete(ids=ids) diff --git a/libs/langchain/poetry.lock b/libs/langchain/poetry.lock index 282136c1a..a17a0224f 100644 --- a/libs/langchain/poetry.lock +++ b/libs/langchain/poetry.lock @@ -518,7 +518,7 @@ name = "arxiv" version = "1.4.7" description = "Python wrapper for the arXiv API: http://arxiv.org/help/api/" category = "main" -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "arxiv-1.4.7-py3-none-any.whl", hash = "sha256:22b8f610957bb6859a25fac9dc205ab6ba76d521791119a5762ea52625e398a0"}, @@ -964,6 +964,35 @@ tracing-otlp = ["opentelemetry-exporter-otlp (==1.17.0)"] tracing-zipkin = ["opentelemetry-exporter-zipkin (==1.17.0)"] triton = ["tritonclient[all] (>=2.29.0)"] +[[package]] +name = "betabageldb" +version = "0.2.32" +description = "BagelDB is a Python library for interacting with the BagelDB API." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "betabageldb-0.2.32-py3-none-any.whl", hash = "sha256:1fc6fc6b1353bc8b8ca5f72ad0aa5d38069fd0d7236a6d4c96c12bc7bad8913e"}, + {file = "betabageldb-0.2.32.tar.gz", hash = "sha256:17ca10b8edf7b7689c92e904bbe90292c71bbf8d2fa11e468fdda3af7ab222bf"}, +] + +[package.dependencies] +certifi = ">=2023.5.7" +charset-normalizer = ">=3.2.0" +graphlib-backport = ">=1.0.3" +idna = ">=3.4" +numpy = ">=1.21.6" +overrides = ">=7.3.1" +pandas = ">=2.0.1" +pydantic = ">=1.10.10,<2.0" +python-dateutil = ">=2.8.2" +pytz = ">=2023.3" +requests = ">=2.28" +six = ">=1.16.0" +typing-extensions = ">=4.6.3" +tzdata = ">=2022.1" +urllib3 = ">=1.26.16" + [[package]] name = "bibtexparser" version = "1.4.0" @@ -1100,6 +1129,21 @@ files = [ [package.dependencies] numpy = ">=1.15.0" +[[package]] +name = "blurhash" +version = "1.1.4" +description = "Pure-Python implementation of the blurhash algorithm." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "blurhash-1.1.4-py2.py3-none-any.whl", hash = "sha256:7611c1bc41383d2349b6129208587b5d61e8792ce953893cb49c38beeb400d1d"}, + {file = "blurhash-1.1.4.tar.gz", hash = "sha256:da56b163e5a816e4ad07172f5639287698e09d7f3dc38d18d9726d9c1dbc4cee"}, +] + +[package.extras] +test = ["Pillow", "numpy", "pytest"] + [[package]] name = "boto3" version = "1.26.76" @@ -1520,87 +1564,87 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] [[package]] @@ -2365,7 +2409,7 @@ name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." category = "main" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, @@ -2860,7 +2904,7 @@ name = "feedparser" version = "6.0.10" description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" category = "main" -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "feedparser-6.0.10-py3-none-any.whl", hash = "sha256:79c257d526d13b944e965f6095700587f27388e50ea16fd245babe4dfae7024f"}, @@ -3568,6 +3612,18 @@ requests = ">=2.0,<3.0" typing-extensions = ">=4.0,<5.0" websockets = ">=10.0,<12.0" +[[package]] +name = "graphlib-backport" +version = "1.0.3" +description = "Backport of the Python 3.9 graphlib module for Python 3.6+" +category = "main" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "graphlib_backport-1.0.3-py3-none-any.whl", hash = "sha256:24246967b9e7e6a91550bc770e6169585d35aa32790258579a8a3899a8c18fde"}, + {file = "graphlib_backport-1.0.3.tar.gz", hash = "sha256:7bb8fc7757b8ae4e6d8000a26cd49e9232aaa9a3aa57edb478474b8424bfaae2"}, +] + [[package]] name = "graphql-core" version = "3.2.3" @@ -3659,7 +3715,7 @@ name = "grpcio" version = "1.47.5" description = "HTTP/2-based RPC framework" category = "main" -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "grpcio-1.47.5-cp310-cp310-linux_armv7l.whl", hash = "sha256:acc73289d0c44650aa1f21eccfa967f5623b01c3b5e2b4596fe5f9c5bf10956d"}, @@ -5583,6 +5639,32 @@ files = [ [package.dependencies] marshmallow = ">=2.0.0" +[[package]] +name = "mastodon-py" +version = "1.8.1" +description = "Python wrapper for the Mastodon API" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "Mastodon.py-1.8.1-py2.py3-none-any.whl", hash = "sha256:22bc7e060518ef2eaa69d911cde6e4baf56bed5ea0dd407392c49051a7ac526a"}, + {file = "Mastodon.py-1.8.1.tar.gz", hash = "sha256:4a64cb94abadd6add73e4b8eafdb5c466048fa5f638284fd2189034104d4687e"}, +] + +[package.dependencies] +blurhash = ">=1.1.4" +decorator = ">=4.0.0" +python-dateutil = "*" +python-magic = {version = "*", markers = "platform_system != \"Windows\""} +python-magic-bin = {version = "*", markers = "platform_system == \"Windows\""} +requests = ">=2.4.2" +six = "*" + +[package.extras] +blurhash = ["blurhash (>=1.1.4)"] +test = ["blurhash (>=1.1.4)", "cryptography (>=1.6.0)", "http-ece (>=1.0.5)", "pytest", "pytest-cov", "pytest-mock", "pytest-runner", "pytest-vcr", "pytz", "requests-mock", "vcrpy"] +webpush = ["cryptography (>=1.6.0)", "http-ece (>=1.0.5)"] + [[package]] name = "matplotlib" version = "3.7.2" @@ -5755,7 +5837,7 @@ name = "momento" version = "1.6.0" description = "SDK for Momento" category = "main" -optional = true +optional = false python-versions = ">=3.7,<4.0" files = [ {file = "momento-1.6.0-py3-none-any.whl", hash = "sha256:a7f9a85a4372274bd5eafba95d6ab72bafa2d947abfbb16f8d0afb4b6501e4fb"}, @@ -5772,7 +5854,7 @@ name = "momento-wire-types" version = "0.64.1" description = "Momento Client Proto Generated Files" category = "main" -optional = true +optional = false python-versions = ">=3.7,<4.0" files = [ {file = "momento_wire_types-0.64.1-py3-none-any.whl", hash = "sha256:b6fb773831e7aaf95c60223e450e985606076a45df120814ecb9a97904948fe5"}, @@ -7374,7 +7456,7 @@ files = [ name = "overrides" version = "7.3.1" description = "A decorator to automatically detect mismatch when overriding a method." -category = "dev" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -8380,48 +8462,48 @@ files = [ [[package]] name = "pydantic" -version = "1.10.9" +version = "1.10.12" description = "Data validation and settings management using python type hints" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e692dec4a40bfb40ca530e07805b1208c1de071a18d26af4a2a0d79015b352ca"}, - {file = "pydantic-1.10.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c52eb595db83e189419bf337b59154bdcca642ee4b2a09e5d7797e41ace783f"}, - {file = "pydantic-1.10.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:939328fd539b8d0edf244327398a667b6b140afd3bf7e347cf9813c736211896"}, - {file = "pydantic-1.10.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b48d3d634bca23b172f47f2335c617d3fcb4b3ba18481c96b7943a4c634f5c8d"}, - {file = "pydantic-1.10.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f0b7628fb8efe60fe66fd4adadd7ad2304014770cdc1f4934db41fe46cc8825f"}, - {file = "pydantic-1.10.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e1aa5c2410769ca28aa9a7841b80d9d9a1c5f223928ca8bec7e7c9a34d26b1d4"}, - {file = "pydantic-1.10.9-cp310-cp310-win_amd64.whl", hash = "sha256:eec39224b2b2e861259d6f3c8b6290d4e0fbdce147adb797484a42278a1a486f"}, - {file = "pydantic-1.10.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d111a21bbbfd85c17248130deac02bbd9b5e20b303338e0dbe0faa78330e37e0"}, - {file = "pydantic-1.10.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e9aec8627a1a6823fc62fb96480abe3eb10168fd0d859ee3d3b395105ae19a7"}, - {file = "pydantic-1.10.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07293ab08e7b4d3c9d7de4949a0ea571f11e4557d19ea24dd3ae0c524c0c334d"}, - {file = "pydantic-1.10.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee829b86ce984261d99ff2fd6e88f2230068d96c2a582f29583ed602ef3fc2c"}, - {file = "pydantic-1.10.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4b466a23009ff5cdd7076eb56aca537c745ca491293cc38e72bf1e0e00de5b91"}, - {file = "pydantic-1.10.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7847ca62e581e6088d9000f3c497267868ca2fa89432714e21a4fb33a04d52e8"}, - {file = "pydantic-1.10.9-cp311-cp311-win_amd64.whl", hash = "sha256:7845b31959468bc5b78d7b95ec52fe5be32b55d0d09983a877cca6aedc51068f"}, - {file = "pydantic-1.10.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:517a681919bf880ce1dac7e5bc0c3af1e58ba118fd774da2ffcd93c5f96eaece"}, - {file = "pydantic-1.10.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67195274fd27780f15c4c372f4ba9a5c02dad6d50647b917b6a92bf00b3d301a"}, - {file = "pydantic-1.10.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2196c06484da2b3fded1ab6dbe182bdabeb09f6318b7fdc412609ee2b564c49a"}, - {file = "pydantic-1.10.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6257bb45ad78abacda13f15bde5886efd6bf549dd71085e64b8dcf9919c38b60"}, - {file = "pydantic-1.10.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3283b574b01e8dbc982080d8287c968489d25329a463b29a90d4157de4f2baaf"}, - {file = "pydantic-1.10.9-cp37-cp37m-win_amd64.whl", hash = "sha256:5f8bbaf4013b9a50e8100333cc4e3fa2f81214033e05ac5aa44fa24a98670a29"}, - {file = "pydantic-1.10.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9cd67fb763248cbe38f0593cd8611bfe4b8ad82acb3bdf2b0898c23415a1f82"}, - {file = "pydantic-1.10.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f50e1764ce9353be67267e7fd0da08349397c7db17a562ad036aa7c8f4adfdb6"}, - {file = "pydantic-1.10.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73ef93e5e1d3c8e83f1ff2e7fdd026d9e063c7e089394869a6e2985696693766"}, - {file = "pydantic-1.10.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:128d9453d92e6e81e881dd7e2484e08d8b164da5507f62d06ceecf84bf2e21d3"}, - {file = "pydantic-1.10.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ad428e92ab68798d9326bb3e5515bc927444a3d71a93b4a2ca02a8a5d795c572"}, - {file = "pydantic-1.10.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fab81a92f42d6d525dd47ced310b0c3e10c416bbfae5d59523e63ea22f82b31e"}, - {file = "pydantic-1.10.9-cp38-cp38-win_amd64.whl", hash = "sha256:963671eda0b6ba6926d8fc759e3e10335e1dc1b71ff2a43ed2efd6996634dafb"}, - {file = "pydantic-1.10.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:970b1bdc6243ef663ba5c7e36ac9ab1f2bfecb8ad297c9824b542d41a750b298"}, - {file = "pydantic-1.10.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7e1d5290044f620f80cf1c969c542a5468f3656de47b41aa78100c5baa2b8276"}, - {file = "pydantic-1.10.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83fcff3c7df7adff880622a98022626f4f6dbce6639a88a15a3ce0f96466cb60"}, - {file = "pydantic-1.10.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0da48717dc9495d3a8f215e0d012599db6b8092db02acac5e0d58a65248ec5bc"}, - {file = "pydantic-1.10.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0a2aabdc73c2a5960e87c3ffebca6ccde88665616d1fd6d3db3178ef427b267a"}, - {file = "pydantic-1.10.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9863b9420d99dfa9c064042304868e8ba08e89081428a1c471858aa2af6f57c4"}, - {file = "pydantic-1.10.9-cp39-cp39-win_amd64.whl", hash = "sha256:e7c9900b43ac14110efa977be3da28931ffc74c27e96ee89fbcaaf0b0fe338e1"}, - {file = "pydantic-1.10.9-py3-none-any.whl", hash = "sha256:6cafde02f6699ce4ff643417d1a9223716ec25e228ddc3b436fe7e2d25a1f305"}, - {file = "pydantic-1.10.9.tar.gz", hash = "sha256:95c70da2cd3b6ddf3b9645ecaa8d98f3d80c606624b6d245558d202cd23ea3be"}, + {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, + {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, + {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, + {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, + {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, + {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, + {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, + {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, + {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, + {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, + {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, + {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, + {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, + {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, + {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, + {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, + {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, + {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, + {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, + {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, + {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, + {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, + {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, + {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, + {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, + {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, + {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, + {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, + {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, + {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, + {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, + {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, + {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, + {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, + {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, + {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, ] [package.dependencies] @@ -8478,6 +8560,24 @@ files = [ [package.dependencies] typing-extensions = "*" +[[package]] +name = "pygithub" +version = "1.59.1" +description = "Use the full Github API v3" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyGithub-1.59.1-py3-none-any.whl", hash = "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9"}, + {file = "PyGithub-1.59.1.tar.gz", hash = "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217"}, +] + +[package.dependencies] +deprecated = "*" +pyjwt = {version = ">=2.4.0", extras = ["crypto"]} +pynacl = ">=1.4.0" +requests = ">=2.14.0" + [[package]] name = "pygments" version = "2.15.1" @@ -8498,7 +8598,7 @@ name = "pyjwt" version = "2.7.0" description = "JSON Web Token implementation in Python" category = "main" -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "PyJWT-2.7.0-py3-none-any.whl", hash = "sha256:ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1"}, @@ -8683,6 +8783,33 @@ files = [ {file = "PyMuPDF-1.22.3.tar.gz", hash = "sha256:5ecd928e96e63092571020973aa145b57b75707f3a3df97c742e563112615891"}, ] +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + [[package]] name = "pynvml" version = "11.5.0" @@ -9181,6 +9308,31 @@ files = [ {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, ] +[[package]] +name = "python-magic" +version = "0.4.27" +description = "File type identification using libmagic" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"}, + {file = "python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"}, +] + +[[package]] +name = "python-magic-bin" +version = "0.4.14" +description = "File type identification using libmagic binary package" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "python_magic_bin-0.4.14-py2.py3-none-macosx_10_6_intel.whl", hash = "sha256:7b1743b3dbf16601d6eedf4e7c2c9a637901b0faaf24ad4df4d4527e7d8f66a4"}, + {file = "python_magic_bin-0.4.14-py2.py3-none-win32.whl", hash = "sha256:34a788c03adde7608028203e2dbb208f1f62225ad91518787ae26d603ae68892"}, + {file = "python_magic_bin-0.4.14-py2.py3-none-win_amd64.whl", hash = "sha256:90be6206ad31071a36065a2fc169c5afb5e0355cbe6030e87641c6c62edc2b69"}, +] + [[package]] name = "python-multipart" version = "0.0.6" @@ -9431,14 +9583,14 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "qdrant-client" -version = "1.3.1" +version = "1.4.0" description = "Client library for the Qdrant vector search engine" category = "main" optional = true python-versions = ">=3.7,<3.12" files = [ - {file = "qdrant_client-1.3.1-py3-none-any.whl", hash = "sha256:9640855585d1f532094e342f07e0f2ef00652a60fc5d903c92ca3989a1e86318"}, - {file = "qdrant_client-1.3.1.tar.gz", hash = "sha256:a999358b10e611d71b4b04c6ded36a6cfc963e56b4c3f99d9c1a603ca524a82e"}, + {file = "qdrant_client-1.4.0-py3-none-any.whl", hash = "sha256:2f9e563955b5163da98016f2ed38d9aea5058576c7c5844e9aa205d28155f56d"}, + {file = "qdrant_client-1.4.0.tar.gz", hash = "sha256:2e54f5a80eb1e7e67f4603b76365af4817af15fb3d0c0f44de4fd93afbbe5537"}, ] [package.dependencies] @@ -9447,8 +9599,7 @@ grpcio-tools = ">=1.41.0" httpx = {version = ">=0.14.0", extras = ["http2"]} numpy = {version = ">=1.21", markers = "python_version >= \"3.8\""} portalocker = ">=2.7.0,<3.0.0" -pydantic = ">=1.8,<2.0" -typing-extensions = ">=4.0.0,<4.6.0" +pydantic = ">=1.10.8" urllib3 = ">=1.26.14,<2.0.0" [[package]] @@ -10325,7 +10476,7 @@ name = "sgmllib3k" version = "1.0.0" description = "Py3k port of sgmllib." category = "main" -optional = true +optional = false python-versions = "*" files = [ {file = "sgmllib3k-1.0.0.tar.gz", hash = "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"}, @@ -11977,14 +12128,14 @@ files = [ [[package]] name = "typing-extensions" -version = "4.5.0" +version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, ] [[package]] @@ -13271,7 +13422,7 @@ clarifai = ["clarifai"] cohere = ["cohere"] docarray = ["docarray"] embeddings = ["sentence-transformers"] -extended-testing = ["amazon-textract-caller", "anthropic", "atlassian-python-api", "beautifulsoup4", "bibtexparser", "cassio", "chardet", "esprima", "feedparser", "geopandas", "gitpython", "gql", "html2text", "jinja2", "jq", "lxml", "mwparserfromhell", "mwxml", "newspaper3k", "openai", "openai", "pandas", "pdfminer-six", "pgvector", "psychicapi", "py-trello", "pymupdf", "pypdf", "pypdfium2", "pyspark", "rank-bm25", "rapidfuzz", "requests-toolbelt", "scikit-learn", "streamlit", "sympy", "telethon", "tqdm", "xata", "xinference", "xmltodict", "zep-python"] +extended-testing = ["amazon-textract-caller", "anthropic", "atlassian-python-api", "beautifulsoup4", "betabageldb", "bibtexparser", "cassio", "chardet", "esprima", "feedparser", "geopandas", "gitpython", "gql", "html2text", "jinja2", "jq", "lxml", "mwparserfromhell", "mwxml", "newspaper3k", "openai", "openai", "pandas", "pdfminer-six", "pgvector", "psychicapi", "py-trello", "pymupdf", "pypdf", "pypdfium2", "pyspark", "rank-bm25", "rapidfuzz", "requests-toolbelt", "scikit-learn", "streamlit", "sympy", "telethon", "tqdm", "xata", "xinference", "xmltodict", "zep-python"] javascript = ["esprima"] llms = ["anthropic", "clarifai", "cohere", "huggingface_hub", "manifest-ml", "nlpcloud", "openai", "openllm", "openlm", "torch", "transformers", "xinference"] openai = ["openai", "tiktoken"] @@ -13281,4 +13432,4 @@ text-helpers = ["chardet"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "74907003b75271582d92396b8323021eb8e1596624536d7653b548828af4a40c" +content-hash = "b519c9ac1e3bfe6ff4d10bab2005d3571e9303561863a313a218e8534af56033" diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index 6131595b8..e098d7ec3 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -133,6 +133,8 @@ newspaper3k = {version = "^0.2.8", optional = true} amazon-textract-caller = {version = "<2", optional = true} xata = {version = "^1.0.0a7", optional = true} xmltodict = {version = "^0.13.0", optional = true} +betabageldb = {version = "0.2.32", optional = true, python = ">=3.7,<3.11"} + [tool.poetry.group.test.dependencies] # The only dependencies that should be added are @@ -179,6 +181,13 @@ wrapt = "^1.15.0" openai = "^0.27.4" python-dotenv = "^1.0.0" cassio = "^0.0.7" +arxiv = "^1.4" +mastodon-py = "^1.8.1" +momento = "^1.5.0" +# Please do not add any dependencies in the test_integration group +# See instructions above ^^ +pygithub = "^1.59.0" +betabageldb = "^0.2.32" [tool.poetry.group.lint.dependencies] ruff = "^0.0.249" @@ -349,6 +358,7 @@ extended_testing = [ "feedparser", "xata", "xmltodict", + "betabageldb", "anthropic", ] @@ -401,4 +411,4 @@ ignore-regex = '.*(Stati Uniti|Tense=Pres).*' # whats is a typo but used frequently in queries so kept as is # aapply - async apply # unsecure - typo but part of API, decided to not bother for now -ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon' +ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon' \ No newline at end of file diff --git a/libs/langchain/tests/integration_tests/vectorstores/test_bagel.py b/libs/langchain/tests/integration_tests/vectorstores/test_bagel.py new file mode 100644 index 000000000..c04bb0f25 --- /dev/null +++ b/libs/langchain/tests/integration_tests/vectorstores/test_bagel.py @@ -0,0 +1,169 @@ +from bagel.config import Settings + +from langchain.docstore.document import Document +from langchain.vectorstores import Bagel +from tests.integration_tests.vectorstores.fake_embeddings import ( + FakeEmbeddings, +) + + +def test_similarity_search() -> None: + """Test smiliarity search""" + setting = Settings( + bagel_api_impl="rest", + bagel_server_host="api.bageldb.ai", + ) + bagel = Bagel(client_settings=setting) + bagel.add_texts(texts=["hello bagel", "hello langchain"]) + result = bagel.similarity_search(query="bagel", k=1) + assert result == [Document(page_content="hello bagel")] + bagel.delete_cluster() + + +def test_bagel() -> None: + """Test from_texts""" + texts = ["hello bagel", "hello langchain"] + txt_search = Bagel.from_texts(cluster_name="testing", texts=texts) + output = txt_search.similarity_search("hello bagel", k=1) + assert output == [Document(page_content="hello bagel")] + txt_search.delete_cluster() + + +def test_with_metadatas() -> None: + """Test end to end construction and search.""" + texts = ["hello bagel", "hello langchain"] + metadatas = [{"metadata": str(i)} for i in range(len(texts))] + txt_search = Bagel.from_texts( + cluster_name="testing", + texts=texts, + metadatas=metadatas, + ) + output = txt_search.similarity_search("hello bagel", k=1) + assert output == [Document(page_content="hello bagel", metadata={"metadata": "0"})] + txt_search.delete_cluster() + + +def test_with_metadatas_with_scores() -> None: + """Test end to end construction and scored search.""" + texts = ["hello bagel", "hello langchain"] + metadatas = [{"page": str(i)} for i in range(len(texts))] + txt_search = Bagel.from_texts( + cluster_name="testing", texts=texts, metadatas=metadatas + ) + output = txt_search.similarity_search_with_score("hello bagel", k=1) + assert output == [ + (Document(page_content="hello bagel", metadata={"page": "0"}), 0.0) + ] + txt_search.delete_cluster() + + +def test_with_metadatas_with_scores_using_vector() -> None: + """Test end to end construction and scored search, using embedding vector.""" + texts = ["hello bagel", "hello langchain"] + metadatas = [{"page": str(i)} for i in range(len(texts))] + embeddings = [[1.1, 2.3, 3.2], [0.3, 0.3, 0.1]] + + vector_search = Bagel.from_texts( + cluster_name="testing_vector", + texts=texts, + metadatas=metadatas, + text_embeddings=embeddings, + ) + + embedded_query = [1.1, 2.3, 3.2] + output = vector_search.similarity_search_by_vector_with_relevance_scores( + query_embeddings=embedded_query, k=1 + ) + assert output == [ + (Document(page_content="hello bagel", metadata={"page": "0"}), 0.0) + ] + vector_search.delete_cluster() + + +def test_with_metadatas_with_scores_using_vector_embe() -> None: + """Test end to end construction and scored search, using embedding vector.""" + texts = ["hello bagel", "hello langchain"] + metadatas = [{"page": str(i)} for i in range(len(texts))] + embedding_function = FakeEmbeddings() + + vector_search = Bagel.from_texts( + cluster_name="testing_vector_embedding1", + texts=texts, + metadatas=metadatas, + embedding=embedding_function, + ) + embedded_query = embedding_function.embed_query("hello bagel") + output = vector_search.similarity_search_by_vector_with_relevance_scores( + query_embeddings=embedded_query, k=1 + ) + assert output == [ + (Document(page_content="hello bagel", metadata={"page": "0"}), 0.0) + ] + vector_search.delete_cluster() + + +def test_search_filter() -> None: + """Test end to end construction and search with metadata filtering.""" + texts = ["hello bagel", "hello langchain"] + metadatas = [{"first_letter": text[0]} for text in texts] + txt_search = Bagel.from_texts( + cluster_name="testing", + texts=texts, + metadatas=metadatas, + ) + output = txt_search.similarity_search("bagel", k=1, where={"first_letter": "h"}) + assert output == [ + Document(page_content="hello bagel", metadata={"first_letter": "h"}) + ] + output = txt_search.similarity_search("langchain", k=1, where={"first_letter": "h"}) + assert output == [ + Document(page_content="hello langchain", metadata={"first_letter": "h"}) + ] + txt_search.delete_cluster() + + +def test_search_filter_with_scores() -> None: + texts = ["hello bagel", "this is langchain"] + metadatas = [{"source": "notion"}, {"source": "google"}] + txt_search = Bagel.from_texts( + cluster_name="testing", + texts=texts, + metadatas=metadatas, + ) + output = txt_search.similarity_search_with_score( + "hello bagel", k=1, where={"source": "notion"} + ) + assert output == [ + (Document(page_content="hello bagel", metadata={"source": "notion"}), 0.0) + ] + txt_search.delete_cluster() + + +def test_with_include_parameter() -> None: + """Test end to end construction and include parameter.""" + texts = ["hello bagel", "this is langchain"] + docsearch = Bagel.from_texts(cluster_name="testing", texts=texts) + output = docsearch.get(include=["embeddings"]) + assert output["embeddings"] is not None + output = docsearch.get() + assert output["embeddings"] is None + docsearch.delete_cluster() + + +def test_bagel_update_document() -> None: + """Test the update_document function in the Bagel class.""" + initial_content = "bagel" + document_id = "doc1" + original_doc = Document(page_content=initial_content, metadata={"page": "0"}) + + docsearch = Bagel.from_documents( + cluster_name="testing_docs", + documents=[original_doc], + ids=[document_id], + ) + + updated_content = "updated bagel doc" + updated_doc = Document(page_content=updated_content, metadata={"page": "0"}) + docsearch.update_document(document_id=document_id, document=updated_doc) + output = docsearch.similarity_search(updated_content, k=1) + assert output == [Document(page_content=updated_content, metadata={"page": "0"})] From 5fc07fa524ab66e7301f8e3b7a0a473211517524 Mon Sep 17 00:00:00 2001 From: Josh Phillips Date: Thu, 10 Aug 2023 17:57:19 -0600 Subject: [PATCH 039/175] change id column type to uuid to match function (#7456) The table creation process in these examples commands do not match what the recently updated functions in these example commands is looking for. This change updates the type in the table creation command. Issue Number for my report of the doc problem #7446 @rlancemartin and @eyurtsev I believe this is your area Twitter: @j1philli Co-authored-by: Bagatur --- docs/extras/integrations/vectorstores/supabase.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/extras/integrations/vectorstores/supabase.ipynb b/docs/extras/integrations/vectorstores/supabase.ipynb index 3f012948a..19dbc3d36 100644 --- a/docs/extras/integrations/vectorstores/supabase.ipynb +++ b/docs/extras/integrations/vectorstores/supabase.ipynb @@ -35,7 +35,7 @@ "\n", " -- Create a table to store your documents\n", " create table documents (\n", - " id bigserial primary key,\n", + " id uuid primary key,\n", " content text, -- corresponds to Document.pageContent\n", " metadata jsonb, -- corresponds to Document.metadata\n", " embedding vector(1536) -- 1536 works for OpenAI embeddings, change if needed\n", From 57dd4daa9ae272664dbcd30070961e1ae892f6c9 Mon Sep 17 00:00:00 2001 From: William FH <13333726+hinthornw@users.noreply.github.com> Date: Thu, 10 Aug 2023 17:07:02 -0700 Subject: [PATCH 040/175] Add string example mapper (#9086) Now that we accept any runnable or arbitrary function to evaluate, we don't always look up the input keys. If an evaluator requires references, we should try to infer if there's one key present. We only have delayed validation here but it's better than nothing --- .../langchain/smith/evaluation/string_run_evaluator.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libs/langchain/langchain/smith/evaluation/string_run_evaluator.py b/libs/langchain/langchain/smith/evaluation/string_run_evaluator.py index 4016482c1..031943380 100644 --- a/libs/langchain/langchain/smith/evaluation/string_run_evaluator.py +++ b/libs/langchain/langchain/smith/evaluation/string_run_evaluator.py @@ -375,7 +375,11 @@ class StringRunEvaluatorChain(Chain, RunEvaluator): ) # Configure how example rows are fed as a reference string to the evaluator - if reference_key is not None or data_type in (DataType.llm, DataType.chat): + if ( + reference_key is not None + or data_type in (DataType.llm, DataType.chat) + or evaluator.requires_reference + ): example_mapper = StringExampleMapper(reference_key=reference_key) elif evaluator.requires_reference: raise ValueError( From 6abb2c2c08770fd020979d49f53f8cb8cde99896 Mon Sep 17 00:00:00 2001 From: Nikhil Kumar <96546721+nikumar1206@users.noreply.github.com> Date: Thu, 10 Aug 2023 21:17:22 -0400 Subject: [PATCH 041/175] Buffer method of ConversationTokenBufferMemory should be able to return messages as string (#7057) ### Description: `ConversationBufferTokenMemory` should have a simple way of returning the conversation messages as a string. Previously to complete this, you would only have the option to return memory as an array through the buffer method and call `get_buffer_string` by importing it from `langchain.schema`, or use the `load_memory_variables` method and key into `self.memory_key`. ### Maintainer @hwchase17 --------- Co-authored-by: Bagatur --- libs/langchain/langchain/memory/buffer.py | 4 +-- .../langchain/memory/token_buffer.py | 27 +++++++++++-------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/libs/langchain/langchain/memory/buffer.py b/libs/langchain/langchain/memory/buffer.py index 7eac112b4..3809577d0 100644 --- a/libs/langchain/langchain/memory/buffer.py +++ b/libs/langchain/langchain/memory/buffer.py @@ -4,7 +4,7 @@ from pydantic import root_validator from langchain.memory.chat_memory import BaseChatMemory, BaseMemory from langchain.memory.utils import get_prompt_input_key -from langchain.schema.messages import get_buffer_string +from langchain.schema.messages import BaseMessage, get_buffer_string class ConversationBufferMemory(BaseChatMemory): @@ -29,7 +29,7 @@ class ConversationBufferMemory(BaseChatMemory): ) @property - def buffer_as_messages(self) -> List[Any]: + def buffer_as_messages(self) -> List[BaseMessage]: """Exposes the buffer as a list of messages in case return_messages is False.""" return self.chat_memory.messages diff --git a/libs/langchain/langchain/memory/token_buffer.py b/libs/langchain/langchain/memory/token_buffer.py index a964f2f6b..864ded2fc 100644 --- a/libs/langchain/langchain/memory/token_buffer.py +++ b/libs/langchain/langchain/memory/token_buffer.py @@ -15,8 +15,22 @@ class ConversationTokenBufferMemory(BaseChatMemory): max_token_limit: int = 2000 @property - def buffer(self) -> List[BaseMessage]: + def buffer(self) -> Any: """String buffer of memory.""" + return self.buffer_as_messages if self.return_messages else self.buffer_as_str + + @property + def buffer_as_str(self) -> str: + """Exposes the buffer as a string in case return_messages is True.""" + return get_buffer_string( + self.chat_memory.messages, + human_prefix=self.human_prefix, + ai_prefix=self.ai_prefix, + ) + + @property + def buffer_as_messages(self) -> List[BaseMessage]: + """Exposes the buffer as a list of messages in case return_messages is False.""" return self.chat_memory.messages @property @@ -29,16 +43,7 @@ class ConversationTokenBufferMemory(BaseChatMemory): def load_memory_variables(self, inputs: Dict[str, Any]) -> Dict[str, Any]: """Return history buffer.""" - buffer: Any = self.buffer - if self.return_messages: - final_buffer: Any = buffer - else: - final_buffer = get_buffer_string( - buffer, - human_prefix=self.human_prefix, - ai_prefix=self.ai_prefix, - ) - return {self.memory_key: final_buffer} + return {self.memory_key: self.buffer} def save_context(self, inputs: Dict[str, Any], outputs: Dict[str, str]) -> None: """Save context from this conversation to buffer. Pruned.""" From b80e3825a62e1220811cdc35301eac6884cbc654 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 18:28:55 -0700 Subject: [PATCH 042/175] Bagatur/pinecone by vector (#9087) Co-authored-by: joseph --- .../langchain/vectorstores/pinecone.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/libs/langchain/langchain/vectorstores/pinecone.py b/libs/langchain/langchain/vectorstores/pinecone.py index df5b86844..6ecf0b291 100644 --- a/libs/langchain/langchain/vectorstores/pinecone.py +++ b/libs/langchain/langchain/vectorstores/pinecone.py @@ -142,12 +142,25 @@ class Pinecone(VectorStore): Returns: List of Documents most similar to the query and score for each """ + return self.similarity_search_by_vector_with_score( + self._embed_query(query), k=k, filter=filter, namespace=namespace + ) + + def similarity_search_by_vector_with_score( + self, + embedding: List[float], + *, + k: int = 4, + filter: Optional[dict] = None, + namespace: Optional[str] = None, + ) -> List[Tuple[Document, float]]: + """Return pinecone documents most similar to embedding, along with scores.""" + if namespace is None: namespace = self._namespace - query_obj = self._embed_query(query) docs = [] results = self._index.query( - [query_obj], + [embedding], top_k=k, include_metadata=True, namespace=namespace, From a2588d6c5759e0a3c95ba32d2daea688d6ea3774 Mon Sep 17 00:00:00 2001 From: Charles Lanahan Date: Thu, 10 Aug 2023 22:02:10 -0400 Subject: [PATCH 043/175] Update openai embeddings notebook with correct embedding model in section 2 (#5831) In second section it looks like a copy/paste from the first section and doesn't include the specific embedding model mentioned in the example so I added it for clarity. --------- Co-authored-by: Bagatur --- .../integrations/text_embedding/openai.ipynb | 126 ++++++++++++++++-- 1 file changed, 113 insertions(+), 13 deletions(-) diff --git a/docs/extras/integrations/text_embedding/openai.ipynb b/docs/extras/integrations/text_embedding/openai.ipynb index 9cb9c6250..7dbf174ce 100644 --- a/docs/extras/integrations/text_embedding/openai.ipynb +++ b/docs/extras/integrations/text_embedding/openai.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 6, "id": "0be1af71", "metadata": {}, "outputs": [], @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 29, "id": "2c66e5da", "metadata": {}, "outputs": [], @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 30, "id": "01370375", "metadata": {}, "outputs": [], @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 31, "id": "bfb6142c", "metadata": {}, "outputs": [], @@ -52,7 +52,32 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 32, + "id": "91bc875d-829b-4c3d-8e6f-fc2dda30a3bd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[-0.003186025367556387,\n", + " 0.011071979803637493,\n", + " -0.004020420763285827,\n", + " -0.011658221276953042,\n", + " -0.0010534035786864363]" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query_result[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 33, "id": "0356c3b7", "metadata": {}, "outputs": [], @@ -60,6 +85,31 @@ "doc_result = embeddings.embed_documents([text])" ] }, + { + "cell_type": "code", + "execution_count": 34, + "id": "a4b0d49e-0c73-44b6-aed5-5b426564e085", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[-0.003186025367556387,\n", + " 0.011071979803637493,\n", + " -0.004020420763285827,\n", + " -0.011658221276953042,\n", + " -0.0010534035786864363]" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "doc_result[0][:5]" + ] + }, { "cell_type": "markdown", "id": "bb61bbeb", @@ -70,7 +120,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "c0b072cc", "metadata": {}, "outputs": [], @@ -80,17 +130,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "id": "a56b70f5", "metadata": {}, "outputs": [], "source": [ - "embeddings = OpenAIEmbeddings()" + "embeddings = OpenAIEmbeddings(model=\"text-search-ada-doc-001\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "id": "14aefb64", "metadata": {}, "outputs": [], @@ -100,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "id": "3c39ed33", "metadata": {}, "outputs": [], @@ -110,7 +160,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, + "id": "2ee7ce9f-d506-4810-8897-e44334412714", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0.004452846988523035,\n", + " 0.034550655976098514,\n", + " -0.015029939040690051,\n", + " 0.03827273883655212,\n", + " 0.005785414075152477]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query_result[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, "id": "e3221db6", "metadata": {}, "outputs": [], @@ -118,6 +193,31 @@ "doc_result = embeddings.embed_documents([text])" ] }, + { + "cell_type": "code", + "execution_count": 28, + "id": "a0865409-3a6d-468f-939f-abde17c7cac3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0.004452846988523035,\n", + " 0.034550655976098514,\n", + " -0.015029939040690051,\n", + " 0.03827273883655212,\n", + " 0.005785414075152477]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "doc_result[0][:5]" + ] + }, { "cell_type": "code", "execution_count": null, @@ -132,7 +232,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.11.1 64-bit", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -146,7 +246,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.1" + "version": "3.9.1" }, "vscode": { "interpreter": { From c0acbdca1b5884ac90d17908fb2bb555a9ed9909 Mon Sep 17 00:00:00 2001 From: Chenyu Zhao Date: Thu, 10 Aug 2023 19:23:42 -0700 Subject: [PATCH 044/175] Update Fireworks model names (#9085) --- docs/extras/integrations/llms/Fireworks.ipynb | 134 ++++++++++-------- .../integrations/providers/fireworks.md | 5 +- libs/langchain/langchain/llms/fireworks.py | 10 +- 3 files changed, 80 insertions(+), 69 deletions(-) diff --git a/docs/extras/integrations/llms/Fireworks.ipynb b/docs/extras/integrations/llms/Fireworks.ipynb index 3f30ab192..4da49230b 100644 --- a/docs/extras/integrations/llms/Fireworks.ipynb +++ b/docs/extras/integrations/llms/Fireworks.ipynb @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 1, "id": "60b6dbb2", "metadata": {}, "outputs": [], @@ -42,25 +42,14 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "id": "9ca87a2e", "metadata": {}, "outputs": [], "source": [ "# Initialize a Fireworks LLM\n", - "os.environ['FIREWORKS_API_KEY'] = \"\" #change this to your own API KEY\n", - "llm = Fireworks(model_id=\"accounts/fireworks/models/fireworks-llama-v2-13b-chat\")" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "43a11ba8", - "metadata": {}, - "outputs": [], - "source": [ - "# Create LLM chain\n", - "llm_chain = LLMChain(prompt=prompt, llm=llm)" + "os.environ['FIREWORKS_API_KEY'] = \"\" # Change this to your own API key\n", + "llm = Fireworks(model_id=\"accounts/fireworks/models/llama-v2-13b-chat\")" ] }, { @@ -72,16 +61,33 @@ "\n", "You can use the LLMs to call the model for specified prompt(s). \n", "\n", - "Current Specified Models: \n", - "* accounts/fireworks/models/fireworks-falcon-7b, accounts/fireworks/models/fireworks-falcon-40b-w8a16\n", - "* accounts/fireworks/models/fireworks-starcoder-1b-w8a16-1gpu, accounts/fireworks/models/fireworks-starcoder-3b-w8a16-1gpu, accounts/fireworks/models/fireworks-starcoder-7b-w8a16-1gpu, accounts/fireworks/models/fireworks-starcoder-16b-w8a16 \n", - "* accounts/fireworks/models/fireworks-llama-v2-13b, accounts/fireworks/models/fireworks-llama-v2-13b-chat, accounts/fireworks/models/fireworks-llama-v2-13b-w8a16, accounts/fireworks/models/fireworks-llama-v2-13b-chat-w8a16\n", - "* accounts/fireworks/models/fireworks-llama-v2-7b, accounts/fireworks/models/fireworks-llama-v2-7b-chat, accounts/fireworks/models/fireworks-llama-v2-7b-w8a16, accounts/fireworks/models/fireworks-llama-v2-7b-chat-w8a16, accounts/fireworks/models/fireworks-llama-v2-70b-chat-4gpu" + "Currently supported models: \n", + "\n", + "* Falcon\n", + " * `accounts/fireworks/models/falcon-7b`\n", + " * `accounts/fireworks/models/falcon-40b-w8a16`\n", + "* Llama 2\n", + " * `accounts/fireworks/models/llama-v2-7b`\n", + " * `accounts/fireworks/models/llama-v2-7b-w8a16`\n", + " * `accounts/fireworks/models/llama-v2-7b-chat`\n", + " * `accounts/fireworks/models/llama-v2-7b-chat-w8a16`\n", + " * `accounts/fireworks/models/llama-v2-13b`\n", + " * `accounts/fireworks/models/llama-v2-13b-w8a16`\n", + " * `accounts/fireworks/models/llama-v2-13b-chat`\n", + " * `accounts/fireworks/models/llama-v2-13b-chat-w8a16`\n", + " * `accounts/fireworks/models/llama-v2-70b-chat-4gpu`\n", + "* StarCoder\n", + " * `accounts/fireworks/models/starcoder-1b-w8a16-1gpu`\n", + " * `accounts/fireworks/models/starcoder-3b-w8a16-1gpu`\n", + " * `accounts/fireworks/models/starcoder-7b-w8a16-1gpu`\n", + " * `accounts/fireworks/models/starcoder-16b-w8a16`\n", + "\n", + "See the full, most up-to-date list on [app.fireworks.ai](https://app.fireworks.ai)." ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 3, "id": "bf0a425c", "metadata": {}, "outputs": [ @@ -89,29 +95,41 @@ "name": "stdout", "output_type": "stream", "text": [ + "Is it Tom Brady, Aaron Rodgers, or someone else? It's a tough question to answer, and there are strong arguments for each of these quarterbacks. Here are some of the reasons why each of these quarterbacks could be considered the best:\n", "\n", + "Tom Brady:\n", "\n", - "It's a question that has been debated for years, with different analysts and fans making their cases for various signal-callers. Here are some of the top contenders for the title of best quarterback in the NFL:\n", + "* He has the most Super Bowl wins (6) of any quarterback in NFL history.\n", + "* He has been named Super Bowl MVP four times, more than any other player.\n", + "* He has led the New England Patriots to 18 playoff victories, the most in NFL history.\n", + "* He has thrown for over 70,000 yards in his career, the most of any quarterback in NFL history.\n", + "* He has thrown for 50 or more touchdowns in a season four times, the most of any quarterback in NFL history.\n", "\n", - "1. Tom Brady: The New England Patriots legend has won six Super Bowls and has been named Super Bowl MVP four times. He's known for his precision passing, pocket presence, and ability to read defenses.\n", - "2. Aaron Rodgers: The Green Bay Packers quarterback has won two Super Bowls and has been named NFL MVP twice. He's known for his quick release, accuracy, and ability to extend plays with his feet.\n", - "3. Drew Brees: The New Orleans Saints quarterback has won a Super Bowl and has been named NFL MVP once. He's known for his accuracy, pocket presence, and ability to read defenses.\n", - "4. Patrick Mahomes: The Kansas City Chiefs quarterback has won a Super Bowl and has been named NFL MVP twice. He's known for his arm strength, athleticism, and ability to make plays outside of the pocket.\n", - "5. Russell Wilson: The Seattle Seahawks quarterback has won a Super Bowl and has been named NFL MVP once. He's known for his mobility, accuracy, and ability to extend plays with his feet.\n", + "Aaron Rodgers:\n", "\n", - "Of course, there are other talented quarterbacks in the league, such as Lamar Jackson, Deshaun Watson, and Carson Wentz, who could also be considered among the best. Ultimately, the answer to the question of who's the best quarterback in the NFL is subjective and can vary depending on individual perspectives and criteria.\n" + "* He has led the Green Bay Packers to a Super Bowl victory in 2010.\n", + "* He has been named Super Bowl MVP once.\n", + "* He has thrown for over 40,000 yards in his career, the most of any quarterback in NFL history.\n", + "* He has thrown for 40 or more touchdowns in a season three times, the most of any quarterback in NFL history.\n", + "* He has a career passer rating of 103.1, the highest of any quarterback in NFL history.\n", + "\n", + "So, who's the best quarterback in the NFL? It's a tough call, but here's my opinion:\n", + "\n", + "I think Aaron Rodgers is the best quarterback in the NFL right now. He has led the Packers to a Super Bowl victory and has had some incredible seasons, including the 2011 season when he threw for 45 touchdowns and just 6 interceptions. He has a strong arm, great accuracy, and is incredibly mobile for a quarterback of his size. He also has a great sense of timing and knows when to take risks and when to play it safe.\n", + "\n", + "Tom Brady is a close second, though. He has an incredible track record of success, including six Super Bowl victories, and has been one of the most consistent quarterbacks in the league for the past two decades. He has a strong arm and is incredibly accurate\n" ] } ], "source": [ - "#single prompt\n", + "# Single prompt\n", "output = llm(\"Who's the best quarterback in the NFL?\")\n", "print(output)" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 4, "id": "afc7de6f", "metadata": {}, "outputs": [ @@ -119,19 +137,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "generations=[[Generation(text=\"\\nWho is the best cricket player in the world in 2016?\\nThe best cricket player in the world in 2016 is Virat Kohli. The Indian captain has had a fabulous year, scoring heavily in all formats of the game, leading India to several victories, and breaking several records. In Test cricket, Kohli has scored 1215 runs at an average of 75.33 with 6 centuries and 4 fifties, which is the highest number of runs scored by any player in a calendar year. In ODI cricket, he has scored 1143 runs at an average of 83.42 with 7 centuries and 6 fifties, which is also the highest number of runs scored by any player in a calendar year. Additionally, Kohli has led India to the number one ranking in Test cricket, and has been named the ICC Test Player of the Year and the ICC ODI Player of the Year.\\nVirat Kohli has been in incredible form in 2016, and his performances have made him the standout player of the year. Other players who have had a great year include Steve Smith, Joe Root, and Kane Williamson, but Kohli's consistency and dominance in all formats of the game make him the best cricket player in the world in 2016.\", generation_info=None)], [Generation(text=\"\\n\\nA: LeBron James.\\n\\nB: Kevin Durant.\\n\\nC: Steph Curry.\\n\\nD: James Harden.\\n\\nE: Other (please specify).\\n\\nWhat's your answer?\", generation_info=None)]] llm_output={'token_usage': {}, 'model_id': 'fireworks-llama-v2-13b-chat'} run=[RunInfo(run_id=UUID('d14b6bee-7692-46ad-8798-acb6f72fc7fb')), RunInfo(run_id=UUID('b9f5b3b5-9e62-4eaf-b269-ecf0cbbcfb82'))]\n" + "[[Generation(text='\\nThe best cricket player in 2016 is a matter of opinion, but some of the top contenders for the title include:\\n\\n1. Virat Kohli (India): Kohli had a phenomenal year in 2016, scoring over 1,000 runs in Test cricket, including four centuries, and averaging over 70. He also scored heavily in ODI cricket, with an average of over 80.\\n2. Steve Smith (Australia): Smith had a remarkable year in 2016, leading Australia to a Test series victory in India and scoring over 1,000 runs in the format, including five centuries. He also averaged over 60 in ODI cricket.\\n3. KL Rahul (India): Rahul had a breakout year in 2016, scoring over 1,000 runs in Test cricket, including four centuries, and averaging over 60. He also scored heavily in ODI cricket, with an average of over 70.\\n4. Joe Root (England): Root had a solid year in 2016, scoring over 1,000 runs in Test cricket, including four centuries, and averaging over 50. He also scored heavily in ODI cricket, with an average of over 80.\\n5. Quinton de Kock (South Africa): De Kock had a remarkable year in 2016, scoring over 1,000 runs in ODI cricket, including six centuries, and averaging over 80. He also scored heavily in Test cricket, with an average of over 50.\\n\\nThese are just a few of the top contenders for the title of best cricket player in 2016, but there were many other talented players who also had impressive years. Ultimately, the answer to this question is subjective and depends on individual opinions and criteria for evaluation.', generation_info=None)], [Generation(text=\"\\nThis is a tough one, as there are so many great players in the league right now. But if I had to choose one, I'd say LeBron James is the best basketball player in the league. He's a once-in-a-generation talent who can dominate the game in so many ways. He's got incredible speed, strength, and court vision, and he's always finding new ways to improve his game. Plus, he's been doing it at an elite level for over a decade now, which is just amazing.\\n\\nBut don't just take my word for it - there are plenty of other great players in the league who could make a strong case for being the best. Guys like Kevin Durant, Steph Curry, James Harden, and Giannis Antetokounmpo are all having incredible seasons, and they've all got their own unique skills and strengths that make them special. So ultimately, it's up to you to decide who you think is the best basketball player in the league.\", generation_info=None)]]\n" ] } ], "source": [ - "#calling multiple prompts\n", - "output = llm.generate([\"Who's the best cricket player in 2016?\", \"Who's the best basketball player in the league?\"])\n", - "print(output)" + "# Calling multiple prompts\n", + "output = llm.generate([\n", + " \"Who's the best cricket player in 2016?\",\n", + " \"Who's the best basketball player in the league?\",\n", + "])\n", + "print(output.generations)" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 5, "id": "b801c20d", "metadata": {}, "outputs": [ @@ -140,13 +161,13 @@ "output_type": "stream", "text": [ "\n", - "Kansas City in December can be quite chilly, with average high\n" + "Kansas City in December is quite cold, with temperatures typically r\n" ] } ], "source": [ - "#setting parameters: model_id, temperature, max_tokens, top_p\n", - "llm = Fireworks(model_id=\"accounts/fireworks/models/fireworks-llama-v2-13b-chat\", temperature=0.7, max_tokens=15, top_p=1.0)\n", + "# Setting additional parameters: temperature, max_tokens, top_p\n", + "llm = Fireworks(model_id=\"accounts/fireworks/models/llama-v2-13b-chat\", temperature=0.7, max_tokens=15, top_p=1.0)\n", "print(llm(\"What's the weather like in Kansas City in December?\"))" ] }, @@ -162,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 6, "id": "fd2c6bc1", "metadata": {}, "outputs": [ @@ -171,34 +192,25 @@ "output_type": "stream", "text": [ "\n", - "(Note: I'm just an AI and not a branding expert, so take this as a starting point for your own research and brainstorming.)\n", - "A good name for a company that makes football helmets could be:\n", + "Naming a company can be a fun and creative process! Here are a few name ideas for a company that makes football helmets:\n", "\n", - "1. Helix Pro: This name plays off the idea of a helix, or spiral, shape that is commonly associated with football helmets. \"Pro\" implies a professional-level product.\n", - "2. Gridiron Gear: \"Gridiron\" is a term used to describe a football field, and \"gear\" highlights the company's focus on producing high-quality football helmets.\n", - "3. Linebacker Lab: \"Linebacker\" is a position on the football field, and \"Lab\" suggests a focus on research and development.\n", - "4. Helmet Hut: This name is simple and easy to remember, and it immediately conveys the company's focus on football helmets.\n", - "5. Tackle Tech: \"Tackle\" is a term used in football to describe a hit or collision, and \"Tech\" implies a focus on advanced technology and innovation.\n", - "6. Victory Vest: \"Victory\" implies a focus on winning and success, and \"Vest\" could suggest a protective or armored design.\n", - "7. Pigskin Pro: \"Pigskin\" is a term used to describe a football, and \"Pro\" implies a professional-level product.\n", - "8. Football Fusion: This name could suggest a combination of different materials or technologies to create a high-quality football helmet.\n", - "9. Endzone Edge: \"Endzone\" is the area of the football field where a team scores a touchdown, and \"Edge\" implies a competitive advantage.\n", - "10. MVP Masks: \"MVP\" stands for \"Most Valuable Player,\" and \"Masks\" highlights the protective nature of the company's football helmets.\n", + "1. Helix Headgear: This name plays off the idea of the helix shape of a football helmet and could be a memorable and catchy name for a company.\n", + "2. Gridiron Gear: \"Gridiron\" is a term used to describe a football field, and \"gear\" refers to the products the company sells. This name is straightforward and easy to understand.\n", + "3. Cushion Crusaders: This name emphasizes the protective qualities of football helmets and could appeal to customers looking for safety-conscious products.\n", + "4. Helmet Heroes: This name has a fun, heroic tone and could appeal to customers looking for high-quality products.\n", + "5. Tackle Tech: \"Tackle\" is a term used in football to describe a player's attempt to stop an opponent, and \"tech\" refers to the technology used in the helmets. This name could appeal to customers interested in innovative products.\n", + "6. Padded Protection: This name emphasizes the protective qualities of football helmets and could appeal to customers looking for products that prioritize safety.\n", + "7. Gridiron Gear Co.: This name is simple and straightforward, and it clearly conveys the company's focus on football-related products.\n", + "8. Helmet Haven: This name has a soothing, protective tone and could appeal to customers looking for a reliable brand.\n", "\n", - "Remember, the name you choose for your company should be memorable, easy to pronounce and spell, and convey a sense of quality and professionalism. It's also important to check that the name isn't already in use by another company, and to consider any potential trademark issues.\n" + "Remember to choose a name that reflects your company's values and mission, and that resonates with your target market. Good luck with your company!\n" ] } ], "source": [ - "human_message_prompt = HumanMessagePromptTemplate(\n", - " prompt=PromptTemplate(\n", - " template=\"What is a good name for a company that makes {product}?\",\n", - " input_variables=[\"product\"],\n", - " )\n", - ")\n", - "\n", + "human_message_prompt = HumanMessagePromptTemplate.from_template(\"What is a good name for a company that makes {product}?\")\n", "chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt])\n", - "chat = Fireworks()\n", + "chat = FireworksChat()\n", "chain = LLMChain(llm=chat, prompt=chat_prompt_template)\n", "output = chain.run(\"football helmets\")\n", "\n", @@ -222,7 +234,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.11.4" } }, "nbformat": 4, diff --git a/docs/extras/integrations/providers/fireworks.md b/docs/extras/integrations/providers/fireworks.md index 42c8436c8..aeb4d75b4 100644 --- a/docs/extras/integrations/providers/fireworks.md +++ b/docs/extras/integrations/providers/fireworks.md @@ -4,14 +4,15 @@ This page covers how to use the Fireworks models within Langchain. ## Installation and Setup -- To use the Fireworks model, you need to have a Fireworks API key. To generate one, sign up at platform.fireworks.ai +- To use the Fireworks model, you need to have a Fireworks API key. To generate one, sign up at [app.fireworks.ai](https://app.fireworks.ai). - Authenticate by setting the FIREWORKS_API_KEY environment variable. ## LLM Fireworks integrates with Langchain through the LLM module, which allows for standardized usage of any models deployed on the Fireworks models. -In this example, we'll work the llama-v2-13b. +In this example, we'll work the llama-v2-13b-chat model. + ```python from langchain.llms.fireworks import Fireworks diff --git a/libs/langchain/langchain/llms/fireworks.py b/libs/langchain/langchain/llms/fireworks.py index 90a9c7d4c..941cfb62c 100644 --- a/libs/langchain/langchain/llms/fireworks.py +++ b/libs/langchain/langchain/llms/fireworks.py @@ -28,9 +28,7 @@ logger = logging.getLogger(__name__) class BaseFireworks(BaseLLM): """Wrapper around Fireworks large language models.""" - model_id: str = Field( - "accounts/fireworks/models/fireworks-llama-v2-7b-chat", alias="model" - ) + model_id: str = Field("accounts/fireworks/models/llama-v2-7b-chat", alias="model") """Model name to use.""" temperature: float = 0.7 """What sampling temperature to use.""" @@ -174,10 +172,10 @@ class FireworksChat(BaseLLM): Example: .. code-block:: python from langchain.llms import FireworksChat - fireworkschat = FireworksChat(model_id=""fireworks-llama-v2-13b-chat"") + fireworkschat = FireworksChat(model_id=""llama-v2-13b-chat"") """ - model_id: str = "accounts/fireworks/models/fireworks-llama-v2-7b-chat" + model_id: str = "accounts/fireworks/models/llama-v2-7b-chat" """Model name to use.""" temperature: float = 0.7 """What sampling temperature to use.""" @@ -269,7 +267,7 @@ class Fireworks(BaseFireworks): Example: .. code-block:: python from langchain.llms import fireworks - llm = Fireworks(model_id="fireworks-llama-v2-13b") + llm = Fireworks(model_id="llama-v2-13b") """ From 2184e3a4005f5c48126523cce92930fca6a31760 Mon Sep 17 00:00:00 2001 From: Sam Groenjes Date: Fri, 11 Aug 2023 00:50:39 -0500 Subject: [PATCH 045/175] Fix IndexError when input_list is Empty in prep_prompts (#5769) This MR corrects the IndexError arising in prep_prompts method when no documents are returned from a similarity search. Fixes #1733 Co-authored-by: Sam Groenjes Co-authored-by: Bagatur --- libs/langchain/langchain/chains/llm.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libs/langchain/langchain/chains/llm.py b/libs/langchain/langchain/chains/llm.py index b1bbfae78..18029309b 100644 --- a/libs/langchain/langchain/chains/llm.py +++ b/libs/langchain/langchain/chains/llm.py @@ -127,6 +127,8 @@ class LLMChain(Chain): ) -> Tuple[List[PromptValue], Optional[List[str]]]: """Prepare prompts from inputs.""" stop = None + if len(input_list) == 0: + return [], stop if "stop" in input_list[0]: stop = input_list[0]["stop"] prompts = [] @@ -151,6 +153,8 @@ class LLMChain(Chain): ) -> Tuple[List[PromptValue], Optional[List[str]]]: """Prepare prompts from inputs.""" stop = None + if len(input_list) == 0: + return [], stop if "stop" in input_list[0]: stop = input_list[0]["stop"] prompts = [] From 3ab4e2157968df572dc62b3ffa6d8a62b283afa9 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 10 Aug 2023 23:39:25 -0700 Subject: [PATCH 046/175] fix json tool (#9096) --- libs/langchain/langchain/tools/json/tool.py | 2 +- libs/langchain/tests/unit_tests/tools/test_json.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/libs/langchain/langchain/tools/json/tool.py b/libs/langchain/langchain/tools/json/tool.py index 6f6473d51..6c75de20c 100644 --- a/libs/langchain/langchain/tools/json/tool.py +++ b/libs/langchain/langchain/tools/json/tool.py @@ -20,7 +20,7 @@ def _parse_input(text: str) -> List[Union[str, int]]: """Parse input of the form data["key1"][0]["key2"] into a list of keys.""" _res = re.findall(r"\[.*?]", text) # strip the brackets and quotes, convert to int if possible - res = [i[1:-1].replace('"', "") for i in _res] + res = [i[1:-1].replace('"', "").replace("'", "") for i in _res] res = [int(i) if i.isdigit() else i for i in res] return res diff --git a/libs/langchain/tests/unit_tests/tools/test_json.py b/libs/langchain/tests/unit_tests/tools/test_json.py index 36a96595e..b677b1577 100644 --- a/libs/langchain/tests/unit_tests/tools/test_json.py +++ b/libs/langchain/tests/unit_tests/tools/test_json.py @@ -30,6 +30,10 @@ def test_json_spec_value() -> None: assert spec.value('data["baz"]') == "{'test': {'foo': [1, 2, 3]}}" assert spec.value('data["baz"]["test"]') == "{'foo': [1, 2, 3]}" assert spec.value('data["baz"]["test"]["foo"]') == "[1, 2, 3]" + assert spec.value("data['foo']") == "bar" + assert spec.value("data['baz']") == "{'test': {'foo': [1, 2, 3]}}" + assert spec.value("data['baz']['test']") == "{'foo': [1, 2, 3]}" + assert spec.value("data['baz']['test']['foo']") == "[1, 2, 3]" def test_json_spec_value_max_length() -> None: From 991b448dfce7fa326e70774b5f38c9576f1f304c Mon Sep 17 00:00:00 2001 From: Ashutosh Sanzgiri Date: Thu, 10 Aug 2023 23:40:36 -0700 Subject: [PATCH 047/175] minor edits (#9093) Description: Minor edit to PR#845 Thanks! --- docs/extras/integrations/tools/dalle_image_generator.ipynb | 2 +- libs/langchain/langchain/utilities/dalle_image_generator.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/extras/integrations/tools/dalle_image_generator.ipynb b/docs/extras/integrations/tools/dalle_image_generator.ipynb index 83f424b15..d62d23d55 100644 --- a/docs/extras/integrations/tools/dalle_image_generator.ipynb +++ b/docs/extras/integrations/tools/dalle_image_generator.ipynb @@ -82,7 +82,7 @@ "metadata": {}, "outputs": [], "source": [ - "# You can click on the link above to display the image for\n", + "# You can click on the link above to display the image \n", "# Or you can try the options below to display the image inline in this notebook\n", "\n", "try:\n", diff --git a/libs/langchain/langchain/utilities/dalle_image_generator.py b/libs/langchain/langchain/utilities/dalle_image_generator.py index 9f4d8c19c..8042f4cf6 100644 --- a/libs/langchain/langchain/utilities/dalle_image_generator.py +++ b/libs/langchain/langchain/utilities/dalle_image_generator.py @@ -1,4 +1,4 @@ -"""Util that calls OpenAI's Dall-E Image Generator.""" +"""Utility that calls OpenAI's Dall-E Image Generator.""" from typing import Any, Dict, Optional from pydantic import BaseModel, Extra, root_validator From 7f0e847c130b9b20be92947dbc1bf318384d2193 Mon Sep 17 00:00:00 2001 From: Kim Minjong Date: Fri, 11 Aug 2023 16:22:13 +0900 Subject: [PATCH 048/175] Update pydantic format instruction prompt (#9095) - remove unopened bracket --- libs/langchain/langchain/output_parsers/format_instructions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/langchain/langchain/output_parsers/format_instructions.py b/libs/langchain/langchain/output_parsers/format_instructions.py index 23c832817..11b782a1b 100644 --- a/libs/langchain/langchain/output_parsers/format_instructions.py +++ b/libs/langchain/langchain/output_parsers/format_instructions.py @@ -18,7 +18,7 @@ STRUCTURED_FORMAT_SIMPLE_INSTRUCTIONS = """ PYDANTIC_FORMAT_INSTRUCTIONS = """The output should be formatted as a JSON instance that conforms to the JSON schema below. -As an example, for the schema {{"properties": {{"foo": {{"title": "Foo", "description": "a list of strings", "type": "array", "items": {{"type": "string"}}}}}}, "required": ["foo"]}}}} +As an example, for the schema {{"properties": {{"foo": {{"title": "Foo", "description": "a list of strings", "type": "array", "items": {{"type": "string"}}}}}}, "required": ["foo"]}} the object {{"foo": ["bar", "baz"]}} is a well-formatted instance of the schema. The object {{"properties": {{"foo": ["bar", "baz"]}}}} is not well-formatted. Here is the output schema: From a429145420b2428bc9dda767179ca5fddf3e374b Mon Sep 17 00:00:00 2001 From: Aayush Shah <83115948+AayushSameerShah@users.noreply.github.com> Date: Fri, 11 Aug 2023 13:31:40 +0530 Subject: [PATCH 049/175] Minor grammatical error (#9102) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Have corrected a grammatical error in: https://python.langchain.com/docs/modules/model_io/models/llms/ document 😄 --- docs/snippets/modules/model_io/models/llms/get_started.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/snippets/modules/model_io/models/llms/get_started.mdx b/docs/snippets/modules/model_io/models/llms/get_started.mdx index 1ef6c0606..5553a7faa 100644 --- a/docs/snippets/modules/model_io/models/llms/get_started.mdx +++ b/docs/snippets/modules/model_io/models/llms/get_started.mdx @@ -43,7 +43,7 @@ llm("Tell me a joke") ### `generate`: batch calls, richer outputs -`generate` lets you can call the model with a list of strings, getting back a more complete response than just the text. This complete response can includes things like multiple top responses and other LLM provider-specific information: +`generate` lets you can call the model with a list of strings, getting back a more complete response than just the text. This complete response can include things like multiple top responses and other LLM provider-specific information: ```python llm_result = llm.generate(["Tell me a joke", "Tell me a poem"]*15) From 3b754b54618beafcc3bf42827c291ed553361ce9 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Fri, 11 Aug 2023 01:10:00 -0700 Subject: [PATCH 050/175] Bagatur/filter metadata (#9015) Co-authored-by: Matt Robinson --- .../langchain/vectorstores/chroma.py | 22 ++++-- .../langchain/langchain/vectorstores/utils.py | 23 +++++- .../unit_tests/vectorstores/test_utils.py | 73 ++++++++++++++++++- 3 files changed, 110 insertions(+), 8 deletions(-) diff --git a/libs/langchain/langchain/vectorstores/chroma.py b/libs/langchain/langchain/vectorstores/chroma.py index 59edb2683..9457419c5 100644 --- a/libs/langchain/langchain/vectorstores/chroma.py +++ b/libs/langchain/langchain/vectorstores/chroma.py @@ -205,12 +205,22 @@ class Chroma(VectorStore): [embeddings[idx] for idx in non_empty_ids] if embeddings else None ) ids_with_metadata = [ids[idx] for idx in non_empty_ids] - self._collection.upsert( - metadatas=metadatas, - embeddings=embeddings_with_metadatas, - documents=texts_with_metadatas, - ids=ids_with_metadata, - ) + try: + self._collection.upsert( + metadatas=metadatas, + embeddings=embeddings_with_metadatas, + documents=texts_with_metadatas, + ids=ids_with_metadata, + ) + except ValueError as e: + if "Expected metadata value to be" in str(e): + msg = ( + "Try filtering complex metadata from the document using " + "langchain.vectorstore.utils.filter_complex_metadata." + ) + raise ValueError(e.args[0] + "\n\n" + msg) + else: + raise e if empty_ids: texts_without_metadatas = [texts[j] for j in empty_ids] embeddings_without_metadatas = ( diff --git a/libs/langchain/langchain/vectorstores/utils.py b/libs/langchain/langchain/vectorstores/utils.py index 539a1feda..64ecf1377 100644 --- a/libs/langchain/langchain/vectorstores/utils.py +++ b/libs/langchain/langchain/vectorstores/utils.py @@ -1,10 +1,11 @@ """Utility functions for working with vectors and vectorstores.""" from enum import Enum -from typing import List +from typing import List, Tuple, Type import numpy as np +from langchain.docstore.document import Document from langchain.utils.math import cosine_similarity @@ -51,3 +52,23 @@ def maximal_marginal_relevance( idxs.append(idx_to_add) selected = np.append(selected, [embedding_list[idx_to_add]], axis=0) return idxs + + +def filter_complex_metadata( + documents: List[Document], + *, + allowed_types: Tuple[Type, ...] = (str, bool, int, float) +) -> List[Document]: + """Filter out metadata types that are not supported for a vector store.""" + updated_documents = [] + for document in documents: + filtered_metadata = {} + for key, value in document.metadata.items(): + if not isinstance(value, allowed_types): + continue + filtered_metadata[key] = value + + document.metadata = filtered_metadata + updated_documents.append(document) + + return updated_documents diff --git a/libs/langchain/tests/unit_tests/vectorstores/test_utils.py b/libs/langchain/tests/unit_tests/vectorstores/test_utils.py index 6ad76e424..907ed2cde 100644 --- a/libs/langchain/tests/unit_tests/vectorstores/test_utils.py +++ b/libs/langchain/tests/unit_tests/vectorstores/test_utils.py @@ -1,7 +1,11 @@ """Test vector store utility functions.""" import numpy as np -from langchain.vectorstores.utils import maximal_marginal_relevance +from langchain.docstore.document import Document +from langchain.vectorstores.utils import ( + filter_complex_metadata, + maximal_marginal_relevance, +) def test_maximal_marginal_relevance_lambda_zero() -> None: @@ -52,3 +56,70 @@ def test_maximal_marginal_relevance_query_dim() -> None: first = maximal_marginal_relevance(query_embedding, embedding_list) second = maximal_marginal_relevance(query_embedding_2d, embedding_list) assert first == second + + +def test_filter_list_metadata() -> None: + documents = [ + Document( + page_content="", + metadata={ + "key1": "this is a string!", + "key2": ["a", "list", "of", "strings"], + }, + ), + Document( + page_content="", + metadata={ + "key1": "this is another string!", + "key2": {"foo"}, + }, + ), + Document( + page_content="", + metadata={ + "key1": "this is another string!", + "key2": {"foo": "bar"}, + }, + ), + Document( + page_content="", + metadata={ + "key1": "this is another string!", + "key2": True, + }, + ), + Document( + page_content="", + metadata={ + "key1": "this is another string!", + "key2": 1, + }, + ), + Document( + page_content="", + metadata={ + "key1": "this is another string!", + "key2": 1.0, + }, + ), + Document( + page_content="", + metadata={ + "key1": "this is another string!", + "key2": "foo", + }, + ), + ] + + updated_documents = filter_complex_metadata(documents) + filtered_metadata = [doc.metadata for doc in updated_documents] + + assert filtered_metadata == [ + {"key1": "this is a string!"}, + {"key1": "this is another string!"}, + {"key1": "this is another string!"}, + {"key1": "this is another string!", "key2": True}, + {"key1": "this is another string!", "key2": 1}, + {"key1": "this is another string!", "key2": 1.0}, + {"key1": "this is another string!", "key2": "foo"}, + ] From 01ef786e7e434073ea0db6af0bc4462a81dcc993 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Fri, 11 Aug 2023 01:29:07 -0700 Subject: [PATCH 051/175] bump 262 (#9108) --- libs/langchain/pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index e098d7ec3..94e2a8179 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langchain" -version = "0.0.261" +version = "0.0.262" description = "Building applications with LLMs through composability" authors = [] license = "MIT" @@ -411,4 +411,4 @@ ignore-regex = '.*(Stati Uniti|Tense=Pres).*' # whats is a typo but used frequently in queries so kept as is # aapply - async apply # unsecure - typo but part of API, decided to not bother for now -ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon' \ No newline at end of file +ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon' From 9249d305af98a8d585d248878229070999614694 Mon Sep 17 00:00:00 2001 From: Francisco Ingham <24279597+fpingham@users.noreply.github.com> Date: Fri, 11 Aug 2023 12:06:07 -0300 Subject: [PATCH 052/175] tagging docs refactor (#8722) refactor of tagging use case according to new format --------- Co-authored-by: Lance Martin --- docs/docs_skeleton/static/img/tagging.png | Bin 0 -> 113872 bytes .../static/img/tagging_trace.png | Bin 0 -> 132811 bytes docs/extras/use_cases/tagging.ipynb | 174 +++++++++--------- 3 files changed, 91 insertions(+), 83 deletions(-) create mode 100644 docs/docs_skeleton/static/img/tagging.png create mode 100644 docs/docs_skeleton/static/img/tagging_trace.png diff --git a/docs/docs_skeleton/static/img/tagging.png b/docs/docs_skeleton/static/img/tagging.png new file mode 100644 index 0000000000000000000000000000000000000000..cd4443be2b045607ebb5111c70210a2358ba2713 GIT binary patch literal 113872 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

LBeTUx{1rg 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�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

28HFEOoXrM7hL5sHbBl@8X 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

yy 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

rNHFBisS(;!c4L$h3a#8g<-k5p5=m-XvHNhg7W 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 E11eZxFaQ7m literal 0 HcmV?d00001 diff --git a/docs/extras/use_cases/tagging.ipynb b/docs/extras/use_cases/tagging.ipynb index b51e3f6d5..d8c3b1663 100644 --- a/docs/extras/use_cases/tagging.ipynb +++ b/docs/extras/use_cases/tagging.ipynb @@ -2,97 +2,90 @@ "cells": [ { "cell_type": "markdown", - "id": "a13ea924", + "id": "a0507a4b", "metadata": {}, "source": [ "# Tagging\n", "\n", - "The tagging chain uses the OpenAI `functions` parameter to specify a schema to tag a document with. This helps us make sure that the model outputs exactly tags that we want, with their appropriate types.\n", + "[![Open In Collab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/langchain-ai/langchain/blob/master/docs/extras/use_cases/tagging.ipynb)\n", "\n", - "The tagging chain is to be used when we want to tag a passage with a specific attribute (i.e. what is the sentiment of this message?)" + "## Use case\n", + "\n", + "Tagging means labeling a document with classes such as:\n", + "\n", + "- sentiment\n", + "- language\n", + "- style (formal, informal etc.)\n", + "- covered topics\n", + "- political tendency\n", + "\n", + "![Image description](/img/tagging.png)\n", + "\n", + "## Overview\n", + "\n", + "Tagging has a few components:\n", + "\n", + "* `function`: Like [extraction](/docs/use_cases/extraction), tagging uses [functions](https://openai.com/blog/function-calling-and-other-api-updates) to specify how the model should tag a document\n", + "* `schema`: defines how we want to tag the document\n", + "\n", + "## Quickstart\n", + "\n", + "Let's see a very straightforward example of how we can use OpenAI functions for tagging in LangChain." ] }, { "cell_type": "code", - "execution_count": 1, - "id": "bafb496a", + "execution_count": null, + "id": "dc5cbb6f", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/harrisonchase/.pyenv/versions/3.9.1/envs/langchain/lib/python3.9/site-packages/deeplake/util/check_latest_version.py:32: UserWarning: A newer version of deeplake (3.6.4) is available. It's recommended that you update to the latest version using `pip install -U deeplake`.\n", - " warnings.warn(\n" - ] - } - ], + "outputs": [], "source": [ - "from langchain.chat_models import ChatOpenAI\n", - "from langchain.chains import create_tagging_chain, create_tagging_chain_pydantic\n", - "from langchain.prompts import ChatPromptTemplate" + "!pip install langchain openai \n", + "\n", + "# Set env var OPENAI_API_KEY or load from a .env file:\n", + "# import dotenv\n", + "# dotenv.load_env()" ] }, { "cell_type": "code", "execution_count": 2, - "id": "39f3ce3e", + "id": "bafb496a", "metadata": {}, "outputs": [], "source": [ - "llm = ChatOpenAI(temperature=0, model=\"gpt-3.5-turbo-0613\")" + "from langchain.chat_models import ChatOpenAI\n", + "from langchain.prompts import ChatPromptTemplate\n", + "from langchain.chains import create_tagging_chain, create_tagging_chain_pydantic" ] }, { "cell_type": "markdown", - "id": "832ddcd9", + "id": "b8ca3f93", "metadata": {}, "source": [ - "## Simplest approach, only specifying type" - ] - }, - { - "cell_type": "markdown", - "id": "4fc8d766", - "metadata": {}, - "source": [ - "We can start by specifying a few properties with their expected type in our schema" + "We specify a few properties with their expected type in our schema." ] }, { "cell_type": "code", - "execution_count": 3, - "id": "8329f943", + "execution_count": 4, + "id": "39f3ce3e", "metadata": {}, "outputs": [], "source": [ + "# Schema\n", "schema = {\n", " \"properties\": {\n", " \"sentiment\": {\"type\": \"string\"},\n", " \"aggressiveness\": {\"type\": \"integer\"},\n", " \"language\": {\"type\": \"string\"},\n", " }\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "6146ae70", - "metadata": {}, - "outputs": [], - "source": [ - "chain = create_tagging_chain(schema, llm)" - ] - }, - { - "cell_type": "markdown", - "id": "9e306ca3", - "metadata": {}, - "source": [ - "As we can see in the examples, it correctly interprets what we want but the results vary so that we get, for example, sentiments in different languages ('positive', 'enojado' etc.).\n", + "}\n", "\n", - "We will see how to control these results in the next section." + "# LLM\n", + "llm = ChatOpenAI(temperature=0, model=\"gpt-3.5-turbo-0613\")\n", + "chain = create_tagging_chain(schema, llm)" ] }, { @@ -126,7 +119,7 @@ { "data": { "text/plain": [ - "{'sentiment': 'enojado', 'aggressiveness': 1, 'language': 'Spanish'}" + "{'sentiment': 'enojado', 'aggressiveness': 1, 'language': 'es'}" ] }, "execution_count": 6, @@ -140,25 +133,15 @@ ] }, { - "cell_type": "code", - "execution_count": 7, - "id": "aae85b27", + "cell_type": "markdown", + "id": "d921bb53", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'sentiment': 'positive', 'aggressiveness': 0, 'language': 'English'}" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "inp = \"Weather is ok here, I can go outside without much more than a coat\"\n", - "chain.run(inp)" + "As we can see in the examples, it correctly interprets what we want.\n", + "\n", + "The results vary so that we get, for example, sentiments in different languages ('positive', 'enojado' etc.).\n", + "\n", + "We will see how to control these results in the next section." ] }, { @@ -166,9 +149,11 @@ "id": "bebb2f83", "metadata": {}, "source": [ - "## More control\n", + "## Finer control\n", "\n", - "By being smart about how we define our schema we can have more control over the model's output. Specifically we can define:\n", + "Careful schema definition gives us more control over the model's output. \n", + "\n", + "Specifically, we can define:\n", "\n", "- possible values for each property\n", "- description to make sure that the model understands the property\n", @@ -180,7 +165,7 @@ "id": "69ef0b9a", "metadata": {}, "source": [ - "Following is an example of how we can use _enum_, _description_ and _required_ to control for each of the previously mentioned aspects:" + "Here is an example of how we can use `_enum_`, `_description_`, and `_required_` to control for each of the previously mentioned aspects:" ] }, { @@ -192,7 +177,6 @@ "source": [ "schema = {\n", " \"properties\": {\n", - " \"sentiment\": {\"type\": \"string\", \"enum\": [\"happy\", \"neutral\", \"sad\"]},\n", " \"aggressiveness\": {\n", " \"type\": \"integer\",\n", " \"enum\": [1, 2, 3, 4, 5],\n", @@ -234,7 +218,7 @@ { "data": { "text/plain": [ - "{'sentiment': 'happy', 'aggressiveness': 0, 'language': 'spanish'}" + "{'aggressiveness': 0, 'language': 'spanish'}" ] }, "execution_count": 10, @@ -256,7 +240,7 @@ { "data": { "text/plain": [ - "{'sentiment': 'sad', 'aggressiveness': 10, 'language': 'spanish'}" + "{'aggressiveness': 5, 'language': 'spanish'}" ] }, "execution_count": 11, @@ -278,7 +262,7 @@ { "data": { "text/plain": [ - "{'sentiment': 'neutral', 'aggressiveness': 0, 'language': 'english'}" + "{'aggressiveness': 0, 'language': 'english'}" ] }, "execution_count": 12, @@ -291,12 +275,25 @@ "chain.run(inp)" ] }, + { + "cell_type": "markdown", + "id": "cf6b7389", + "metadata": {}, + "source": [ + "The [LangSmith trace](https://smith.langchain.com/public/311e663a-bbe8-4053-843e-5735055c032d/r) lets us peek under the hood:\n", + "\n", + "* As with [extraction](/docs/use_cases/extraction), we call the `information_extraction` function [here](https://github.com/langchain-ai/langchain/blob/269f85b7b7ffd74b38cd422d4164fc033388c3d0/libs/langchain/langchain/chains/openai_functions/extraction.py#L20) on the input string.\n", + "* This OpenAI funtion extraction information based upon the provided schema.\n", + "\n", + "![Image description](/img/tagging_trace.png)" + ] + }, { "cell_type": "markdown", "id": "e68ad17e", "metadata": {}, "source": [ - "## Specifying schema with Pydantic" + "## Pydantic" ] }, { @@ -304,11 +301,11 @@ "id": "2f5970ec", "metadata": {}, "source": [ - "We can also use a Pydantic schema to specify the required properties and types. We can also send other arguments, such as 'enum' or 'description' as can be seen in the example below.\n", + "We can also use a Pydantic schema to specify the required properties and types. \n", "\n", - "By using the `create_tagging_chain_pydantic` function, we can send a Pydantic schema as input and the output will be an instantiated object that respects our desired schema. \n", + "We can also send other arguments, such as `enum` or `description`, to each field.\n", "\n", - "In this way, we can specify our schema in the same manner that we would a new class or function in Python - with purely Pythonic types." + "This lets us specify our schema in the same manner that we would a new class or function in Python with purely Pythonic types." ] }, { @@ -371,7 +368,7 @@ { "data": { "text/plain": [ - "Tags(sentiment='sad', aggressiveness=10, language='spanish')" + "Tags(sentiment='sad', aggressiveness=5, language='spanish')" ] }, "execution_count": 17, @@ -382,6 +379,17 @@ "source": [ "res" ] + }, + { + "cell_type": "markdown", + "id": "29346d09", + "metadata": {}, + "source": [ + "### Going deeper\n", + "\n", + "* You can use the [metadata tagger](https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger) document transformer to extract metadata from a LangChain `Document`. \n", + "* This covers the same basic functionality as the tagging chain, only applied to a LangChain `Document`." + ] } ], "metadata": { @@ -400,7 +408,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.9.16" } }, "nbformat": 4, From 0e5d09d0dae44cc3f0cffb53e865a0cf42211764 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Fri, 11 Aug 2023 08:21:48 -0700 Subject: [PATCH 053/175] dalle nb fix (#9125) --- .../tools/dalle_image_generator.ipynb | 369 +++++++++--------- 1 file changed, 191 insertions(+), 178 deletions(-) diff --git a/docs/extras/integrations/tools/dalle_image_generator.ipynb b/docs/extras/integrations/tools/dalle_image_generator.ipynb index d62d23d55..ba01e52df 100644 --- a/docs/extras/integrations/tools/dalle_image_generator.ipynb +++ b/docs/extras/integrations/tools/dalle_image_generator.ipynb @@ -1,181 +1,194 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Dall-E Image Generator\n", - "\n", - "This notebook shows how you can generate images from a prompt synthesized using an OpenAI LLM. The images are generated using Dall-E, which uses the same OpenAI API key as the LLM." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Needed if you would like to display images in the notebook\n", - "!pip install opencv-python scikit-image" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "id": "q-k8wmp0zquh" - }, - "outputs": [], - "source": [ - "from langchain.llms import OpenAI\n", - "import os\n", - "os.environ[\"OPENAI_API_KEY\"] = \"\"" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run as a chain" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.utilities.dalle_image_generator import DallEAPIWrapper\n", - "from langchain.prompts import PromptTemplate\n", - "from langchain.chains import LLMChain\n", - "\n", - "llm = OpenAI(temperature=0.9)\n", - "prompt = PromptTemplate(\n", - " input_variables=[\"image_desc\"],\n", - " template=\"Generate a detailed prompt to generate an image based on the following description: {image_desc}\",\n", - ")\n", - "chain = LLMChain(llm=llm, prompt=prompt)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "https://oaidalleapiprodscus.blob.core.windows.net/private/org-rocrupyvzgcl4yf25rqq6d1v/user-WsxrbKyP2c8rfhCKWDyMfe8N/img-mg1OWiziXxQN1aR2XRsLNndg.png?st=2023-01-31T07%3A34%3A15Z&se=2023-01-31T09%3A34%3A15Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-01-30T22%3A19%3A44Z&ske=2023-01-31T22%3A19%3A44Z&sks=b&skv=2021-08-06&sig=XDPee5aEng%2BcbXq2mqhh39uHGZTBmJgGAerSd0g%2BMEs%3D\n" - ] - } - ], - "source": [ - "image_url = DallEAPIWrapper().run(chain.run(\"halloween night at a haunted museum\"))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# You can click on the link above to display the image \n", - "# Or you can try the options below to display the image inline in this notebook\n", - "\n", - "try:\n", - " import google.colab\n", - " IN_COLAB = True\n", - "except:\n", - " IN_COLAB = False\n", - "\n", - "if IN_COLAB:\n", - " from google.colab.patches import cv2_imshow # for image display\n", - " from skimage import io\n", - "\n", - " image = io.imread(image_url) \n", - " cv2_imshow(image)\n", - "else:\n", - " import cv2\n", - " from skimage import io\n", - "\n", - " image = io.imread(image_url) \n", - " cv2.imshow('image', image)\n", - " cv2.waitKey(0) #wait for a keyboard input\n", - " cv2.destroyAllWindows()\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run as a tool with an agent" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3m What is the best way to turn this description into an image?\n", - "Action: Dall-E Image Generator\n", - "Action Input: A spooky Halloween night at a haunted museum\u001b[0mhttps://oaidalleapiprodscus.blob.core.windows.net/private/org-rocrupyvzgcl4yf25rqq6d1v/user-WsxrbKyP2c8rfhCKWDyMfe8N/img-ogKfqxxOS5KWVSj4gYySR6FY.png?st=2023-01-31T07%3A38%3A25Z&se=2023-01-31T09%3A38%3A25Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-01-30T22%3A19%3A36Z&ske=2023-01-31T22%3A19%3A36Z&sks=b&skv=2021-08-06&sig=XsomxxBfu2CP78SzR9lrWUlbask4wBNnaMsHamy4VvU%3D\n", - "\n", - "Observation: \u001b[36;1m\u001b[1;3mhttps://oaidalleapiprodscus.blob.core.windows.net/private/org-rocrupyvzgcl4yf25rqq6d1v/user-WsxrbKyP2c8rfhCKWDyMfe8N/img-ogKfqxxOS5KWVSj4gYySR6FY.png?st=2023-01-31T07%3A38%3A25Z&se=2023-01-31T09%3A38%3A25Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-01-30T22%3A19%3A36Z&ske=2023-01-31T22%3A19%3A36Z&sks=b&skv=2021-08-06&sig=XsomxxBfu2CP78SzR9lrWUlbask4wBNnaMsHamy4VvU%3D\u001b[0m\n", - "Thought:\u001b[32;1m\u001b[1;3m With the image generated, I can now make my final answer.\n", - "Final Answer: An image of a Halloween night at a haunted museum can be seen here: https://oaidalleapiprodscus.blob.core.windows.net/private/org-rocrupyvzgcl4yf25rqq6d1v/user-WsxrbKyP2c8rfhCKWDyMfe8N/img-ogKfqxxOS5KWVSj4gYySR6FY.png?st=2023-01-31T07%3A38%3A25Z&se=2023-01-31T09%3A38%3A25Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-01-30T22\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n" - ] - } - ], - "source": [ - "from langchain.agents import load_tools\n", - "from langchain.agents import initialize_agent\n", - "\n", - "tools = load_tools(['dalle-image-generator'])\n", - "agent = initialize_agent(tools, llm, agent=\"zero-shot-react-description\", verbose=True)\n", - "output = agent.run(\"Create an image of a halloween night at a haunted museum\")" - ] - } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "langchain", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.16" - }, - "vscode": { - "interpreter": { - "hash": "3570c8892273ffbeee7ead61dc7c022b73551d9f55fb2584ac0e8e8920b18a89" - } - } + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Dall-E Image Generator\n", + "\n", + "This notebook shows how you can generate images from a prompt synthesized using an OpenAI LLM. The images are generated using Dall-E, which uses the same OpenAI API key as the LLM." + ] }, - "nbformat": 4, - "nbformat_minor": 0 + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Needed if you would like to display images in the notebook\n", + "!pip install opencv-python scikit-image" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "id": "q-k8wmp0zquh" + }, + "outputs": [], + "source": [ + "from langchain.llms import OpenAI\n", + "import os\n", + "os.environ[\"OPENAI_API_KEY\"] = \"\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Run as a chain" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.utilities.dalle_image_generator import DallEAPIWrapper\n", + "from langchain.prompts import PromptTemplate\n", + "from langchain.chains import LLMChain\n", + "from langchain.llms import OpenAI\n", + "\n", + "llm = OpenAI(temperature=0.9)\n", + "prompt = PromptTemplate(\n", + " input_variables=[\"image_desc\"],\n", + " template=\"Generate a detailed prompt to generate an image based on the following description: {image_desc}\",\n", + ")\n", + "chain = LLMChain(llm=llm, prompt=prompt)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "image_url = DallEAPIWrapper().run(chain.run(\"halloween night at a haunted museum\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'https://oaidalleapiprodscus.blob.core.windows.net/private/org-i0zjYONU3PemzJ222esBaAzZ/user-f6uEIOFxoiUZivy567cDSWni/img-i7Z2ZxvJ4IbbdAiO6OXJgS3v.png?st=2023-08-11T14%3A03%3A14Z&se=2023-08-11T16%3A03%3A14Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-08-10T20%3A58%3A32Z&ske=2023-08-11T20%3A58%3A32Z&sks=b&skv=2021-08-06&sig=/sECe7C0EAq37ssgBm7g7JkVIM/Q1W3xOstd0Go6slA%3D'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "image_url" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You can click on the link above to display the image \n", + "# Or you can try the options below to display the image inline in this notebook\n", + "\n", + "try:\n", + " import google.colab\n", + " IN_COLAB = True\n", + "except:\n", + " IN_COLAB = False\n", + "\n", + "if IN_COLAB:\n", + " from google.colab.patches import cv2_imshow # for image display\n", + " from skimage import io\n", + "\n", + " image = io.imread(image_url) \n", + " cv2_imshow(image)\n", + "else:\n", + " import cv2\n", + " from skimage import io\n", + "\n", + " image = io.imread(image_url) \n", + " cv2.imshow('image', image)\n", + " cv2.waitKey(0) #wait for a keyboard input\n", + " cv2.destroyAllWindows()\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Run as a tool with an agent" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m What is the best way to turn this description into an image?\n", + "Action: Dall-E Image Generator\n", + "Action Input: A spooky Halloween night at a haunted museum\u001b[0mhttps://oaidalleapiprodscus.blob.core.windows.net/private/org-rocrupyvzgcl4yf25rqq6d1v/user-WsxrbKyP2c8rfhCKWDyMfe8N/img-ogKfqxxOS5KWVSj4gYySR6FY.png?st=2023-01-31T07%3A38%3A25Z&se=2023-01-31T09%3A38%3A25Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-01-30T22%3A19%3A36Z&ske=2023-01-31T22%3A19%3A36Z&sks=b&skv=2021-08-06&sig=XsomxxBfu2CP78SzR9lrWUlbask4wBNnaMsHamy4VvU%3D\n", + "\n", + "Observation: \u001b[36;1m\u001b[1;3mhttps://oaidalleapiprodscus.blob.core.windows.net/private/org-rocrupyvzgcl4yf25rqq6d1v/user-WsxrbKyP2c8rfhCKWDyMfe8N/img-ogKfqxxOS5KWVSj4gYySR6FY.png?st=2023-01-31T07%3A38%3A25Z&se=2023-01-31T09%3A38%3A25Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-01-30T22%3A19%3A36Z&ske=2023-01-31T22%3A19%3A36Z&sks=b&skv=2021-08-06&sig=XsomxxBfu2CP78SzR9lrWUlbask4wBNnaMsHamy4VvU%3D\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m With the image generated, I can now make my final answer.\n", + "Final Answer: An image of a Halloween night at a haunted museum can be seen here: https://oaidalleapiprodscus.blob.core.windows.net/private/org-rocrupyvzgcl4yf25rqq6d1v/user-WsxrbKyP2c8rfhCKWDyMfe8N/img-ogKfqxxOS5KWVSj4gYySR6FY.png?st=2023-01-31T07%3A38%3A25Z&se=2023-01-31T09%3A38%3A25Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-01-30T22\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + } + ], + "source": [ + "from langchain.agents import load_tools\n", + "from langchain.agents import initialize_agent\n", + "\n", + "tools = load_tools(['dalle-image-generator'])\n", + "agent = initialize_agent(tools, llm, agent=\"zero-shot-react-description\", verbose=True)\n", + "output = agent.run(\"Create an image of a halloween night at a haunted museum\")" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "poetry-venv", + "language": "python", + "name": "poetry-venv" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "3570c8892273ffbeee7ead61dc7c022b73551d9f55fb2584ac0e8e8920b18a89" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 } From f7ae183f40ae8fc4fd55f440e76b3e81a1f77fb1 Mon Sep 17 00:00:00 2001 From: Alvaro Bartolome Date: Fri, 11 Aug 2023 18:37:06 +0200 Subject: [PATCH 054/175] `ArgillaCallbackHandler` to properly use default values for `api_url` and `api_key` (#9113) As of the recent PR at #9043, after some testing we've realised that the default values were not being used for `api_key` and `api_url`. Besides that, the default for `api_key` was set to `argilla.apikey`, but since the default values are intended for people using the Argilla Quickstart (easy to run and setup), the defaults should be instead `owner.apikey` if using Argilla 1.11.0 or higher, or `admin.apikey` if using a lower version of Argilla. Additionally, we've removed the f-string replacements from the docstrings. --------- Co-authored-by: Gabriel Martin --- .../integrations/callbacks/argilla.ipynb | 2 +- .../langchain/callbacks/argilla_callback.py | 31 ++++++++++++------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/docs/extras/integrations/callbacks/argilla.ipynb b/docs/extras/integrations/callbacks/argilla.ipynb index 7a78b3198..ff4650715 100644 --- a/docs/extras/integrations/callbacks/argilla.ipynb +++ b/docs/extras/integrations/callbacks/argilla.ipynb @@ -147,7 +147,7 @@ " api_key=os.environ[\"ARGILLA_API_KEY\"],\n", ")\n", "\n", - "dataset.push_to_argilla(\"langchain-dataset\")" + "dataset.push_to_argilla(\"langchain-dataset\");" ] }, { diff --git a/libs/langchain/langchain/callbacks/argilla_callback.py b/libs/langchain/langchain/callbacks/argilla_callback.py index 7ed9af15b..9420fb46d 100644 --- a/libs/langchain/langchain/callbacks/argilla_callback.py +++ b/libs/langchain/langchain/callbacks/argilla_callback.py @@ -21,11 +21,10 @@ class ArgillaCallbackHandler(BaseCallbackHandler): default workspace will be used. api_url: URL of the Argilla Server that we want to use, and where the `FeedbackDataset` lives in. Defaults to `None`, which means that either - `ARGILLA_API_URL` environment variable or the default http://localhost:6900 - will be used. + `ARGILLA_API_URL` environment variable or the default will be used. api_key: API Key to connect to the Argilla Server. Defaults to `None`, which means that either `ARGILLA_API_KEY` environment variable or the default - `argilla.apikey` will be used. + will be used. Raises: ImportError: if the `argilla` package is not installed. @@ -58,7 +57,6 @@ class ArgillaCallbackHandler(BaseCallbackHandler): BLOG_URL = "https://docs.argilla.io/en/latest/guides/llms/practical_guides/use_argilla_callback_in_langchain.html" # noqa: E501 DEFAULT_API_URL = "http://localhost:6900" - DEFAULT_API_KEY = "argilla.apikey" def __init__( self, @@ -67,22 +65,22 @@ class ArgillaCallbackHandler(BaseCallbackHandler): api_url: Optional[str] = None, api_key: Optional[str] = None, ) -> None: - f"""Initializes the `ArgillaCallbackHandler`. + """Initializes the `ArgillaCallbackHandler`. Args: dataset_name: name of the `FeedbackDataset` in Argilla. Note that it must exist in advance. If you need help on how to create a `FeedbackDataset` - in Argilla, please visit {self.BLOG_URL}. + in Argilla, please visit + https://docs.argilla.io/en/latest/guides/llms/practical_guides/use_argilla_callback_in_langchain.html. workspace_name: name of the workspace in Argilla where the specified `FeedbackDataset` lives in. Defaults to `None`, which means that the default workspace will be used. api_url: URL of the Argilla Server that we want to use, and where the `FeedbackDataset` lives in. Defaults to `None`, which means that either - `ARGILLA_API_URL` environment variable or `{self.DEFAULT_API_URL}` will - be used. + `ARGILLA_API_URL` environment variable or the default will be used. api_key: API Key to connect to the Argilla Server. Defaults to `None`, which means that either `ARGILLA_API_KEY` environment variable or the default - `{self.DEFAULT_API_KEY}` will be used. + will be used. Raises: ImportError: if the `argilla` package is not installed. @@ -116,16 +114,27 @@ class ArgillaCallbackHandler(BaseCallbackHandler): warnings.warn( ( "Since `api_url` is None, and the env var `ARGILLA_API_URL` is not" - f" set, it will default to `{self.DEFAULT_API_URL}`." + f" set, it will default to `{self.DEFAULT_API_URL}`, which is the" + " default API URL in Argilla Quickstart." ), ) + api_url = self.DEFAULT_API_URL + if api_key is None and os.getenv("ARGILLA_API_KEY") is None: + self.DEFAULT_API_KEY = ( + "admin.apikey" + if parse(self.ARGILLA_VERSION) < parse("1.11.0") + else "owner.apikey" + ) + warnings.warn( ( "Since `api_key` is None, and the env var `ARGILLA_API_KEY` is not" - f" set, it will default to `{self.DEFAULT_API_KEY}`." + f" set, it will default to `{self.DEFAULT_API_KEY}`, which is the" + " default API key in Argilla Quickstart." ), ) + api_url = self.DEFAULT_API_URL # Connect to Argilla with the provided credentials, if applicable try: From 31cfc008451c36defeda1cd7d3879473b6968b59 Mon Sep 17 00:00:00 2001 From: Manuel Soria <66525873+manuel-soria@users.noreply.github.com> Date: Fri, 11 Aug 2023 14:16:05 -0300 Subject: [PATCH 055/175] Code understanding use case (#8801) Code understanding docs --------- Co-authored-by: Manuel Soria Co-authored-by: Lance Martin --- .../static/img/code_retrieval.png | Bin 0 -> 314300 bytes .../static/img/code_understanding.png | Bin 0 -> 197915 bytes .../extras/use_cases/code_understanding.ipynb | 354 ++++++++++++++++++ .../how_to}/code/code-analysis-deeplake.ipynb | 0 .../how_to}/code/index.mdx | 0 ...tter-the-algorithm-analysis-deeplake.ipynb | 0 6 files changed, 354 insertions(+) create mode 100644 docs/docs_skeleton/static/img/code_retrieval.png create mode 100644 docs/docs_skeleton/static/img/code_understanding.png create mode 100644 docs/extras/use_cases/code_understanding.ipynb rename docs/extras/use_cases/{ => question_answering/how_to}/code/code-analysis-deeplake.ipynb (100%) rename docs/extras/use_cases/{ => question_answering/how_to}/code/index.mdx (100%) rename docs/extras/use_cases/{ => question_answering/how_to}/code/twitter-the-algorithm-analysis-deeplake.ipynb (100%) diff --git a/docs/docs_skeleton/static/img/code_retrieval.png b/docs/docs_skeleton/static/img/code_retrieval.png new file mode 100644 index 0000000000000000000000000000000000000000..4a9b607600aae119b0a78c64ada17f55a4002941 GIT binary patch literal 314300 zcmeFYRY07}(k_e!5c9m}zpd5XRZmwv9ik{Nh4F&;1soh4hV(~qWjHvLb~rf11=MG-oJl6) z8#p+05eqRfMQJfH3PpgOsfD!(9Nfo{1Pv5Tm0tXG?bzsOYzklB_>oi!WyFuqe;`Ne zA(6a!jx7`JmuV))#1T$GDOi1B8jZO+(`a*_vz=4QMB?(O^TO@B4(odNlDyF za1O*BH6xM;)V(yVaRoOzZ+JwG3X$Ko5eKmAm^NoDx z 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⪚e*j2 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 a|&K2WiZm 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


0ojz2M zIwxXov`>C{bf7^rGvC0wz0CP<6>HPOb|NNAxJ?1!J2{vehPx3pd8Dx}?@PeSIv;d& zE4m-h@+eXRT(elmS?82+eRRX7U77ak>(kn{qwMl(9c2x#y@?+kl>)a_U-m0ZcpC57 zn*L`&pwQ*^wk$pw7kWFeNd!PP1%|!GnWQZaC9LhBy)>jKI4ZynqYBBhwzT!+G&3Lb z1e^P&^ z14t!#;l69gWlF1(83NYL`?VMRJ5QrwewY>Oe<|}H1>%(pXc^b7Su|(BZ1e9B1w?Qf zuq05Rs&W6V^4}k6{hBg>n5ATNdu+i6Ub)05FL78RYxuQ(>f7ISdY0z{4~`^g7B8Bg$DL5CDNg(A z6(1e+eRB(hjQyxw{$?%v0y_N86(l=h1bBF}!g!589LjGYx!vmrjDZGP>WDA{Q}d4= z+9aq9QyYcypa|V7!B8-uu32=hD|G8?~oSoeK3+C{M{@q{Qm&a=DRpHp#Yoz z14Iem0)|F`8B%t@vG>283;?qEhjtk&=Ko%)1cY~-@c(b_|CdL%=@zarc}Qg+dyx47 P@FyxLB~bKM+x!0kC+D>o literal 0 HcmV?d00001 diff --git a/docs/docs_skeleton/static/img/code_understanding.png b/docs/docs_skeleton/static/img/code_understanding.png new file mode 100644 index 0000000000000000000000000000000000000000..f9face6add316a1ef168a60c95861582aa9da4d2 GIT binary patch literal 197915 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

pi8GxPSi^9U33jD?NHpd3>K9D0Z2szc@wd?foN< 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 A@Bjb+ literal 0 HcmV?d00001 diff --git a/docs/extras/use_cases/code_understanding.ipynb b/docs/extras/use_cases/code_understanding.ipynb new file mode 100644 index 000000000..b48dc3381 --- /dev/null +++ b/docs/extras/use_cases/code_understanding.ipynb @@ -0,0 +1,354 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Code Understanding\n", + "\n", + "[![Open In Collab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/langchain-ai/langchain/blob/master/docs/extras/use_cases/code_understanding.ipynb)\n", + "\n", + "## Use case\n", + "\n", + "Source code analysis is one of the most popular LLM applications (e.g., [GitHub Co-Pilot](https://github.com/features/copilot), [Code Interpreter](https://chat.openai.com/auth/login?next=%2F%3Fmodel%3Dgpt-4-code-interpreter), [Codium](https://www.codium.ai/), and [Codeium](https://codeium.com/about)) for use-cases such as:\n", + "\n", + "- Q&A over the code base to understand how it works\n", + "- Using LLMs for suggesting refactors or improvements\n", + "- Using LLMs for documenting the code\n", + "\n", + "![Image description](/img/code_understanding.png)\n", + "\n", + "## Overview\n", + "\n", + "The pipeline for QA over code follows [the steps we do for document question answering](/docs/extras/use_cases/question_answering), with some differences:\n", + "\n", + "In particular, we can employ a [splitting strategy](https://python.langchain.com/docs/integrations/document_loaders/source_code) that does a few things:\n", + "\n", + "* Keeps each top-level function and class in the code is loaded into separate documents. \n", + "* Puts remaining into a seperate document.\n", + "* Retains metadata about where each split comes from\n", + "\n", + "## Quickstart" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install openai tiktoken chromadb langchain\n", + "\n", + "# Set env var OPENAI_API_KEY or load from a .env file\n", + "# import dotenv\n", + "\n", + "# dotenv.load_env()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'lll follow the structure of [this notebook](https://github.com/cristobalcl/LearningLangChain/blob/master/notebooks/04%20-%20QA%20with%20code.ipynb) and employ [context aware code splitting](https://python.langchain.com/docs/integrations/document_loaders/source_code)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Loading\n", + "\n", + "\n", + "We will upload all python project files using the `langchain.document_loaders.TextLoader`.\n", + "\n", + "The following script iterates over the files in the LangChain repository and loads every `.py` file (a.k.a. **documents**):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from git import Repo\n", + "from langchain.text_splitter import Language\n", + "from langchain.document_loaders.generic import GenericLoader\n", + "from langchain.document_loaders.parsers import LanguageParser" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# Clone\n", + "repo_path = \"/Users/rlm/Desktop/test_repo\"\n", + "repo = Repo.clone_from(\"https://github.com/hwchase17/langchain\", to_path=repo_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We load the py code using [`LanguageParser`](https://python.langchain.com/docs/integrations/document_loaders/source_code), which will:\n", + "\n", + "* Keep top-level functions and classes together (into a single document)\n", + "* Put remaining code into a seperate document\n", + "* Retains metadata about where each split comes from" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1293" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load\n", + "loader = GenericLoader.from_filesystem(\n", + " repo_path+\"/libs/langchain/langchain\",\n", + " glob=\"**/*\",\n", + " suffixes=[\".py\"],\n", + " parser=LanguageParser(language=Language.PYTHON, parser_threshold=500)\n", + ")\n", + "documents = loader.load()\n", + "len(documents)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Splittng\n", + "\n", + "Split the `Document` into chunks for embedding and vector storage.\n", + "\n", + "We can use `RecursiveCharacterTextSplitter` w/ `language` specified." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3748" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", + "python_splitter = RecursiveCharacterTextSplitter.from_language(language=Language.PYTHON, \n", + " chunk_size=2000, \n", + " chunk_overlap=200)\n", + "texts = python_splitter.split_documents(documents)\n", + "len(texts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### RetrievalQA\n", + "\n", + "We need to store the documents in a way we can semantically search for their content. \n", + "\n", + "The most common approach is to embed the contents of each document then store the embedding and document in a vector store. \n", + "\n", + "When setting up the vectorstore retriever:\n", + "\n", + "* We test [max marginal relevance](/docs/extras/use_cases/question_answering) for retrieval\n", + "* And 8 documents returned\n", + "\n", + "#### Go deeper\n", + "\n", + "- Browse the > 40 vectorstores integrations [here](https://integrations.langchain.com/).\n", + "- See further documentation on vectorstores [here](/docs/modules/data_connection/vectorstores/).\n", + "- Browse the > 30 text embedding integrations [here](https://integrations.langchain.com/).\n", + "- See further documentation on embedding models [here](/docs/modules/data_connection/text_embedding/)." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.vectorstores import Chroma\n", + "from langchain.embeddings.openai import OpenAIEmbeddings\n", + "db = Chroma.from_documents(texts, OpenAIEmbeddings(disallowed_special=()))\n", + "retriever = db.as_retriever(\n", + " search_type=\"mmr\", # Also test \"similarity\"\n", + " search_kwargs={\"k\": 8},\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Chat\n", + "\n", + "Test chat, just as we do for [chatbots](/docs/extras/use_cases/chatbots).\n", + "\n", + "#### Go deeper\n", + "\n", + "- Browse the > 55 LLM and chat model integrations [here](https://integrations.langchain.com/).\n", + "- See further documentation on LLMs and chat models [here](/docs/modules/model_io/models/).\n", + "- Use local LLMS: The popularity of [PrivateGPT](https://github.com/imartinez/privateGPT) and [GPT4All](https://github.com/nomic-ai/gpt4all) underscore the importance of running LLMs locally." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chat_models import ChatOpenAI\n", + "from langchain.memory import ConversationSummaryMemory\n", + "from langchain.chains import ConversationalRetrievalChain\n", + "llm = ChatOpenAI(model_name=\"gpt-4\") \n", + "memory = ConversationSummaryMemory(llm=llm,memory_key=\"chat_history\",return_messages=True)\n", + "qa = ConversationalRetrievalChain.from_llm(llm, retriever=retriever, memory=memory)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'To load a source code as documents for a QA over code, you can use the `CodeLoader` class. This class allows you to load source code files and split them into classes and functions.\\n\\nHere is an example of how to use the `CodeLoader` class:\\n\\n```python\\nfrom langchain.document_loaders.code import CodeLoader\\n\\n# Specify the path to the source code file\\ncode_file_path = \"path/to/code/file.py\"\\n\\n# Create an instance of the CodeLoader class\\ncode_loader = CodeLoader(code_file_path)\\n\\n# Load the code as documents\\ndocuments = code_loader.load()\\n\\n# Iterate over the documents\\nfor document in documents:\\n # Access the class or function name\\n name = document.metadata[\"name\"]\\n \\n # Access the code content\\n code = document.page_content\\n \\n # Process the code as needed\\n # ...\\n```\\n\\nIn the example above, `code_file_path` should be replaced with the actual path to your source code file. The `load()` method of the `CodeLoader` class will return a list of `Document` objects, where each document represents a class or function in the source code. You can access the class or function name using the `metadata[\"name\"]` attribute, and the code content using the `page_content` attribute of each `Document` object.\\n\\nYou can then process the code as needed for your QA task.'" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "question = \"How can I load a source code as documents, for a QA over code, spliting the code in classes and functions?\"\n", + "result = qa(question)\n", + "result['answer']" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-> **Question**: What is the class hierarchy? \n", + "\n", + "**Answer**: The class hierarchy in object-oriented programming is the structure that forms when classes are derived from other classes. The derived class is a subclass of the base class also known as the superclass. This hierarchy is formed based on the concept of inheritance in object-oriented programming where a subclass inherits the properties and functionalities of the superclass. \n", + "\n", + "In the given context, we have the following examples of class hierarchies:\n", + "\n", + "1. `BaseCallbackHandler --> CallbackHandler` means `BaseCallbackHandler` is a base class and `CallbackHandler` (like `AimCallbackHandler`, `ArgillaCallbackHandler` etc.) are derived classes that inherit from `BaseCallbackHandler`.\n", + "\n", + "2. `BaseLoader --> Loader` means `BaseLoader` is a base class and `Loader` (like `TextLoader`, `UnstructuredFileLoader` etc.) are derived classes that inherit from `BaseLoader`.\n", + "\n", + "3. `ToolMetaclass --> BaseTool --> Tool` means `ToolMetaclass` is a base class, `BaseTool` is a derived class that inherits from `ToolMetaclass`, and `Tool` (like `AIPluginTool`, `BaseGraphQLTool` etc.) are further derived classes that inherit from `BaseTool`. \n", + "\n", + "-> **Question**: What classes are derived from the Chain class? \n", + "\n", + "**Answer**: The classes that are derived from the Chain class are:\n", + "\n", + "1. LLMSummarizationCheckerChain\n", + "2. MapReduceChain\n", + "3. OpenAIModerationChain\n", + "4. NatBotChain\n", + "5. QAGenerationChain\n", + "6. QAWithSourcesChain\n", + "7. RetrievalQAWithSourcesChain\n", + "8. VectorDBQAWithSourcesChain\n", + "9. RetrievalQA\n", + "10. VectorDBQA\n", + "11. LLMRouterChain\n", + "12. MultiPromptChain\n", + "13. MultiRetrievalQAChain\n", + "14. MultiRouteChain\n", + "15. RouterChain\n", + "16. SequentialChain\n", + "17. SimpleSequentialChain\n", + "18. TransformChain\n", + "19. BaseConversationalRetrievalChain\n", + "20. ConstitutionalChain \n", + "\n", + "-> **Question**: What one improvement do you propose in code in relation to the class herarchy for the Chain class? \n", + "\n", + "**Answer**: As an AI model, I don't have personal opinions. However, one suggestion could be to improve the documentation of the Chain class hierarchy. The current comments and docstrings provide some details but it could be helpful to include more explicit explanations about the hierarchy, roles of each subclass, and their relationships with one another. Also, incorporating UML diagrams or other visuals could help developers better understand the structure and interactions of the classes. \n", + "\n" + ] + } + ], + "source": [ + "questions = [\n", + " \"What is the class hierarchy?\",\n", + " \"What classes are derived from the Chain class?\",\n", + " \"What one improvement do you propose in code in relation to the class herarchy for the Chain class?\",\n", + "]\n", + "\n", + "for question in questions:\n", + " result = qa(question)\n", + " print(f\"-> **Question**: {question} \\n\")\n", + " print(f\"**Answer**: {result['answer']} \\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The can look at the [LangSmith trace](https://smith.langchain.com/public/2b23045f-4e49-4d2d-8980-dec85259af36/r) to see what is happening under the hood:\n", + "\n", + "* In particular, the code well structured and kept together in the retrival output\n", + "* The retrieved code and chat history are passed to the LLM for answer distillation\n", + "\n", + "![Image description](/img/code_retrieval.png)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/extras/use_cases/code/code-analysis-deeplake.ipynb b/docs/extras/use_cases/question_answering/how_to/code/code-analysis-deeplake.ipynb similarity index 100% rename from docs/extras/use_cases/code/code-analysis-deeplake.ipynb rename to docs/extras/use_cases/question_answering/how_to/code/code-analysis-deeplake.ipynb diff --git a/docs/extras/use_cases/code/index.mdx b/docs/extras/use_cases/question_answering/how_to/code/index.mdx similarity index 100% rename from docs/extras/use_cases/code/index.mdx rename to docs/extras/use_cases/question_answering/how_to/code/index.mdx diff --git a/docs/extras/use_cases/code/twitter-the-algorithm-analysis-deeplake.ipynb b/docs/extras/use_cases/question_answering/how_to/code/twitter-the-algorithm-analysis-deeplake.ipynb similarity index 100% rename from docs/extras/use_cases/code/twitter-the-algorithm-analysis-deeplake.ipynb rename to docs/extras/use_cases/question_answering/how_to/code/twitter-the-algorithm-analysis-deeplake.ipynb From 926c64da606ffc825d834acf3fb40b20f82dfbf9 Mon Sep 17 00:00:00 2001 From: Jacques Arnoux Date: Fri, 11 Aug 2023 10:50:37 -0700 Subject: [PATCH 056/175] Fix web research retriever for unknown links in results (#9115) Fixes an issue with web research retriever for unknown links in results. This is currently making the retrieve crash sometimes. @rlancemartin --- libs/langchain/langchain/retrievers/web_research.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libs/langchain/langchain/retrievers/web_research.py b/libs/langchain/langchain/retrievers/web_research.py index e8ebfd7b4..478005cb3 100644 --- a/libs/langchain/langchain/retrievers/web_research.py +++ b/libs/langchain/langchain/retrievers/web_research.py @@ -179,15 +179,16 @@ class WebResearchRetriever(BaseRetriever): logger.info(f"Questions for Google Search: {questions}") # Get urls - logger.info("Searching for relevat urls ...") + logger.info("Searching for relevant urls...") urls_to_look = [] for query in questions: # Google search search_results = self.search_tool(query, self.num_search_results) - logger.info("Searching for relevat urls ...") + logger.info("Searching for relevant urls...") logger.info(f"Search results: {search_results}") for res in search_results: - urls_to_look.append(res["link"]) + if res.get("link", None): + urls_to_look.append(res["link"]) # Relevant urls urls = set(urls_to_look) From 8cb259456222462d91b66668b6c4baedd871c7db Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Fri, 11 Aug 2023 10:54:45 -0700 Subject: [PATCH 057/175] Bagatur/dingo (#9079) Co-authored-by: gary <1625721671@qq.com> --- docs/extras/integrations/providers/dingo.mdx | 19 + .../integrations/vectorstores/dingo.ipynb | 244 ++++++++++++ .../langchain/vectorstores/__init__.py | 2 + .../langchain/langchain/vectorstores/dingo.py | 349 ++++++++++++++++++ 4 files changed, 614 insertions(+) create mode 100644 docs/extras/integrations/providers/dingo.mdx create mode 100644 docs/extras/integrations/vectorstores/dingo.ipynb create mode 100644 libs/langchain/langchain/vectorstores/dingo.py diff --git a/docs/extras/integrations/providers/dingo.mdx b/docs/extras/integrations/providers/dingo.mdx new file mode 100644 index 000000000..5fd59675b --- /dev/null +++ b/docs/extras/integrations/providers/dingo.mdx @@ -0,0 +1,19 @@ +# Dingo + +This page covers how to use the Dingo ecosystem within LangChain. +It is broken into two parts: installation and setup, and then references to specific Dingo wrappers. + +## Installation and Setup +- Install the Python SDK with `pip install dingodb` + +## VectorStore + +There exists a wrapper around Dingo indexes, allowing you to use it as a vectorstore, +whether for semantic search or example selection. + +To import this vectorstore: +```python +from langchain.vectorstores import Dingo +``` + +For a more detailed walkthrough of the Dingo wrapper, see [this notebook](/docs/integrations/vectorstores/dingo.html) diff --git a/docs/extras/integrations/vectorstores/dingo.ipynb b/docs/extras/integrations/vectorstores/dingo.ipynb new file mode 100644 index 000000000..fab91b327 --- /dev/null +++ b/docs/extras/integrations/vectorstores/dingo.ipynb @@ -0,0 +1,244 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "683953b3", + "metadata": {}, + "source": [ + "# Dingo\n", + "\n", + ">[Dingo](https://dingodb.readthedocs.io/en/latest/) is a distributed multi-mode vector database, which combines the characteristics of data lakes and vector databases, and can store data of any type and size (Key-Value, PDF, audio, video, etc.). It has real-time low-latency processing capabilities to achieve rapid insight and response, and can efficiently conduct instant analysis and process multi-modal data.\n", + "\n", + "This notebook shows how to use functionality related to the DingoDB vector database.\n", + "\n", + "To run, you should have a [DingoDB instance up and running](https://github.com/dingodb/dingo-deploy/blob/main/README.md)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a62cff8a-bcf7-4e33-bbbc-76999c2e3e20", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "!pip install dingodb" + ] + }, + { + "cell_type": "markdown", + "id": "7a0f9e02-8eb0-4aef-b11f-8861360472ee", + "metadata": {}, + "source": [ + "We want to use OpenAIEmbeddings so we have to get the OpenAI API Key." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "8b6ed9cd-81b9-46e5-9c20-5aafca2844d0", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OpenAI API Key:········\n" + ] + } + ], + "source": [ + "import os\n", + "import getpass\n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = getpass.getpass(\"OpenAI API Key:\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "aac9563e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain.embeddings.openai import OpenAIEmbeddings\n", + "from langchain.text_splitter import CharacterTextSplitter\n", + "from langchain.vectorstores import Dingo\n", + "from langchain.document_loaders import TextLoader" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a3c3999a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain.document_loaders import TextLoader\n", + "\n", + "loader = TextLoader(\"../../../state_of_the_union.txt\")\n", + "documents = loader.load()\n", + "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\n", + "docs = text_splitter.split_documents(documents)\n", + "\n", + "embeddings = OpenAIEmbeddings()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "dcf88bdf", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from dingodb import DingoDB\n", + "\n", + "index_name = \"langchain-demo\"\n", + "\n", + "dingo_client = DingoDB(user=\"\", password=\"\", host=[\"127.0.0.1:13000\"])\n", + "# First, check if our index already exists. If it doesn't, we create it\n", + "if index_name not in dingo_client.get_index():\n", + " # we create a new index\n", + " dingo_client.create_index(\n", + " index_name=index_name,\n", + " dimension=1536,\n", + " metric_type='cosine',\n", + " auto_id=False\n", + ")\n", + "\n", + "# The OpenAI embedding model `text-embedding-ada-002 uses 1536 dimensions`\n", + "docsearch = Dingo.from_documents(docs, embeddings, client=dingo_client, index_name=index_name)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c3aae49e", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.embeddings.openai import OpenAIEmbeddings\n", + "from langchain.text_splitter import CharacterTextSplitter\n", + "from langchain.vectorstores import Dingo\n", + "from langchain.document_loaders import TextLoader" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a8c513ab", + "metadata": {}, + "outputs": [], + "source": [ + "query = \"What did the president say about Ketanji Brown Jackson\"\n", + "docs = docsearch.similarity_search(query)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "fc516993", + "metadata": {}, + "outputs": [], + "source": [ + "print(docs[0][1])" + ] + }, + { + "cell_type": "markdown", + "id": "1eca81e4", + "metadata": {}, + "source": [ + "### Adding More Text to an Existing Index\n", + "\n", + "More text can embedded and upserted to an existing Dingo index using the `add_texts` function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e40d558b", + "metadata": {}, + "outputs": [], + "source": [ + "vectorstore = Dingo(client, embeddings.embed_query, \"text\")\n", + "\n", + "vectorstore.add_texts(\"More text!\")" + ] + }, + { + "cell_type": "markdown", + "id": "bcb858a8", + "metadata": {}, + "source": [ + "### Maximal Marginal Relevance Searches\n", + "\n", + "In addition to using similarity search in the retriever object, you can also use `mmr` as retriever." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "649083ab", + "metadata": {}, + "outputs": [], + "source": [ + "retriever = docsearch.as_retriever(search_type=\"mmr\")\n", + "matched_docs = retriever.get_relevant_documents(query)\n", + "for i, d in enumerate(matched_docs):\n", + " print(f\"\\n## Document {i}\\n\")\n", + " print(d.page_content)" + ] + }, + { + "cell_type": "markdown", + "id": "7d3831ad", + "metadata": {}, + "source": [ + "Or use `max_marginal_relevance_search` directly:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "732f58b1", + "metadata": {}, + "outputs": [], + "source": [ + "found_docs = docsearch.max_marginal_relevance_search(query, k=2, fetch_k=10)\n", + "for i, doc in enumerate(found_docs):\n", + " print(f\"{i + 1}.\", doc.page_content, \"\\n\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/libs/langchain/langchain/vectorstores/__init__.py b/libs/langchain/langchain/vectorstores/__init__.py index 4c254daed..5e3b904a4 100644 --- a/libs/langchain/langchain/vectorstores/__init__.py +++ b/libs/langchain/langchain/vectorstores/__init__.py @@ -34,6 +34,7 @@ from langchain.vectorstores.chroma import Chroma from langchain.vectorstores.clarifai import Clarifai from langchain.vectorstores.clickhouse import Clickhouse, ClickhouseSettings from langchain.vectorstores.deeplake import DeepLake +from langchain.vectorstores.dingo import Dingo from langchain.vectorstores.docarray import DocArrayHnswSearch, DocArrayInMemorySearch from langchain.vectorstores.elastic_vector_search import ( ElasticKnnSearch, @@ -82,6 +83,7 @@ __all__ = [ "Clickhouse", "ClickhouseSettings", "DeepLake", + "Dingo", "DocArrayHnswSearch", "DocArrayInMemorySearch", "ElasticVectorSearch", diff --git a/libs/langchain/langchain/vectorstores/dingo.py b/libs/langchain/langchain/vectorstores/dingo.py new file mode 100644 index 000000000..a1f31eeb4 --- /dev/null +++ b/libs/langchain/langchain/vectorstores/dingo.py @@ -0,0 +1,349 @@ +"""Wrapper around the Dingo vector database.""" +from __future__ import annotations + +import logging +import uuid +from typing import Any, Iterable, List, Optional, Tuple + +import numpy as np + +from langchain.docstore.document import Document +from langchain.embeddings.base import Embeddings +from langchain.vectorstores.base import VectorStore +from langchain.vectorstores.utils import maximal_marginal_relevance + +logger = logging.getLogger(__name__) + + +class Dingo(VectorStore): + """Wrapper around Dingo vector database. + + To use, you should have the ``dingodb`` python package installed. + + Example: + .. code-block:: python + + from langchain.vectorstores import Dingo + from langchain.embeddings.openai import OpenAIEmbeddings + + embeddings = OpenAIEmbeddings() + dingo = Dingo(embeddings, "text") + """ + + def __init__( + self, + embedding: Embeddings, + text_key: str, + *, + client: Any = None, + index_name: Optional[str] = None, + host: Optional[List[str]] = None, + user: str = "root", + password: str = "123123", + self_id: bool = False, + ): + """Initialize with Dingo client.""" + try: + import dingodb + except ImportError: + raise ImportError( + "Could not import dingo python package. " + "Please install it with `pip install dingodb." + ) + + host = host if host is not None else ["172.20.31.10:13000"] + + # collection + if client is not None: + dingo_client = client + else: + try: + # connect to dingo db + dingo_client = dingodb.DingoDB(user, password, host) + except ValueError as e: + raise ValueError(f"Dingo failed to connect: {e}") + + self._text_key = text_key + self._client = dingo_client + + if index_name is not None and index_name not in dingo_client.get_index(): + if self_id is True: + dingo_client.create_index(index_name, 1024, auto_id=False) + else: + dingo_client.create_index(index_name, 1024) + + self._index_name = index_name + self._embedding = embedding + + @property + def embeddings(self) -> Optional[Embeddings]: + return self._embedding + + def add_texts( + self, + texts: Iterable[str], + metadatas: Optional[List[dict]] = None, + ids: Optional[List[str]] = None, + text_key: str = "text", + batch_size: int = 500, + **kwargs: Any, + ) -> List[str]: + """Run more texts through the embeddings and add to the vectorstore. + + Args: + texts: Iterable of strings to add to the vectorstore. + metadatas: Optional list of metadatas associated with the texts. + ids: Optional list of ids to associate with the texts. + + Returns: + List of ids from adding the texts into the vectorstore. + + """ + + # Embed and create the documents + ids = ids or [str(uuid.uuid1().int)[:13] for _ in texts] + metadatas_list = [] + texts = list(texts) + embeds = self._embedding.embed_documents(texts) + for i, text in enumerate(texts): + metadata = metadatas[i] if metadatas else {} + metadata[self._text_key] = text + metadatas_list.append(metadata) + # upsert to Dingo + for i in range(0, len(list(texts)), batch_size): + j = i + batch_size + self._client.vector_add( + self._index_name, metadatas_list[i:j], embeds[i:j], ids[i:j] + ) + + return ids + + def similarity_search( + self, + query: str, + k: int = 4, + search_params: Optional[dict] = None, + timeout: Optional[int] = None, + **kwargs: Any, + ) -> List[Document]: + """Return Dingo documents most similar to query, along with scores. + + Args: + query: Text to look up documents similar to. + k: Number of Documents to return. Defaults to 4. + search_params: Dictionary of argument(s) to filter on metadata + + Returns: + List of Documents most similar to the query and score for each + """ + docs_and_scores = self.similarity_search_with_score( + query, k=k, search_params=search_params + ) + return [doc for doc, _ in docs_and_scores] + + def similarity_search_with_score( + self, + query: str, + k: int = 4, + search_params: Optional[dict] = None, + timeout: Optional[int] = None, + **kwargs: Any, + ) -> List[Tuple[Document, float]]: + """Return Dingo documents most similar to query, along with scores. + + Args: + query: Text to look up documents similar to. + k: Number of Documents to return. Defaults to 4. + search_params: Dictionary of argument(s) to filter on metadata + + Returns: + List of Documents most similar to the query and score for each + """ + docs = [] + query_obj = self._embedding.embed_query(query) + results = self._client.vector_search( + self._index_name, xq=query_obj, top_k=k, search_params=search_params + ) + + if not results: + return [] + + for res in results[0]["vectorWithDistances"]: + metadatas = res["scalarData"] + id = res["id"] + score = res["distance"] + text = metadatas[self._text_key]["fields"][0]["data"] + + metadata = {"id": id, "text": text, "score": score} + docs.append((Document(page_content=text, metadata=metadata), score)) + + return docs + + def max_marginal_relevance_search_by_vector( + self, + embedding: List[float], + k: int = 4, + fetch_k: int = 20, + lambda_mult: float = 0.5, + search_params: Optional[dict] = None, + **kwargs: Any, + ) -> List[Document]: + """Return docs selected using the maximal marginal relevance. + + Maximal marginal relevance optimizes for similarity to query AND diversity + among selected documents. + + Args: + embedding: Embedding to look up documents similar to. + k: Number of Documents to return. Defaults to 4. + fetch_k: Number of Documents to fetch to pass to MMR algorithm. + lambda_mult: Number between 0 and 1 that determines the degree + of diversity among the results with 0 corresponding + to maximum diversity and 1 to minimum diversity. + Defaults to 0.5. + Returns: + List of Documents selected by maximal marginal relevance. + """ + results = self._client.vector_search( + self._index_name, [embedding], search_params, k + ) + + mmr_selected = maximal_marginal_relevance( + np.array([embedding], dtype=np.float32), + [item["floatValues"] for item in results[0]["vectorWithDistances"]], + k=k, + lambda_mult=lambda_mult, + ) + selected = [ + results[0]["vectorWithDistances"][i]["metaData"] for i in mmr_selected + ] + return [ + Document(page_content=metadata.pop((self._text_key)), metadata=metadata) + for metadata in selected + ] + + def max_marginal_relevance_search( + self, + query: str, + k: int = 4, + fetch_k: int = 20, + lambda_mult: float = 0.5, + search_params: Optional[dict] = None, + **kwargs: Any, + ) -> List[Document]: + """Return docs selected using the maximal marginal relevance. + + Maximal marginal relevance optimizes for similarity to query AND diversity + among selected documents. + + Args: + query: Text to look up documents similar to. + k: Number of Documents to return. Defaults to 4. + fetch_k: Number of Documents to fetch to pass to MMR algorithm. + lambda_mult: Number between 0 and 1 that determines the degree + of diversity among the results with 0 corresponding + to maximum diversity and 1 to minimum diversity. + Defaults to 0.5. + Returns: + List of Documents selected by maximal marginal relevance. + """ + embedding = self._embedding.embed_query(query) + return self.max_marginal_relevance_search_by_vector( + embedding, k, fetch_k, lambda_mult, search_params + ) + + @classmethod + def from_texts( + cls, + texts: List[str], + embedding: Embeddings, + metadatas: Optional[List[dict]] = None, + ids: Optional[List[str]] = None, + text_key: str = "text", + index_name: Optional[str] = None, + client: Any = None, + host: List[str] = ["172.20.31.10:13000"], + user: str = "root", + password: str = "123123", + batch_size: int = 500, + **kwargs: Any, + ) -> Dingo: + """Construct Dingo wrapper from raw documents. + + This is a user friendly interface that: + 1. Embeds documents. + 2. Adds the documents to a provided Dingo index + + This is intended to be a quick way to get started. + + Example: + .. code-block:: python + + from langchain import Dingo + from langchain.embeddings import OpenAIEmbeddings + import dingodb + sss + embeddings = OpenAIEmbeddings() + dingo = Dingo.from_texts( + texts, + embeddings, + index_name="langchain-demo" + ) + """ + try: + import dingodb + except ImportError: + raise ImportError( + "Could not import dingo python package. " + "Please install it with `pip install dingodb`." + ) + + if client is not None: + dingo_client = client + else: + try: + # connect to dingo db + dingo_client = dingodb.DingoDB(user, password, host) + except ValueError as e: + raise ValueError(f"Dingo failed to connect: {e}") + if kwargs is not None and kwargs.get("self_id") is True: + if index_name not in dingo_client.get_index(): + dingo_client.create_index(index_name, 1024, auto_id=False) + else: + if index_name not in dingo_client.get_index(): + dingo_client.create_index(index_name, 1024) + # dingo_client.create_index(index_name, 1024, index_type="hnsw") + + # Embed and create the documents + + ids = ids or [str(uuid.uuid1().int)[:13] for _ in texts] + metadatas_list = [] + texts = list(texts) + embeds = embedding.embed_documents(texts) + for i, text in enumerate(texts): + metadata = metadatas[i] if metadatas else {} + metadata[text_key] = text + metadatas_list.append(metadata) + + # upsert to Dingo + for i in range(0, len(list(texts)), batch_size): + j = i + batch_size + dingo_client.vector_add( + index_name, metadatas_list[i:j], embeds[i:j], ids[i:j] + ) + return cls(embedding, text_key, client=dingo_client, index_name=index_name) + + def delete( + self, + ids: Optional[List[str]] = None, + **kwargs: Any, + ) -> Any: + """Delete by vector IDs or filter. + Args: + ids: List of ids to delete. + """ + + if ids is None: + raise ValueError("No ids provided to delete.") + + return self._client.vector_delete(self._index_name, ids=ids) From 16af5f86905705096552507f8739b5cfcaa77aa4 Mon Sep 17 00:00:00 2001 From: niklub Date: Fri, 11 Aug 2023 19:24:10 +0100 Subject: [PATCH 058/175] Add LabelStudio integration (#8880) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR introduces [Label Studio](https://labelstud.io/) integration with LangChain via `LabelStudioCallbackHandler`: - sending data to the Label Studio instance - labeling dataset for supervised LLM finetuning - rating model responses - tracking and displaying chat history - support for custom data labeling workflow ### Example ``` chat_llm = ChatOpenAI(callbacks=[LabelStudioCallbackHandler(mode="chat")]) chat_llm([ SystemMessage(content="Always use emojis in your responses."), HumanMessage(content="Hey AI, how's your day going?"), AIMessage(content="🤖 I don't have feelings, but I'm running smoothly! How can I help you today?"), HumanMessage(content="I'm feeling a bit down. Any advice?"), AIMessage(content="🤗 I'm sorry to hear that. Remember, it's okay to seek help or talk to someone if you need to. 💬"), HumanMessage(content="Can you tell me a joke to lighten the mood?"), AIMessage(content="Of course! 🎭 Why did the scarecrow win an award? Because he was outstanding in his field! 🌾"), HumanMessage(content="Haha, that was a good one! Thanks for cheering me up."), AIMessage(content="Always here to help! 😊 If you need anything else, just let me know."), HumanMessage(content="Will do! By the way, can you recommend a good movie?"), ]) ``` image ### Dependencies - [label-studio](https://pypi.org/project/label-studio/) - [label-studio-sdk](https://pypi.org/project/label-studio-sdk/) https://twitter.com/labelstudiohq --------- Co-authored-by: nik --- .../integrations/callbacks/labelstudio.ipynb | 382 +++++++++++++++++ .../langchain/langchain/callbacks/__init__.py | 2 + .../callbacks/labelstudio_callback.py | 392 ++++++++++++++++++ 3 files changed, 776 insertions(+) create mode 100644 docs/extras/integrations/callbacks/labelstudio.ipynb create mode 100644 libs/langchain/langchain/callbacks/labelstudio_callback.py diff --git a/docs/extras/integrations/callbacks/labelstudio.ipynb b/docs/extras/integrations/callbacks/labelstudio.ipynb new file mode 100644 index 000000000..927db2d63 --- /dev/null +++ b/docs/extras/integrations/callbacks/labelstudio.ipynb @@ -0,0 +1,382 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "# Label Studio\n", + "\n", + "

\n", + "\n", + "Label Studio is an open-source data labeling platform that provides LangChain with flexibility when it comes to labeling data for fine-tuning large language models (LLMs). It also enables the preparation of custom training data and the collection and evaluation of responses through human feedback.\n", + "\n", + "In this guide, you will learn how to connect a LangChain pipeline to Label Studio to:\n", + "\n", + "- Aggregate all input prompts, conversations, and responses in a single LabelStudio project. This consolidates all the data in one place for easier labeling and analysis.\n", + "- Refine prompts and responses to create a dataset for supervised fine-tuning (SFT) and reinforcement learning with human feedback (RLHF) scenarios. The labeled data can be used to further train the LLM to improve its performance.\n", + "- Evaluate model responses through human feedback. LabelStudio provides an interface for humans to review and provide feedback on model responses, allowing evaluation and iteration." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Installation and setup" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "First install latest versions of Label Studio and Label Studio API client:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "!pip install -U label-studio label-studio-sdk openai" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "Next, run `label-studio` on the command line to start the local LabelStudio instance at `http://localhost:8080`. See the [Label Studio installation guide](https://labelstud.io/guide/install) for more options." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "You'll need a token to make API calls.\n", + "\n", + "Open your LabelStudio instance in your browser, go to `Account & Settings > Access Token` and copy the key.\n", + "\n", + "Set environment variables with your LabelStudio URL, API key and OpenAI API key:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ['LABEL_STUDIO_URL'] = '' # e.g. http://localhost:8080\n", + "os.environ['LABEL_STUDIO_API_KEY'] = ''\n", + "os.environ['OPENAI_API_KEY'] = ''" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## Collecting LLMs prompts and responses" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The data used for labeling is stored in projects within Label Studio. Every project is identified by an XML configuration that details the specifications for input and output data. \n", + "\n", + "Create a project that takes human input in text format and outputs an editable LLM response in a text area:\n", + "\n", + "```xml\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "

_ 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%0DBc`|#=Chgca?e#J*0k!X#5N|U{I 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