m97j commited on
Commit
57578cb
ยท
1 Parent(s): c59e693

Initial commit

Browse files
Files changed (4) hide show
  1. app.py +9 -14
  2. config.py +12 -27
  3. models/download_models.py +0 -19
  4. 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
- EMOTION_MODEL_NAME = "tae898/emoberta-base-ko"
14
- FALLBACK_MODEL_NAME = "skt/ko-gpt-trinity-1.2B-v0.5"
15
- EMBEDDER_MODEL_NAME = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
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
- # Hugging Face Spaces serve URL (๊ณต๊ฐœ ์„ค์ •์ด๋ฏ€๋กœ ์ง์ ‘ ์ฃผ์†Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
4
- HF_SERVE_URL = os.getenv(
5
- "HF_SERVE_URL",
6
- "https://m97j-PersonaChatEngine.hf.space"
7
- )
8
 
9
- # ์š”์ฒญ ํƒ€์ž„์•„์›ƒ (์ดˆ ๋‹จ์œ„)
10
- HF_TIMEOUT = float(os.getenv("HF_TIMEOUT", "25"))
11
 
12
- # RAG ํ•ญ์ƒ ์‚ฌ์šฉ (ํ† ๊ธ€์ด ์•„๋‹ˆ๋ผ ๊ณ ์ • ์‚ฌ์šฉ)
13
- RAG_ENABLED = True
 
 
14
 
15
- # ์ƒ์„ฑ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ธฐ๋ณธ๊ฐ’ (์š”์ฒญ๋งˆ๋‹ค override ๊ฐ€๋Šฅ)
16
- GENERATION_CONFIG = {
17
- "max_new_tokens": int(os.getenv("GEN_MAX_NEW_TOKENS", "220")),
18
- "temperature": float(os.getenv("GEN_TEMPERATURE", "0.7")),
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))