Spaces:
Runtime error
Runtime error
| 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 | |
| def home(): | |
| return {"status": "Apex Engine is Running", "model": "Qwen 2.5 3B (Fast & Smart)"} | |
| 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="Ошибка обработки запроса") |