from typing import Optional from modules.interfaces.interface_web_model import ( WebCrawlActionResult, WebSearchActionResult, WebSearchRequest, WebCrawlRequest, WebScrapeActionResult, WebScrapeRequest, ) from dataclasses import dataclass from modules.connectors.connector_tavily import ConnectorTavily @dataclass(slots=True) class WebInterface: connector_tavily: ConnectorTavily def __post_init__(self) -> None: if self.connector_tavily is None: raise TypeError( "connector_tavily must be provided. " "Use `await WebInterface.create()` or pass a ConnectorTavily." ) @classmethod async def create(cls) -> "WebInterface": connector_tavily = await ConnectorTavily.create() return WebInterface(connector_tavily=connector_tavily) async def search( self, web_search_request: WebSearchRequest ) -> WebSearchActionResult: # NOTE: Add connectors here return await self.connector_tavily.search_urls(web_search_request) async def crawl(self, web_crawl_request: WebCrawlRequest) -> WebCrawlActionResult: # NOTE: Add connectors here return await self.connector_tavily.crawl_urls(web_crawl_request) async def scrape( self, web_scrape_request: WebScrapeRequest ) -> WebScrapeActionResult: # NOTE: Add connectors here return await self.connector_tavily.scrape(web_scrape_request)