GgaammGo commited on
Commit
d8e81ba
Β·
verified Β·
1 Parent(s): d266939

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -18
app.py CHANGED
@@ -14,24 +14,46 @@ HF_TOKEN = os.environ.get("HF_TOKEN", None)
14
  client = InferenceClient(token=HF_TOKEN)
15
 
16
 
17
- # ── λŒ€ν™” ν…μŠ€νŠΈ 생성 ν•¨μˆ˜ (OpenAI ν˜Έν™˜ chat.completions 방식) ───────────────
18
- def predict_chat(message: str, history: list):
19
- # 1. Gradio νžˆμŠ€ν† λ¦¬(messages ν˜•μ‹)λ₯Ό OpenAI ν˜Έν™˜ messages λ°°μ—΄λ‘œ λ³€ν™˜
 
 
 
 
 
 
 
20
  messages = []
21
- if history:
22
- for turn in history:
23
- if isinstance(turn, dict):
24
- role = turn.get("role", "user")
25
- content = turn.get("content", "")
26
- else:
27
- role = getattr(turn, "role", "user")
28
- content = getattr(turn, "content", "")
29
- # Gemma 4λŠ” assistant/model 두 ν‘œκΈ°λ₯Ό ν˜Όμš©ν•˜μ§€ μ•Šκ³ 
30
- # OpenAI ν‘œμ€€μΈ "assistant"둜 ν†΅μΌν•΄μ„œ 보내야 ν•©λ‹ˆλ‹€.
31
- if role == "model":
32
- role = "assistant"
33
- messages.append({"role": role, "content": content})
 
 
 
 
 
 
 
 
 
34
 
 
 
 
 
 
 
35
  messages.append({"role": "user", "content": message})
36
 
37
  try:
@@ -61,14 +83,15 @@ def predict_chat(message: str, history: list):
61
  with gr.Blocks() as demo:
62
  gr.Markdown(f"# πŸ€– GS-AI API Server (Gemma 4 Mode)\nModel: `{MODEL_ID}`")
63
 
64
- chatbot_ui = gr.Chatbot(height=480, type="messages")
 
 
65
  textbox_ui = gr.Textbox(placeholder="λ©”μ‹œμ§€λ₯Ό μž…λ ₯ν•˜μ„Έμš”...")
66
 
67
  gr.ChatInterface(
68
  fn=predict_chat,
69
  chatbot=chatbot_ui,
70
  textbox=textbox_ui,
71
- type="messages",
72
  api_name="chat", # μ™ΈλΆ€ 연동을 μœ„ν•œ /chat 경둜 λͺ…μ‹œ ν™œμ„±ν™”
73
  )
74
 
 
14
  client = InferenceClient(token=HF_TOKEN)
15
 
16
 
17
+ # ── Gradio 버전에 따라 history ν˜•μ‹μ΄ λ‹€λ₯΄λ―€λ‘œ 두 ν˜•μ‹ λͺ¨λ‘ 지원 ────────────
18
+ def _normalize_history(history: list) -> list:
19
+ """historyλŠ” Gradio 버전에 따라
20
+ - μ‹ ν˜•(messages) ν˜•μ‹: [{"role": "user", "content": "..."}, ...]
21
+ - κ΅¬ν˜•(tuples) ν˜•μ‹: [["user λ©”μ‹œμ§€", "bot λ©”μ‹œμ§€"], ...]
22
+ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ λ“€μ–΄μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€. μ–΄λ–€ ν˜•μ‹μ΄ 와도 OpenAI ν˜Έν™˜
23
+ messages λ°°μ—΄λ‘œ ν†΅μΌν•΄μ„œ λ°˜ν™˜ν•©λ‹ˆλ‹€. (νŠΉμ • Gradio 버전에 μ˜μ‘΄ν•˜μ§€
24
+ μ•ŠκΈ° μœ„ν•΄, gr.Chatbot/gr.ChatInterface 생성 μ‹œ type 인자λ₯Ό μ§€μ •ν•˜μ§€
25
+ μ•Šκ³  이 ν•¨μˆ˜μ—μ„œ ν‘μˆ˜ν•©λ‹ˆλ‹€.)
26
+ """
27
  messages = []
28
+ if not history:
29
+ return messages
30
+
31
+ for turn in history:
32
+ if isinstance(turn, dict):
33
+ role = turn.get("role", "user")
34
+ content = turn.get("content", "")
35
+ elif isinstance(turn, (list, tuple)) and len(turn) == 2:
36
+ user_msg, bot_msg = turn
37
+ if user_msg:
38
+ messages.append({"role": "user", "content": user_msg})
39
+ if bot_msg:
40
+ messages.append({"role": "assistant", "content": bot_msg})
41
+ continue
42
+ else:
43
+ role = getattr(turn, "role", "user")
44
+ content = getattr(turn, "content", "")
45
+
46
+ # Gemma 4λŠ” OpenAI ν‘œμ€€μΈ "assistant"둜 ν†΅μΌν•΄μ„œ 보내야 ν•©λ‹ˆλ‹€.
47
+ if role == "model":
48
+ role = "assistant"
49
+ messages.append({"role": role, "content": content})
50
 
51
+ return messages
52
+
53
+
54
+ # ── λŒ€ν™” ν…μŠ€νŠΈ 생성 ν•¨μˆ˜ (OpenAI ν˜Έν™˜ chat.completions 방식) ───────────────
55
+ def predict_chat(message: str, history: list):
56
+ messages = _normalize_history(history)
57
  messages.append({"role": "user", "content": message})
58
 
59
  try:
 
83
  with gr.Blocks() as demo:
84
  gr.Markdown(f"# πŸ€– GS-AI API Server (Gemma 4 Mode)\nModel: `{MODEL_ID}`")
85
 
86
+ # type 인자λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•„, μ„€μΉ˜λœ Gradio 버전이 무엇이든
87
+ # (κ΅¬ν˜• tuples 기본값이든 μ‹ ν˜• messages 기본값이든) 였λ₯˜ 없이 λ™μž‘ν•©λ‹ˆλ‹€.
88
+ chatbot_ui = gr.Chatbot(height=480)
89
  textbox_ui = gr.Textbox(placeholder="λ©”μ‹œμ§€λ₯Ό μž…λ ₯ν•˜μ„Έμš”...")
90
 
91
  gr.ChatInterface(
92
  fn=predict_chat,
93
  chatbot=chatbot_ui,
94
  textbox=textbox_ui,
 
95
  api_name="chat", # μ™ΈλΆ€ 연동을 μœ„ν•œ /chat 경둜 λͺ…μ‹œ ν™œμ„±ν™”
96
  )
97