""" Pydantic data structure definitions for LLM structured output """ from pydantic import BaseModel, Field from typing import List, Optional class READMESummary(BaseModel): """Structured output for README summary""" project_overview: str = Field(description="One-sentence project overview") main_features: str = Field(description="Main features list (bullet points)") dependencies: str = Field(description="Dependencies and environment requirements") how_to_run: str = Field(description="How to run/install") directory_structure: str = Field(description="Directory structure highlights") scientific_computing_related: Optional[str] = Field( default=None, description="Scientific computing/chemistry related features (if any)" ) typical_input_output: Optional[str] = Field( default=None, description="Typical input/output examples (if any)" ) notes: Optional[str] = Field( default=None, description="Notes or special instructions" ) class FunctionInfo(BaseModel): """Function information""" function_name: str = Field(description="Function name") function_start_line: int = Field(description="Function start line number (1-indexed, inclusive)") function_end_line: int = Field(description="Function end line number (1-indexed, inclusive)") function_body: str = Field(description="Complete function code body") doc_start_line: Optional[int] = Field( default=None, description="Documentation comment start line number (if any, 1-indexed, inclusive)" ) doc_end_line: Optional[int] = Field( default=None, description="Documentation comment end line number (if any, 1-indexed, inclusive)" ) class FileParseResult(BaseModel): """Parse result for a single code file""" language: str = Field(description="Programming language (e.g., python, cpp, java)") file_path: str = Field(description="Relative file path") dependencies: List[str] = Field( default_factory=list, description="File-level dependency list (import/include/use/require, etc.)" ) functions: List[FunctionInfo] = Field( default_factory=list, description="List of all functions in the file" )