chore: type checking; input validation for web interface
This commit is contained in:
parent
cfc83a7f42
commit
017b7f1ca0
2 changed files with 22 additions and 14 deletions
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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":
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue