from fastapi import FastAPI from pydantic import BaseModel from typing import List, Literal app = FastAPI(title="Python AI Stub") class Cursor(BaseModel): l: int c: int class Viewport(BaseModel): start: int end: int text: str class Diagnostic(BaseModel): l: int sev: str msg: str class Memory(BaseModel): short: List[str] = [] sess: List[str] = [] proj: List[str] = [] class Inp(BaseModel): intent: str file: str lang: str cursor: Cursor viewport: Viewport diag: List[Diagnostic] = [] term: str = "" mem: Memory = Memory() class Need(BaseModel): function: bool = False xrefs: List[str] = [] page_ids: List[str] = [] class Out(BaseModel): mode: Literal["patch","full","ask"] patch: str = "" full_text: str = "" explanation: str = "" confidence: float = 0.9 need: Need = Need() @app.post("/code_help", response_model=Out) def code_help(x: Inp): before = x.viewport.text if "print(reslt)" in before: after = before.replace("print(reslt)","print(result)",1) h_start = x.viewport.start h_count = x.viewport.end - x.viewport.start + 1 patch = f"--- a/{x.file}\n+++ b/{x.file}\n@@ -{h_start},{h_count} +{h_start},{h_count} @@\n-{before}\n+{after}\n" return Out(mode="patch", patch=patch, full_text="", explanation="Fixed misspelling: reslt -> result.", confidence=0.96) return Out(mode="ask", explanation="Need more context.", confidence=0.6)