mirror of
https://github.com/hwchase17/langchain
synced 2024-11-06 03:20:49 +00:00
ed58eeb9c5
Moved the following modules to new package langchain-community in a backwards compatible fashion: ``` mv langchain/langchain/adapters community/langchain_community mv langchain/langchain/callbacks community/langchain_community/callbacks mv langchain/langchain/chat_loaders community/langchain_community mv langchain/langchain/chat_models community/langchain_community mv langchain/langchain/document_loaders community/langchain_community mv langchain/langchain/docstore community/langchain_community mv langchain/langchain/document_transformers community/langchain_community mv langchain/langchain/embeddings community/langchain_community mv langchain/langchain/graphs community/langchain_community mv langchain/langchain/llms community/langchain_community mv langchain/langchain/memory/chat_message_histories community/langchain_community mv langchain/langchain/retrievers community/langchain_community mv langchain/langchain/storage community/langchain_community mv langchain/langchain/tools community/langchain_community mv langchain/langchain/utilities community/langchain_community mv langchain/langchain/vectorstores community/langchain_community mv langchain/langchain/agents/agent_toolkits community/langchain_community mv langchain/langchain/cache.py community/langchain_community mv langchain/langchain/adapters community/langchain_community mv langchain/langchain/callbacks community/langchain_community/callbacks mv langchain/langchain/chat_loaders community/langchain_community mv langchain/langchain/chat_models community/langchain_community mv langchain/langchain/document_loaders community/langchain_community mv langchain/langchain/docstore community/langchain_community mv langchain/langchain/document_transformers community/langchain_community mv langchain/langchain/embeddings community/langchain_community mv langchain/langchain/graphs community/langchain_community mv langchain/langchain/llms community/langchain_community mv langchain/langchain/memory/chat_message_histories community/langchain_community mv langchain/langchain/retrievers community/langchain_community mv langchain/langchain/storage community/langchain_community mv langchain/langchain/tools community/langchain_community mv langchain/langchain/utilities community/langchain_community mv langchain/langchain/vectorstores community/langchain_community mv langchain/langchain/agents/agent_toolkits community/langchain_community mv langchain/langchain/cache.py community/langchain_community ``` Moved the following to core ``` mv langchain/langchain/utils/json_schema.py core/langchain_core/utils mv langchain/langchain/utils/html.py core/langchain_core/utils mv langchain/langchain/utils/strings.py core/langchain_core/utils cat langchain/langchain/utils/env.py >> core/langchain_core/utils/env.py rm langchain/langchain/utils/env.py ``` See .scripts/community_split/script_integrations.sh for all changes
96 lines
3.2 KiB
Python
96 lines
3.2 KiB
Python
"""Tools for interacting with vectorstores."""
|
|
|
|
import json
|
|
from typing import Any, Dict, Optional
|
|
|
|
from langchain_core.callbacks import CallbackManagerForToolRun
|
|
from langchain_core.language_models import BaseLanguageModel
|
|
from langchain_core.pydantic_v1 import BaseModel, Field
|
|
from langchain_core.tools import BaseTool
|
|
from langchain_core.vectorstores import VectorStore
|
|
|
|
from langchain_community.llms.openai import OpenAI
|
|
|
|
|
|
class BaseVectorStoreTool(BaseModel):
|
|
"""Base class for tools that use a VectorStore."""
|
|
|
|
vectorstore: VectorStore = Field(exclude=True)
|
|
llm: BaseLanguageModel = Field(default_factory=lambda: OpenAI(temperature=0))
|
|
|
|
class Config(BaseTool.Config):
|
|
pass
|
|
|
|
|
|
def _create_description_from_template(values: Dict[str, Any]) -> Dict[str, Any]:
|
|
values["description"] = values["template"].format(name=values["name"])
|
|
return values
|
|
|
|
|
|
class VectorStoreQATool(BaseVectorStoreTool, BaseTool):
|
|
"""Tool for the VectorDBQA chain. To be initialized with name and chain."""
|
|
|
|
@staticmethod
|
|
def get_description(name: str, description: str) -> str:
|
|
template: str = (
|
|
"Useful for when you need to answer questions about {name}. "
|
|
"Whenever you need information about {description} "
|
|
"you should ALWAYS use this. "
|
|
"Input should be a fully formed question."
|
|
)
|
|
return template.format(name=name, description=description)
|
|
|
|
def _run(
|
|
self,
|
|
query: str,
|
|
run_manager: Optional[CallbackManagerForToolRun] = None,
|
|
) -> str:
|
|
"""Use the tool."""
|
|
from langchain.chains.retrieval_qa.base import RetrievalQA
|
|
|
|
chain = RetrievalQA.from_chain_type(
|
|
self.llm, retriever=self.vectorstore.as_retriever()
|
|
)
|
|
return chain.run(
|
|
query, callbacks=run_manager.get_child() if run_manager else None
|
|
)
|
|
|
|
|
|
class VectorStoreQAWithSourcesTool(BaseVectorStoreTool, BaseTool):
|
|
"""Tool for the VectorDBQAWithSources chain."""
|
|
|
|
@staticmethod
|
|
def get_description(name: str, description: str) -> str:
|
|
template: str = (
|
|
"Useful for when you need to answer questions about {name} and the sources "
|
|
"used to construct the answer. "
|
|
"Whenever you need information about {description} "
|
|
"you should ALWAYS use this. "
|
|
" Input should be a fully formed question. "
|
|
"Output is a json serialized dictionary with keys `answer` and `sources`. "
|
|
"Only use this tool if the user explicitly asks for sources."
|
|
)
|
|
return template.format(name=name, description=description)
|
|
|
|
def _run(
|
|
self,
|
|
query: str,
|
|
run_manager: Optional[CallbackManagerForToolRun] = None,
|
|
) -> str:
|
|
"""Use the tool."""
|
|
|
|
from langchain.chains.qa_with_sources.retrieval import (
|
|
RetrievalQAWithSourcesChain,
|
|
)
|
|
|
|
chain = RetrievalQAWithSourcesChain.from_chain_type(
|
|
self.llm, retriever=self.vectorstore.as_retriever()
|
|
)
|
|
return json.dumps(
|
|
chain(
|
|
{chain.question_key: query},
|
|
return_only_outputs=True,
|
|
callbacks=run_manager.get_child() if run_manager else None,
|
|
)
|
|
)
|