Reqxtract-API / schemas.py
Lucas ARRIESSE
Finish criticize_solutions endpoint
f6a7399
raw
history blame
2.66 kB
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
Requirements: List[str]
ProblemDescription: str
SolutionDescription: str
References: Optional[str] = ""
# 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]