Spaces:
Sleeping
Sleeping
from pydantic import BaseModel, Field | |
from typing import List, Optional | |
# Shared model schemas | |
class RequirementInfo(BaseModel): | |
"""Represents an extracted requirement info""" | |
context: str = Field(..., description="Context for the requirement.") | |
requirement: str = Field(..., description="The requirement itself.") | |
document: str = Field(..., | |
description="The document the requirement is extracted from.") | |
class ReqGroupingCategory(BaseModel): | |
"""Represents the category of requirements grouped together""" | |
id: int = Field(..., description="ID of the grouping category") | |
title: str = Field(..., description="Title given to the grouping category") | |
requirements: List[RequirementInfo] = Field( | |
..., description="List of grouped requirements") | |
class SolutionModel(BaseModel): | |
Context: str = Field(..., | |
description="Full context provided for this category.") | |
Requirements: List[str] = Field(..., | |
description="List of each requirement as string.") | |
Problem_Description: str = Field(..., alias="Problem Description", | |
description="Description of the problem being solved.") | |
Solution_Description: str = Field(..., alias="Solution Description", | |
description="Detailed description of the solution.") | |
References: list[dict] = Field( | |
..., description="References to documents used for the solution.") | |
Category_Id: int = Field( | |
..., description="ID of the requirements category the solution is based on") | |
class Config: | |
validate_by_name = True # Enables alias handling on input/output | |
# ============================================================= Categorize requirements endpoint | |
class ReqGroupingRequest(BaseModel): | |
"""Request schema of a requirement grouping call.""" | |
requirements: list[RequirementInfo] | |
max_n_categories: Optional[int] = Field( | |
default=None, description="Max number of categories to construct. Defaults to None") | |
class ReqGroupingResponse(BaseModel): | |
"""Response of a requirement grouping call.""" | |
categories: List[ReqGroupingCategory] | |
# INFO: keep in sync with prompt | |
class _ReqGroupingCategory(BaseModel): | |
title: str = Field(..., description="Title given to the grouping category") | |
items: list[int] = Field( | |
..., description="List of the IDs of the requirements belonging to the category.") | |
class _ReqGroupingOutput(BaseModel): | |
categories: list[_ReqGroupingCategory] = Field( | |
..., description="List of grouping categories") | |
# =========================================================== Criticize solution endpoint | |
class CriticizeSolutionsRequest(BaseModel): | |
solutions: list[SolutionModel] | |
class _SolutionCriticism(BaseModel): | |
technical_challenges: List[str] = Field( | |
..., description="Technical challenges encountered by the solution") | |
weaknesses: List[str] = Field(..., | |
description="Identified weaknesses of the solution") | |
limitations: List[str] = Field(..., | |
description="Identified limitations of the solution") | |
class _SolutionCriticismOutput(BaseModel): | |
criticisms: List[_SolutionCriticism] | |
# response format | |
class SolutionCriticism(BaseModel): | |
solution: SolutionModel | |
criticism: _SolutionCriticism | |
class CritiqueResponse(BaseModel): | |
critiques: List[SolutionCriticism] | |
# =================================================================== search solution response endpoint | |
class _SolutionSearchOutput(BaseModel): | |
solution: SolutionModel | |
class _SearchedSolutionModel(BaseModel): | |
""""Internal model used for solutions searched using gemini""" | |
requirement_ids: List[int] = Field(..., | |
description="List of each requirement ID addressed by the solution") | |
problem_description: str = Field(..., | |
description="Description of the problem being solved.") | |
solution_description: str = Field(..., | |
description="Detailed description of the solution.") | |
class SolutionSearchResponse(BaseModel): | |
"""Response model for solution search""" | |
solutions: list[SolutionModel] | |
# ================================================================ search solution endpoint v2 | |
class SolutionSearchV2Request(BaseModel): | |
"""Response of a requirement grouping call.""" | |
categories: List[ReqGroupingCategory] | |
user_constraints: Optional[str] = Field( | |
default=None, description="Additional user constraints to respect when generating the solutions.") | |
# ================================================================= refine solution endpoints | |
class _RefinedSolutionModel(BaseModel): | |
"""Internal model used for solution refining""" | |
problem_description: str = Field(..., | |
description="New description of the problem being solved.") | |
solution_description: str = Field(..., | |
description="New detailed description of the solution.") | |
# ================================================================= search solutions using insight finder endpoints | |
# Helpers to extract constraints for Insights Finder | |
class InsightFinderConstraintItem(BaseModel): | |
title: str | |
description: str | |
class InsightFinderConstraintsList(BaseModel): | |
constraints: list[InsightFinderConstraintItem] | |
# ================================================= | |
class Technology(BaseModel): | |
"""Represents a single technology entry with its details.""" | |
title: str | |
purpose: str | |
key_components: str | |
advantages: str | |
limitations: str | |
id: int | |
class TechnologyData(BaseModel): | |
"""Represents the top-level object containing a list of technologies.""" | |
technologies: List[Technology] | |