From d848361cfd5bca03ff362f7a0f6a891b1dd0c2e6 Mon Sep 17 00:00:00 2001 From: arsam Date: Fri, 18 Sep 2026 23:06:19 +0330 Subject: [PATCH] Import source: axon/models Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality. --- axon/models.py | 185 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 axon/models.py diff --git a/axon/models.py b/axon/models.py new file mode 100644 index 0000000..bcdc0ac --- /dev/null +++ b/axon/models.py @@ -0,0 +1,185 @@ +from typing import Literal +from pydantic import BaseModel, Field + + +class SearchRequest(BaseModel): + query: str + max_results: int = Field(default=10, ge=1, le=20) + search_depth: Literal["basic", "advanced"] = "basic" + include_answer: bool = False + include_raw_content: bool = False + domains_whitelist: list[str] = [] + domains_blacklist: list[str] = [] + topic: Literal["general", "news"] = "general" + time_range: Literal["day", "week", "month", "year"] | None = None + include_private: bool = True + + +class SearchResult(BaseModel): + title: str + url: str + content: str + score: float = 0.5 + published_date: str | None = None + favicon: str | None = None + source_quality: float | None = None + + +class SearchResponse(BaseModel): + query: str + answer: str | None = None + results: list[SearchResult] + response_time: float + credits_used: int = 1 + + +class ExtractRequest(BaseModel): + urls: list[str] + include_images: bool = False + + +class ExtractResult(BaseModel): + url: str + title: str | None = None + content: str = "" + success: bool + error: str | None = None + + +class ExtractResponse(BaseModel): + results: list[ExtractResult] + + +class CrawlRequest(BaseModel): + url: str + max_depth: int = Field(default=1, ge=0, le=3) + max_pages: int = Field(default=20, ge=1, le=50) + include_raw_content: bool = False + instructions: str | None = None + + +class CrawlResult(BaseModel): + url: str + title: str | None = None + content: str = "" + links: list[str] = [] + depth: int = 0 + success: bool + error: str | None = None + + +class CrawlResponse(BaseModel): + start_url: str + results: list[CrawlResult] + response_time: float + + +class MapRequest(BaseModel): + url: str + max_depth: int = Field(default=1, ge=0, le=3) + max_pages: int = Field(default=50, ge=1, le=200) + instructions: str | None = None + + +class MapResponse(BaseModel): + start_url: str + urls: list[str] + response_time: float + + +class ResearchRequest(BaseModel): + query: str + depth: Literal["basic", "deep"] = "basic" + output_format: Literal["markdown", "json"] = "markdown" + search_depth: Literal["basic", "advanced"] = "advanced" + max_results_per_query: int = Field(default=5, ge=1, le=10) + + +class ResearchResponse(BaseModel): + query: str + report: str + sources: list[SearchResult] + sub_queries: list[str] + response_time: float + + +class MetricsResponse(BaseModel): + requests_total: int + requests_by_path: dict[str, int] + errors_total: int + average_latency_ms: float + + +class CitationValidationRequest(BaseModel): + report: str + sources: list[SearchResult] + + +class CitationValidationResponse(BaseModel): + citation_count: int + missing_citations: list[int] + valid: bool + + +class IngestDocument(BaseModel): + id: str | None = None + title: str + content: str + url: str | None = None + metadata: dict[str, str] = {} + + +class IngestRequest(BaseModel): + documents: list[IngestDocument] + + +class IngestResponse(BaseModel): + indexed: int + + +class IndexSearchRequest(BaseModel): + query: str + max_results: int = Field(default=10, ge=1, le=50) + + +class IndexDocument(BaseModel): + id: str + title: str + content: str + url: str | None = None + score: float + + +class IndexSearchResponse(BaseModel): + query: str + results: list[IndexDocument] + + +class JobCreateResponse(BaseModel): + job_id: str + status: Literal["queued", "running", "succeeded", "failed"] + + +class JobResponse(BaseModel): + job_id: str + kind: str + status: Literal["queued", "running", "succeeded", "failed"] + result: dict | None = None + error: str | None = None + + +class TavilySearchRequest(BaseModel): + query: str + search_depth: Literal["basic", "advanced"] = "basic" + max_results: int = Field(default=10, ge=1, le=20) + include_answer: bool | str = False + include_raw_content: bool = False + include_domains: list[str] = [] + exclude_domains: list[str] = [] + topic: Literal["general", "news"] = "general" + time_range: Literal["day", "week", "month", "year"] | None = None + + +class TavilyExtractRequest(BaseModel): + urls: str | list[str] + include_images: bool = False