Spaces:
Sleeping
Sleeping
Initial commit
Browse files- app.py +9 -14
- config.py +12 -27
- models/download_models.py +0 -19
- models/model_loader.py +8 -8
app.py
CHANGED
|
@@ -8,33 +8,28 @@ from models.model_loader import load_emotion_model, load_fallback_model, load_em
|
|
| 8 |
from schemas import AskReq, AskRes
|
| 9 |
from pathlib import Path
|
| 10 |
from rag.rag_generator import set_embedder
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
# ์ ๋ ๊ฒฝ๋ก ๊ธฐ์ค ๋ชจ๋ธ ๋๋ ํ ๋ฆฌ ์ค์
|
| 18 |
-
BASE_DIR = Path(__file__).resolve().parent # ai_server/
|
| 19 |
-
EMOTION_MODEL_DIR = Path(os.getenv("EMOTION_MODEL_DIR", BASE_DIR / "models" / "emotion-classification-model"))
|
| 20 |
-
FALLBACK_MODEL_DIR = Path(os.getenv("FALLBACK_MODEL_DIR", BASE_DIR / "models" / "fallback-npc-model"))
|
| 21 |
-
EMBEDDER_MODEL_DIR = Path(os.getenv("EMBEDDER_MODEL_DIR", BASE_DIR / "models" / "sentence-embedder"))
|
| 22 |
|
| 23 |
|
| 24 |
@asynccontextmanager
|
| 25 |
async def lifespan(app: FastAPI):
|
| 26 |
# Emotion
|
| 27 |
-
emo_tokenizer, emo_model = load_emotion_model(EMOTION_MODEL_NAME, EMOTION_MODEL_DIR)
|
| 28 |
app.state.emotion_tokenizer = emo_tokenizer
|
| 29 |
app.state.emotion_model = emo_model
|
| 30 |
|
| 31 |
# Fallback
|
| 32 |
-
fb_tokenizer, fb_model = load_fallback_model(FALLBACK_MODEL_NAME, FALLBACK_MODEL_DIR)
|
| 33 |
app.state.fallback_tokenizer = fb_tokenizer
|
| 34 |
app.state.fallback_model = fb_model
|
| 35 |
|
| 36 |
# Embedder
|
| 37 |
-
embedder = load_embedder(EMBEDDER_MODEL_NAME, EMBEDDER_MODEL_DIR)
|
| 38 |
app.state.embedder = embedder
|
| 39 |
set_embedder(embedder) # ์ถ๊ฐ
|
| 40 |
|
|
|
|
| 8 |
from schemas import AskReq, AskRes
|
| 9 |
from pathlib import Path
|
| 10 |
from rag.rag_generator import set_embedder
|
| 11 |
+
from config import (
|
| 12 |
+
EMOTION_MODEL_NAME, EMOTION_MODEL_DIR,
|
| 13 |
+
FALLBACK_MODEL_NAME, FALLBACK_MODEL_DIR,
|
| 14 |
+
EMBEDDER_MODEL_NAME, EMBEDDER_MODEL_DIR,
|
| 15 |
+
HF_TOKEN, BASE_DIR
|
| 16 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
|
| 18 |
|
| 19 |
@asynccontextmanager
|
| 20 |
async def lifespan(app: FastAPI):
|
| 21 |
# Emotion
|
| 22 |
+
emo_tokenizer, emo_model = load_emotion_model(EMOTION_MODEL_NAME, EMOTION_MODEL_DIR, token=HF_TOKEN)
|
| 23 |
app.state.emotion_tokenizer = emo_tokenizer
|
| 24 |
app.state.emotion_model = emo_model
|
| 25 |
|
| 26 |
# Fallback
|
| 27 |
+
fb_tokenizer, fb_model = load_fallback_model(FALLBACK_MODEL_NAME, FALLBACK_MODEL_DIR, token=HF_TOKEN)
|
| 28 |
app.state.fallback_tokenizer = fb_tokenizer
|
| 29 |
app.state.fallback_model = fb_model
|
| 30 |
|
| 31 |
# Embedder
|
| 32 |
+
embedder = load_embedder(EMBEDDER_MODEL_NAME, EMBEDDER_MODEL_DIR, token=HF_TOKEN)
|
| 33 |
app.state.embedder = embedder
|
| 34 |
set_embedder(embedder) # ์ถ๊ฐ
|
| 35 |
|
config.py
CHANGED
|
@@ -1,32 +1,17 @@
|
|
|
|
|
| 1 |
import os
|
| 2 |
|
| 3 |
-
|
| 4 |
-
HF_SERVE_URL = os.getenv(
|
| 5 |
-
"HF_SERVE_URL",
|
| 6 |
-
"https://m97j-PersonaChatEngine.hf.space"
|
| 7 |
-
)
|
| 8 |
|
| 9 |
-
#
|
| 10 |
-
|
| 11 |
|
| 12 |
-
#
|
| 13 |
-
|
|
|
|
|
|
|
| 14 |
|
| 15 |
-
#
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
"top_p": float(os.getenv("GEN_TOP_P", "0.9")),
|
| 20 |
-
"repetition_penalty": float(os.getenv("GEN_REPETITION_PENALTY", "1.1")),
|
| 21 |
-
"do_sample": True
|
| 22 |
-
}
|
| 23 |
-
|
| 24 |
-
'''
|
| 25 |
-
# ๋ชจ๋ธ ์ ๋ณด (์ถํ ํ์ฅ ๊ฐ๋ฅ)
|
| 26 |
-
MODEL_INFO = {
|
| 27 |
-
"base_model": "meta-llama/Meta-Llama-3-8B",
|
| 28 |
-
"adapter": "m97j/PersonaAdapter-v1",
|
| 29 |
-
"serve_mode": "hf_spaces", # ๋๋ "local", "api"
|
| 30 |
-
}
|
| 31 |
-
|
| 32 |
-
'''
|
|
|
|
| 1 |
+
from pathlib import Path
|
| 2 |
import os
|
| 3 |
|
| 4 |
+
BASE_DIR = Path(__file__).resolve().parent # ai_server/
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
|
| 6 |
+
# Hugging Face Token
|
| 7 |
+
HF_TOKEN = os.getenv("HF_TOKEN")
|
| 8 |
|
| 9 |
+
# ๋ชจ๋ธ ์ด๋ฆ
|
| 10 |
+
EMOTION_MODEL_NAME = "tae898/emoberta-base-ko"
|
| 11 |
+
FALLBACK_MODEL_NAME = "skt/ko-gpt-trinity-1.2B-v0.5"
|
| 12 |
+
EMBEDDER_MODEL_NAME = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
|
| 13 |
|
| 14 |
+
# ๋ชจ๋ธ ๋๋ ํ ๋ฆฌ
|
| 15 |
+
EMOTION_MODEL_DIR = Path(os.getenv("EMOTION_MODEL_DIR", BASE_DIR / "models" / "emotion-classification-model"))
|
| 16 |
+
FALLBACK_MODEL_DIR = Path(os.getenv("FALLBACK_MODEL_DIR", BASE_DIR / "models" / "fallback-npc-model"))
|
| 17 |
+
EMBEDDER_MODEL_DIR = Path(os.getenv("EMBEDDER_MODEL_DIR", BASE_DIR / "models" / "sentence-embedder"))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
models/download_models.py
DELETED
|
@@ -1,19 +0,0 @@
|
|
| 1 |
-
import os
|
| 2 |
-
from transformers import AutoTokenizer, AutoModel
|
| 3 |
-
|
| 4 |
-
# Hugging Face token from secret file
|
| 5 |
-
with open("/run/secrets/HF_TOKEN", "r") as f:
|
| 6 |
-
token = f.read().strip()
|
| 7 |
-
|
| 8 |
-
models = {
|
| 9 |
-
'emotion': ('tae898/emoberta-base-ko', './models/emotion-classification-model'),
|
| 10 |
-
'fallback': ('skt/ko-gpt-trinity-1.2B-v0.5', './models/fallback-npc-model'),
|
| 11 |
-
'embedder': ('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2', './models/sentence-embedder')
|
| 12 |
-
}
|
| 13 |
-
|
| 14 |
-
for _, (_, path) in models.items():
|
| 15 |
-
os.makedirs(path, exist_ok=True)
|
| 16 |
-
|
| 17 |
-
for name, path in models.values():
|
| 18 |
-
AutoModel.from_pretrained(name, cache_dir=path, use_auth_token=token)
|
| 19 |
-
AutoTokenizer.from_pretrained(name, cache_dir=path, use_auth_token=token)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
models/model_loader.py
CHANGED
|
@@ -7,10 +7,10 @@ from transformers import (
|
|
| 7 |
from sentence_transformers import SentenceTransformer
|
| 8 |
|
| 9 |
|
| 10 |
-
def load_emotion_model(model_name: str, model_dir: Path):
|
| 11 |
if not model_dir.exists() or not any(model_dir.iterdir()):
|
| 12 |
-
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
|
| 13 |
-
model = AutoModelForSequenceClassification.from_pretrained(model_name, trust_remote_code=True)
|
| 14 |
tokenizer.save_pretrained(model_dir)
|
| 15 |
model.save_pretrained(model_dir)
|
| 16 |
|
|
@@ -19,10 +19,10 @@ def load_emotion_model(model_name: str, model_dir: Path):
|
|
| 19 |
return tokenizer, model
|
| 20 |
|
| 21 |
|
| 22 |
-
def load_fallback_model(model_name: str, model_dir: Path):
|
| 23 |
if not model_dir.exists() or not any(model_dir.iterdir()):
|
| 24 |
-
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
|
| 25 |
-
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)
|
| 26 |
tokenizer.save_pretrained(model_dir)
|
| 27 |
model.save_pretrained(model_dir)
|
| 28 |
|
|
@@ -31,9 +31,9 @@ def load_fallback_model(model_name: str, model_dir: Path):
|
|
| 31 |
return tokenizer, model
|
| 32 |
|
| 33 |
|
| 34 |
-
def load_embedder(model_name: str, model_dir: Path):
|
| 35 |
if not model_dir.exists() or not any(model_dir.iterdir()):
|
| 36 |
-
embedder = SentenceTransformer(model_name)
|
| 37 |
embedder.save(str(model_dir))
|
| 38 |
|
| 39 |
embedder = SentenceTransformer(str(model_dir))
|
|
|
|
| 7 |
from sentence_transformers import SentenceTransformer
|
| 8 |
|
| 9 |
|
| 10 |
+
def load_emotion_model(model_name: str, model_dir: Path, token: str = None):
|
| 11 |
if not model_dir.exists() or not any(model_dir.iterdir()):
|
| 12 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True, use_auth_token=token)
|
| 13 |
+
model = AutoModelForSequenceClassification.from_pretrained(model_name, trust_remote_code=True, use_auth_token=token)
|
| 14 |
tokenizer.save_pretrained(model_dir)
|
| 15 |
model.save_pretrained(model_dir)
|
| 16 |
|
|
|
|
| 19 |
return tokenizer, model
|
| 20 |
|
| 21 |
|
| 22 |
+
def load_fallback_model(model_name: str, model_dir: Path, token: str = None):
|
| 23 |
if not model_dir.exists() or not any(model_dir.iterdir()):
|
| 24 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True, use_auth_token=token)
|
| 25 |
+
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True, use_auth_token=token)
|
| 26 |
tokenizer.save_pretrained(model_dir)
|
| 27 |
model.save_pretrained(model_dir)
|
| 28 |
|
|
|
|
| 31 |
return tokenizer, model
|
| 32 |
|
| 33 |
|
| 34 |
+
def load_embedder(model_name: str, model_dir: Path, token: str = None):
|
| 35 |
if not model_dir.exists() or not any(model_dir.iterdir()):
|
| 36 |
+
embedder = SentenceTransformer(model_name, use_auth_token=token)
|
| 37 |
embedder.save(str(model_dir))
|
| 38 |
|
| 39 |
embedder = SentenceTransformer(str(model_dir))
|