Spaces:
Sleeping
Sleeping
File size: 3,768 Bytes
266d7bc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
from pydantic import BaseModel, Field
# -----------------------
# Core search result model
# -----------------------
class SearchResult(BaseModel):
title: str = Field(default="", description="Title of the article")
feed_author: str | None = Field(default=None, description="Author of the article")
feed_name: str | None = Field(default=None, description="Name of the feed/newsletter")
article_author: list[str] | None = Field(default=None, description="List of article authors")
url: str | None = Field(default=None, description="URL of the article")
chunk_text: str | None = Field(default=None, description="Text content of the article chunk")
score: float = Field(default=0.0, description="Relevance score of the article")
# -----------------------
# Unique titles request/response
# -----------------------
class UniqueTitleRequest(BaseModel):
query_text: str = Field(default="", description="The user query text")
feed_author: str | None = Field(default=None, description="Filter by author name")
feed_name: str | None = Field(default=None, description="Filter by feed/newsletter name")
article_author: list[str] | None = Field(default=None, description="List of article authors")
title_keywords: str | None = Field(
default=None, description="Keywords or phrase to match in title"
)
limit: int = Field(default=5, description="Number of results to return")
class UniqueTitleResponse(BaseModel):
results: list[SearchResult] = Field(
default_factory=list, description="List of unique title search results"
)
# -----------------------
# Ask request model
# -----------------------
class AskRequest(BaseModel):
query_text: str = Field(default="", description="The user query text")
feed_author: str | None = Field(default=None, description="Filter by author name")
feed_name: str | None = Field(default=None, description="Filter by feed/newsletter name")
article_author: list[str] | None = Field(default=None, description="List of article authors")
title_keywords: str | None = Field(
default=None, description="Keywords or phrase to match in title"
)
limit: int = Field(default=5, description="Number of results to return")
provider: str = Field(default="OpenRouter", description="The provider to use for the query")
model: str | None = Field(
default=None, description="The specific model to use for the provider, if applicable"
)
# -----------------------
# Ask response model
# -----------------------
class AskResponse(BaseModel):
query: str = Field(default="", description="The original query text")
provider: str = Field(default="", description="The LLM provider used for generation")
answer: str = Field(default="", description="Generated answer from the LLM")
sources: list[SearchResult] = Field(
default_factory=list, description="List of source documents used in generation"
)
model: str | None = Field(
default=None, description="The specific model used by the provider, if available"
)
finish_reason: str | None = Field(
default=None, description="The reason why the generation finished, if available"
)
# -----------------------
# Streaming "response" documentation
# -----------------------
class AskStreamingChunk(BaseModel):
delta: str = Field(default="", description="Partial text generated by the LLM")
class AskStreamingResponse(BaseModel):
query: str = Field(default="", description="The original query text")
provider: str = Field(default="", description="The LLM provider used for generation")
chunks: list[AskStreamingChunk] = Field(
default_factory=list, description="Streamed chunks of generated text"
)
|