limina-engine / app.py
sdawdsdw's picture
Update app.py
d75ec6b verified
Raw
History Blame Contribute Delete
2.51 kB
import spaces # Necesar pentru runtime-ul ZeroGPU
import gradio as gr
import json
from evaluator import evaluate_trajectories_batch
from report_generator import generate_ai_report
from database import verify_api_key_db, save_evaluation_to_db
import threading
# --- DUMMY FUNCTION PENTRU VALIDAREA ZERO-GPU LA PORNIRE ---
# Aceasta functie exista DOAR pentru a trece de verificarea HF la startup.
# Nu este apelata de API si NU consuma cota utilizatorilor.
@spaces.GPU
def _dummy_startup_check():
pass
# --- ENDPOINT-UL PRINCIPAL (RULEAZA 100% PE CPU, FARA COTA GPU) ---
def evaluate_trajectory_api(api_key: str, payload_json: str) -> str:
auth_ctx = verify_api_key_db(api_key)
if not auth_ctx:
return json.dumps({"error": "Access Denied. Invalid API Key.", "status_code": 403})
if auth_ctx.get("quota_exceeded"):
return json.dumps({
"error": f"Monthly Quota Exceeded ({auth_ctx['usage']}/{auth_ctx['limit']}). Upgrade to Pro.",
"status_code": 429
})
try:
raw_payload = json.loads(payload_json)
except Exception as e:
return json.dumps({"error": f"Malformed JSON: {e}", "status_code": 400})
# AFLAM PLANUL UTILIZATORULUI DIN SUPABASE (ex: "free" sau "pro")
user_plan = auth_ctx.get("plan", "free")
# Trimitem planul catre functia de evaluare
report = evaluate_trajectories_batch(raw_payload, "standard", False, plan=user_plan)
# Daca a depasit limita de pasi pe free tier, returnam eroarea
if "error" in report:
return json.dumps(report)
ai_markdown = generate_ai_report(report)
report["narrative_report"] = ai_markdown
if auth_ctx.get("project_id"):
t = threading.Thread(
target=save_evaluation_to_db,
args=(auth_ctx["project_id"], report),
daemon=True
)
t.start()
return json.dumps(report)
with gr.Blocks(title="Limina AI Engine") as demo:
gr.Markdown("# Limina AI — Cognitive Trajectory Engine API")
api_key_input = gr.Textbox(label="API Key", type="password")
payload_input = gr.Textbox(label="Trajectory JSON", lines=6)
output_json = gr.Textbox(label="Diagnostic Report JSON", lines=10)
submit_btn = gr.Button("Evaluate")
# Apelam doar functia de CPU
submit_btn.click(
fn=evaluate_trajectory_api,
inputs=[api_key_input, payload_input],
outputs=output_json,
api_name="evaluate"
)
if __name__ == "__main__":
demo.launch()