Garush65 commited on
Commit
7e3b33d
·
verified ·
1 Parent(s): 3c5968a

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +24 -0
  2. app.py +70 -0
  3. requirements.txt +5 -0
Dockerfile ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Используем легкий Python
2
+ FROM python:3.10-slim
3
+
4
+ # Устанавливаем системные утилиты для сборки (нужно для llama.cpp)
5
+ RUN apt-get update && apt-get install -y \
6
+ build-essential \
7
+ cmake \
8
+ && rm -rf /var/lib/apt/lists/*
9
+
10
+ # Создаем папку приложения
11
+ WORKDIR /app
12
+
13
+ # Копируем список библиотек и ставим их
14
+ COPY requirements.txt .
15
+ RUN pip install --no-cache-dir -r requirements.txt
16
+
17
+ # Копируем код приложения
18
+ COPY . .
19
+
20
+ # Открываем порт 7860 (HuggingFace требует именно его!)
21
+ EXPOSE 7860
22
+
23
+ # Запускаем сервер
24
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
app.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from pydantic import BaseModel
3
+ from llama_cpp import Llama
4
+ from huggingface_hub import hf_hub_download
5
+ from fastapi.middleware.cors import CORSMiddleware
6
+
7
+ # 1. Скачиваем модель прямо при запуске сервера
8
+ # Qwen2.5-0.5B-Instruct (умная, понимает русский)
9
+ model_name = "Qwen/Qwen2.5-0.5B-Instruct-GGUF"
10
+ model_file = "qwen2.5-0.5b-instruct-q4_k_m.gguf" # Самая сбалансированная версия
11
+
12
+ print(f"Загрузка модели {model_file}...")
13
+ model_path = hf_hub_download(repo_id=model_name, filename=model_file)
14
+ print("Модель скачана:", model_path)
15
+
16
+ # 2. Инициализируем нейросеть
17
+ llm = Llama(
18
+ model_path=model_path,
19
+ n_ctx=4096, # Память контекста (статьи википедии влезут)
20
+ n_threads=2 # Количество ядер
21
+ )
22
+
23
+ # 3. Настройка FastAPI
24
+ app = FastAPI()
25
+
26
+ # Разрешаем запросы с твоего сайта (CORS)
27
+ app.add_middleware(
28
+ CORSMiddleware,
29
+ allow_origins=["*"], # Брат, для тестов пока можно всем (*), потом можешь ограничить
30
+ allow_credentials=True,
31
+ allow_methods=["*"],
32
+ allow_headers=["*"],
33
+ )
34
+
35
+ class AnalysisRequest(BaseModel):
36
+ context: str
37
+ query: str
38
+
39
+ @app.get("/")
40
+ def home():
41
+ return {"status": "Apex Brain is Running"}
42
+
43
+ @app.post("/analyze")
44
+ def analyze(req: AnalysisRequest):
45
+ # Промпт для Qwen (формат ChatML)
46
+ prompt = f"""<|im_start|>system
47
+ Ты — Apex, эпистемический движок. Твоя цель — проанализировать контекст и ответить на вопрос пользователя.
48
+ Отвечай кратко, емко, научно. Используй русский язык.
49
+ Если в тексте есть противоречия или белые пятна — укажи на них.
50
+ <|im_end|>
51
+ <|im_start|>user
52
+ Контекст:
53
+ {req.context}
54
+
55
+ Вопрос пользователя:
56
+ {req.query}
57
+ <|im_end|>
58
+ <|im_start|>assistant
59
+ """
60
+
61
+ # Генерация
62
+ output = llm(
63
+ prompt,
64
+ max_tokens=500, # Длина ответа
65
+ temperature=0.3, # Меньше галлюцинаций
66
+ stop=["<|im_end|>"],
67
+ echo=False
68
+ )
69
+
70
+ return {"result": output["choices"][0]["text"]}
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ pydantic
4
+ huggingface_hub
5
+ llama-cpp-python