Garush65 commited on
Commit
ba1690d
·
verified ·
1 Parent(s): 3bb51de

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +82 -70
app.py CHANGED
@@ -1,70 +1,82 @@
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"]}
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ import os
7
+
8
+ # --- КОНФИГУРАЦИЯ МОДЕЛИ ---
9
+ # Qwen2.5-7B-Instruct (Умная, мощная, русский язык)
10
+ REPO_ID = "Qwen/Qwen2.5-7B-Instruct-GGUF"
11
+ FILENAME = "qwen2.5-7b-instruct-q4_k_m.gguf"
12
+
13
+ print(f"System: Начинаю загрузку модели {FILENAME}...")
14
+
15
+ # Скачиваем модель. Благодаря ENV HF_HOME в Dockerfile, она скачается в /app/cache
16
+ try:
17
+ model_path = hf_hub_download(
18
+ repo_id=REPO_ID,
19
+ filename=FILENAME
20
+ )
21
+ print(f"System: Модель готова по пути {model_path}")
22
+ except Exception as e:
23
+ print(f"CRITICAL ERROR: Не удалось скачать модель. {e}")
24
+ raise e
25
+
26
+ # --- ИНИЦИАЛИЗАЦИЯ LLM ---
27
+ print("System: Запуск нейросети в память...")
28
+ llm = Llama(
29
+ model_path=model_path,
30
+ n_ctx=8192, # Большой контекст
31
+ n_threads=4, # На HF Spaces обычно 2-4 vCPU
32
+ verbose=False # Меньше мусора в логах
33
+ )
34
+ print("System: Apex Engine готов к работе.")
35
+
36
+ # --- API ---
37
+ app = FastAPI()
38
+
39
+ app.add_middleware(
40
+ CORSMiddleware,
41
+ allow_origins=["*"],
42
+ allow_credentials=True,
43
+ allow_methods=["*"],
44
+ allow_headers=["*"],
45
+ )
46
+
47
+ class AnalysisRequest(BaseModel):
48
+ context: str
49
+ query: str
50
+
51
+ @app.get("/")
52
+ def home():
53
+ return {"status": "Apex Engine (7B Model) is Online", "space": "HuggingFace"}
54
+
55
+ @app.post("/analyze")
56
+ def analyze(req: AnalysisRequest):
57
+ # Строгий системный промпт для умных ответов
58
+ prompt = f"""<|im_start|>system
59
+ Ты — Apex, передовой аналитический ИИ.
60
+ Твоя задача: проанализировать контекст и дать подробный, логичный и обоснованный ответ на русском языке.
61
+ Используй академический стиль, но говори понятно.
62
+ <|im_end|>
63
+ <|im_start|>user
64
+ Контекст:
65
+ {req.context}
66
+
67
+ Вопрос:
68
+ {req.query}
69
+ <|im_end|>
70
+ <|im_start|>assistant
71
+ """
72
+
73
+ output = llm(
74
+ prompt,
75
+ max_tokens=1024,
76
+ temperature=0.3,
77
+ top_p=0.9,
78
+ stop=["<|im_end|>"],
79
+ echo=False
80
+ )
81
+
82
+ return {"result": output["choices"][0]["text"].strip()}