|
|
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) |