| from fastapi import FastAPI, HTTPException
|
| from pydantic import BaseModel
|
| from fastapi.staticfiles import StaticFiles
|
| from fastapi.middleware.cors import CORSMiddleware
|
| import os
|
| from agent.inference import InferenceEngine
|
| from model.config import ModelConfig
|
| import torch
|
|
|
| app = FastAPI()
|
|
|
|
|
| app.add_middleware(
|
| CORSMiddleware,
|
| allow_origins=["*"],
|
| allow_credentials=True,
|
| allow_methods=["*"],
|
| allow_headers=["*"],
|
| )
|
|
|
|
|
| agent = None
|
|
|
| class ChatRequest(BaseModel):
|
| message: str
|
| mode: str = "text"
|
|
|
| def get_agent():
|
| global agent
|
| if agent is None:
|
|
|
| if os.path.exists("sail.pt"):
|
| try:
|
| agent = InferenceEngine(model_path="sail.pt")
|
| print("Agent Model Loaded.")
|
| except Exception as e:
|
| print(f"Failed to load agent: {e}")
|
| return agent
|
|
|
| @app.post("/api/chat")
|
| async def chat(request: ChatRequest):
|
| global agent
|
| agent_instance = get_agent()
|
|
|
| if not agent_instance:
|
|
|
| agent_instance = get_agent()
|
| if not agent_instance:
|
|
|
| return {"response": "Model not trained yet! Please go to Settings and Train on a folder first."}
|
|
|
|
|
| prompt = request.message
|
| if request.mode == "code":
|
| prompt = "CODE:\n" + prompt
|
|
|
| response = agent_instance.generate(prompt, max_new_tokens=200, temperature=0.7)
|
| return {"response": response}
|
|
|
| class GrammarCheckRequest(BaseModel):
|
| text: str
|
|
|
| @app.post("/api/grammar/check")
|
| async def check_grammar(request: GrammarCheckRequest):
|
| """
|
| Check grammar using SpaCy-based Grammar Checker.
|
| Returns POS tags, dependencies, entities, and grammar issues.
|
| """
|
| try:
|
| from agent.grammar_checker import get_grammar_checker
|
| checker = get_grammar_checker()
|
| result = checker.analyze(request.text)
|
| return {"status": "success", "analysis": result}
|
| except Exception as e:
|
| return {"status": "error", "message": str(e)}
|
|
|
| @app.post("/api/grammar/quick")
|
| async def quick_grammar_check(request: GrammarCheckRequest):
|
| """Quick grammar check returning a formatted string."""
|
| try:
|
| from agent.grammar_checker import get_grammar_checker
|
| checker = get_grammar_checker()
|
| result = checker.check_sentence(request.text)
|
| return {"status": "success", "result": result}
|
| except Exception as e:
|
| return {"status": "error", "message": str(e)}
|
|
|
|
|
| app.mount("/", StaticFiles(directory="app/static", html=True), name="static") |