File size: 1,353 Bytes
01eaedc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# -*- coding: utf-8 -*-
"""Чистое REST API (№7): модель по HTTP — для интеграции с ботами/программами.

Запуск:
  venv/Scripts/python.exe api.py            # порт 8002
  venv/Scripts/python.exe api.py 9000       # свой порт

Эндпоинты:
  GET  /health                              -> {"ok": true, "brain": "..."}
  POST /generate {"prompt": "...", "backend": "deepseek"} -> {"text": "...", "backend": "..."}

Пример (curl):
  curl -X POST http://127.0.0.1:8002/generate -H "Content-Type: application/json" ^
       -d "{\"prompt\": \"напиши функцию суммы\", \"backend\": \"deepseek\"}"
"""
import sys

from fastapi import FastAPI
from pydantic import BaseModel

from brain import pick, generate

app = FastAPI(title="ZuperAI API")


class GenReq(BaseModel):
    prompt: str
    backend: str = None
    max_tokens: int = 1024


@app.get("/health")
def health():
    return {"ok": True, "brain": pick()}


@app.post("/generate")
def gen(req: GenReq):
    b = pick(req.backend)
    msgs = [{"role": "user", "content": req.prompt}]
    return {"text": generate(b, msgs, req.max_tokens), "backend": b}


if __name__ == "__main__":
    import uvicorn
    port = int(sys.argv[1]) if len(sys.argv) > 1 else 8002
    uvicorn.run(app, host="127.0.0.1", port=port)