models.py•1.68 kB
"""Data models for grocery search."""
from typing import Optional, List
from pydantic import BaseModel, Field
class GroceryProduct(BaseModel):
"""Represents a grocery product with price and nutrition information."""
name: str = Field(description="Product name")
brand: Optional[str] = Field(default=None, description="Brand name")
price: Optional[float] = Field(default=None, description="Price in USD")
size: Optional[str] = Field(default=None, description="Package size/weight")
protein_g: Optional[float] = Field(default=None, description="Protein content in grams")
calories: Optional[int] = Field(default=None, description="Calories per serving")
store: str = Field(description="Store name")
url: Optional[str] = Field(default=None, description="Product URL")
protein_per_dollar: Optional[float] = Field(default=None, description="Protein grams per dollar")
macros_missing: bool = Field(default=False, description="Whether macro information is missing")
class SearchRequest(BaseModel):
"""Request model for grocery search."""
query: str = Field(description="Food or product name to search for")
store: str = Field(default="trader_joes", description="Store to search")
class SearchResponse(BaseModel):
"""Response model for grocery search."""
products: List[GroceryProduct] = Field(description="List of matching products")
query: str = Field(description="Original search query")
store: str = Field(description="Store searched")
stale: bool = Field(default=False, description="Whether data is stale")
total_found: int = Field(description="Total number of products found")