chore: type checking; input validation for web interface

This commit is contained in:
Christopher Gondek 2025-09-01 16:06:29 +02:00
parent cfc83a7f42
commit 017b7f1ca0
2 changed files with 22 additions and 14 deletions

View file

@ -2,7 +2,7 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from modules.interfaces.interfaceChatModel import ActionDocument, ActionResult from modules.interfaces.interfaceChatModel import ActionDocument, ActionResult
from pydantic import BaseModel, Field from pydantic import BaseModel, Field, HttpUrl
from typing import List from typing import List
@ -12,21 +12,21 @@ from typing import List
class WebSearchRequest(BaseModel): class WebSearchRequest(BaseModel):
query: str query: str = Field(min_length=1, max_length=400)
max_results: int max_results: int = Field(ge=1, le=20)
class WebSearchResultItem(BaseModel): class WebSearchResultItem(BaseModel):
"""Individual search result""" """Individual search result"""
title: str title: str
url: str url: HttpUrl
class WebSearchDocumentData(BaseModel): class WebSearchDocumentData(BaseModel):
"""Complete search results document""" """Complete search results document"""
query: str query: str = Field(min_length=1, max_length=400)
results: List[WebSearchResultItem] results: List[WebSearchResultItem]
total_count: int total_count: int
@ -50,20 +50,20 @@ class WebSearchBase(ABC):
class WebCrawlRequest(BaseModel): class WebCrawlRequest(BaseModel):
urls: List[str] urls: List[HttpUrl]
class WebCrawlResultItem(BaseModel): class WebCrawlResultItem(BaseModel):
"""Individual crawl result""" """Individual crawl result"""
url: str url: HttpUrl
content: str content: str
class WebCrawlDocumentData(BaseModel): class WebCrawlDocumentData(BaseModel):
"""Complete crawl results document""" """Complete crawl results document"""
urls: List[str] urls: List[HttpUrl]
results: List[WebCrawlResultItem] results: List[WebCrawlResultItem]
total_count: int total_count: int
@ -89,21 +89,21 @@ class WebCrawlBase(ABC):
class WebScrapeRequest(BaseModel): class WebScrapeRequest(BaseModel):
query: str query: str = Field(min_length=1, max_length=400)
max_results: int max_results: int = Field(ge=1, le=20)
class WebScrapeResultItem(BaseModel): class WebScrapeResultItem(BaseModel):
"""Individual scrape result""" """Individual scrape result"""
url: str url: HttpUrl
content: str content: str
class WebScrapeDocumentData(BaseModel): class WebScrapeDocumentData(BaseModel):
"""Complete scrape results document""" """Complete scrape results document"""
query: str query: str = Field(min_length=1, max_length=400)
results: List[WebScrapeResultItem] results: List[WebScrapeResultItem]
total_count: int total_count: int

View file

@ -1,3 +1,4 @@
from typing import Optional
from modules.interfaces.interface_web_model import ( from modules.interfaces.interface_web_model import (
WebCrawlActionResult, WebCrawlActionResult,
WebSearchActionResult, WebSearchActionResult,
@ -11,9 +12,16 @@ from dataclasses import dataclass
from modules.connectors.connector_tavily import ConnectorTavily from modules.connectors.connector_tavily import ConnectorTavily
@dataclass @dataclass(slots=True)
class WebInterface: class WebInterface:
connector_tavily: ConnectorTavily = None 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 @classmethod
async def create(cls) -> "WebInterface": async def create(cls) -> "WebInterface":