apex-engine / app.py
Garush65's picture
Update app.py
4f9fa8f verified
raw
history blame
2.91 kB
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from llama_cpp import Llama
from huggingface_hub import hf_hub_download
from fastapi.middleware.cors import CORSMiddleware
import os
# --- НАСТРОЙКА "МАЛЕНЬКОГО МОНСТРА" ---
# Qwen 2.5 3B - Идеальный баланс. Легкая, но очень умная.
REPO_ID = "bartowski/Qwen2.5-3B-Instruct-GGUF"
FILENAME = "Qwen2.5-3B-Instruct-Q4_K_M.gguf"
print(f"System: Начинаю загрузку {FILENAME}...")
try:
model_path = hf_hub_download(repo_id=REPO_ID, filename=FILENAME)
print(f"System: Модель готова: {model_path}")
except Exception as e:
print(f"CRITICAL: Не удалось скачать модель: {e}")
raise e
# --- ЗАПУСК МОЗГА ---
print("System: Загрузка в память...")
# Так как модель легкая (3B), мы можем дать ей БОЛЬШЕ памяти под контекст (4096)
llm = Llama(
model_path=model_path,
n_ctx=4096, # Большое окно памяти (влезет много текста)
n_threads=4, # Используем все ядра
verbose=False
)
print("System: Apex Engine (Fast Mode) готов.")
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
class AnalysisRequest(BaseModel):
context: str
query: str
@app.get("/")
def home():
return {"status": "Apex Engine is Running", "model": "Qwen 2.5 3B (Fast & Smart)"}
@app.post("/analyze")
def analyze(req: AnalysisRequest):
print(f"Запрос: {req.query[:50]}...")
# Системный промпт - говорим ей быть умной
prompt = f"""<|im_start|>system
Ты — Apex, умный аналитический помощник.
Твоя задача: внимательно прочитать контекст и дать точный ответ на вопрос пользователя на русском языке.
Не выдумывай факты, используй только предоставленный контекст и свои знания.
<|im_end|>
<|im_start|>user
Контекст:
{req.context}
Вопрос:
{req.query}
<|im_end|>
<|im_start|>assistant
"""
try:
output = llm(
prompt,
max_tokens=700, # Длинный ответ разрешен
temperature=0.3, # Креативность в меру
stop=["<|im_end|>"],
echo=False
)
result_text = output["choices"][0]["text"].strip()
return {"result": result_text}
except Exception as e:
print(f"ERROR: {e}")
raise HTTPException(status_code=500, detail="Ошибка обработки запроса")