First take on a rag tool

This commit is contained in:
Gui Vieira
2024-02-13 20:10:56 -03:00
parent 54e4554f49
commit c1182eb322
22 changed files with 454 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
from abc import ABC, abstractmethod
from typing import Any
from pydantic import BaseModel, ConfigDict
from crewai_tools.base_tool import BaseTool
class Adapter(BaseModel, ABC):
model_config = ConfigDict(arbitrary_types_allowed=True)
@abstractmethod
def query(self, question: str) -> str:
"""Query the knowledge base with a question and return the answer."""
class RagTool(BaseTool):
name: str = "Knowledge base"
description: str = "A knowledge base that can be used to answer questions."
adapter: Adapter
def _run(
self,
*args: Any,
**kwargs: Any,
) -> Any:
return self.adapter.query(args[0])
def from_file(self, file_path: str):
from embedchain import App
from embedchain.models.data_type import DataType
from crewai_tools.adapters.embedchain_adapter import EmbedchainAdapter
app = App()
app.add(file_path, data_type=DataType.TEXT_FILE)
adapter = EmbedchainAdapter(embedchain_app=app)
return RagTool(adapter=adapter)
def from_directory(self, directory_path: str):
from embedchain import App
from embedchain.loaders.directory_loader import DirectoryLoader
from crewai_tools.adapters.embedchain_adapter import EmbedchainAdapter
loader = DirectoryLoader(config=dict(recursive=True))
app = App()
app.add(directory_path, loader=loader)
adapter = EmbedchainAdapter(embedchain_app=app)
return RagTool(adapter=adapter)
def from_web_page(self, url: str):
from embedchain import App
from embedchain.models.data_type import DataType
from crewai_tools.adapters.embedchain_adapter import EmbedchainAdapter
app = App()
app.add(url, data_type=DataType.WEB_PAGE)
adapter = EmbedchainAdapter(embedchain_app=app)
return RagTool(adapter=adapter)
def from_embedchain(self, config_path: str):
from embedchain import App
from crewai_tools.adapters.embedchain_adapter import EmbedchainAdapter
app = App.from_config(config_path=config_path)
adapter = EmbedchainAdapter(embedchain_app=app)
return RagTool(adapter=adapter)