Spaces:
Sleeping
Sleeping
| from pydantic import BaseModel, Field | |
| from typing import Any, List, Dict, Literal, Optional | |
| # --------------------------------------- Document related endpoints --------------------------------------- | |
| class GetMeetingsRequest(BaseModel): | |
| working_group: Literal["SA1", "SA2", "SA3", "SA4", "SA5", "SA6", | |
| "CT1", "CT2", "CT3", "CT4", "CT5", "CT6", "RAN1", "RAN2"] | |
| class GetMeetingsResponse(BaseModel): | |
| meetings: Dict[str, str] = Field( | |
| ..., description="Mapping of meetings with as key their display name and value the FTP meeting name.") | |
| class GetMeetingDocsRequest(BaseModel): | |
| working_group: str | |
| meeting: str | |
| class GetMeetingDocsResponse(BaseModel): | |
| data: List[Dict[Any, Any]] | |
| class DocInfo(BaseModel): | |
| """ | |
| Schema for describing a document to download. | |
| """ | |
| # Document name | |
| document: str | |
| # Document URL | |
| url: str | |
| # Document type | |
| type: str | |
| # Agenda item this document belongs to. | |
| agenda_item: str | |
| class DownloadDocsRequest(BaseModel): | |
| documents: List[DocInfo] = Field( | |
| description="List of documents to download") | |
| sort_by_agenda_item: bool = Field(default=False, description="Whether to sort the files by their agenda item.") | |
| # -------------------------------------- | |
| class ExtractRequirementsRequest(BaseModel): | |
| documents: List[DocInfo] | |
| class DocRequirements(BaseModel): | |
| document: str | |
| context: str | |
| requirements: List[str] | |
| class ExtractRequirementsResponse(BaseModel): | |
| requirements: List[DocRequirements] | |
| # -------------------------------------- | |
| class RequirementInfo(BaseModel): | |
| req_id: int = Field(..., description="The ID of this requirement") | |
| 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 ReqSearchLLMResponse(BaseModel): | |
| selected: List[int] | |
| class ReqSearchRequest(BaseModel): | |
| query: str | |
| requirements: List[RequirementInfo] | |
| class ReqSearchResponse(BaseModel): | |
| requirements: List[RequirementInfo] | |
| # -------------------------------------- | |
| 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 covered by the solution as a string.") | |
| problem_description: str = Field(..., | |
| description="Description of the problem being solved.") | |
| solution_description: str = Field(..., | |
| 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") | |
| disable_sort_checks: bool = Field(default=False, description="Disable sort checks when grouping requirements") | |
| 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") | |
| # =================================================================== bootstrap solution response | |
| # Helpers for integration with insights finder. | |
| class InsightFinderConstraintItem(BaseModel): | |
| title: str | |
| description: str | |
| class InsightFinderConstraintsList(BaseModel): | |
| constraints: list[InsightFinderConstraintItem] | |
| # TODO: aller voir la doc, breakage API | |
| class Technology(BaseModel): | |
| """Represents a single technology entry with its details.""" | |
| title: str = Field(..., alias="name") | |
| purpose: str | |
| advantages: str | |
| limitations: str | |
| class TechnologyData(BaseModel): | |
| """Represents the top-level object containing a list of technologies.""" | |
| technologies: List[Technology] | |
| class _SolutionBootstrapOutput(BaseModel): | |
| solution: SolutionModel | |
| class _BootstrappedSolutionModel(BaseModel): | |
| """"Internal model used for solutions bootstrapped using """ | |
| 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 SolutionBootstrapResponse(BaseModel): | |
| """Response model for solution bootstrapping""" | |
| solutions: list[SolutionModel] | |
| class SolutionBootstrapRequest(BaseModel): | |
| categories: List[ReqGroupingCategory] | |
| user_constraints: Optional[str] = Field( | |
| default=None, description="Additional user constraints to respect when generating the solutions.") | |
| # =========================================================== 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] | |
| class SolutionCriticism(BaseModel): | |
| solution: SolutionModel | |
| criticism: _SolutionCriticism | |
| class CritiqueResponse(BaseModel): | |
| critiques: List[SolutionCriticism] | |
| # ========================================================================== | |
| class _RefinedSolutionModel(BaseModel): | |
| """Internal model used for bootstrapped 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.") | |
| # =========================================================================== | |
| class PriorArtSearchRequest(BaseModel): | |
| topics: list[str] = Field( | |
| ..., description="The list of topics to search for to create an exhaustive prior art search for a problem draft.") | |
| mode: Literal['prior_art', 'fto'] = Field(default="fto", description="") | |
| class PriorArtSearchResponse(BaseModel): | |
| # Final consolidation report contents | |
| content: str | |
| # Individual search topic contents | |
| topic_contents: list[dict] | |
| pass | |