from dataclasses import dataclass from modules.datamodels.datamodelWeb import ( WebCrawlActionResult, WebCrawlActionDocument, WebCrawlDocumentData, WebCrawlRequest, WebCrawlResultItem, WebScrapeActionResult, WebScrapeActionDocument, WebSearchDocumentData as WebScrapeDocumentData, WebScrapeRequest, WebScrapeResultItem, WebSearchActionResult, WebSearchActionDocument, WebSearchDocumentData, WebSearchRequest, WebSearchResultItem, ) from modules.connectors.connectorWebTavily import ConnectorWeb from modules.datamodels.datamodelWorkflow import ActionDocument @dataclass(slots=True) class WebInterface: connectorWebTavily: ConnectorWeb def __post_init__(self) -> None: if self.connectorWebTavily is None: raise TypeError( "connectorWebTavily must be provided. " "Use `await WebInterface.create()` or pass a ConnectorWeb." ) @classmethod async def create(cls) -> "WebInterface": connectorWebTavily = await ConnectorWeb.create() return WebInterface(connectorWebTavily=connectorWebTavily) # Methods async def search(self, web_search_request: WebSearchRequest) -> WebSearchActionResult: return await self.connectorWebTavily.search(web_search_request) async def crawl(self, web_crawl_request: WebCrawlRequest) -> WebCrawlActionResult: return await self.connectorWebTavily.crawl(web_crawl_request) async def scrape(self, web_scrape_request: WebScrapeRequest) -> WebScrapeActionResult: return await self.connectorWebTavily.scrape(web_scrape_request) # Helpers moved to MethodWeb