|
from pydantic import BaseModel, Field |
|
from typing import Any, List, Dict, Literal, Optional |
|
|
|
|
|
|
|
|
|
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: str |
|
|
|
url: str |
|
|
|
type: str |
|
|
|
|
|
class DownloadDocsRequest(BaseModel): |
|
documents: List[DocInfo] = Field( |
|
description="List of documents to download") |
|
|
|
|
|
|
|
|
|
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 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] |
|
|
|
|
|
|
|
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") |
|
|
|
|
|
|
|
|
|
|
|
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 = 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.") |
|
|
|
|
|
|
|
|
|
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): |
|
|
|
content: str |
|
|
|
topic_contents: list[dict] |
|
pass |
|
|