everydayconversify commited on
Commit
ab57525
Β·
verified Β·
1 Parent(s): ee22dcb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -2
app.py CHANGED
@@ -1,13 +1,19 @@
 
 
1
  import torch
2
  from fastapi import FastAPI
3
  from pydantic import BaseModel
4
  from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
5
  import uvicorn
6
 
 
7
  app = FastAPI()
8
 
 
 
9
  MODEL_ID = "Qwen/Qwen1.5-1.8B-Chat"
10
 
 
11
  tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
12
  model = AutoModelForCausalLM.from_pretrained(
13
  MODEL_ID,
@@ -15,21 +21,27 @@ model = AutoModelForCausalLM.from_pretrained(
15
  device_map="auto",
16
  )
17
 
 
18
  pipe = pipeline(
19
  "text-generation",
20
  model=model,
21
  tokenizer=tokenizer,
22
  )
23
 
 
 
24
  class TranslationRequest(BaseModel):
25
  text: str
26
- target_lang: str
27
 
 
 
28
  @app.post("/translate")
29
  async def translate(request: TranslationRequest):
30
  korean_text = request.text
31
  target_lang = request.target_lang
32
 
 
33
  if target_lang == 'english':
34
  prompt = f"Translate the following Korean sentence into natural, everyday English. Provide only the translated sentence, without any additional explanations or quotation marks.\n\nKorean: \"{korean_text}\"\n\nEnglish:"
35
  elif target_lang == 'japanese':
@@ -37,10 +49,12 @@ async def translate(request: TranslationRequest):
37
  else:
38
  return {"error": "Invalid target language"}
39
 
 
40
  messages = [
41
  {"role": "user", "content": prompt}
42
  ]
43
-
 
44
  outputs = pipe(
45
  messages,
46
  max_new_tokens=150,
@@ -49,11 +63,15 @@ async def translate(request: TranslationRequest):
49
  top_k=50,
50
  )
51
 
 
52
  generated_text = outputs[0]["generated_text"]
 
53
  translated_text = generated_text.split("assistant\n")[-1].strip()
54
 
 
55
  return {"translated_text": translated_text}
56
 
 
57
  @app.get("/")
58
  def read_root():
59
  return {"message": "Translation API is running"}
 
1
+ # app.py
2
+
3
  import torch
4
  from fastapi import FastAPI
5
  from pydantic import BaseModel
6
  from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
7
  import uvicorn
8
 
9
+ # 1. FastAPI μ•± μΈμŠ€ν„΄μŠ€ 생성
10
  app = FastAPI()
11
 
12
+ # 2. AI λͺ¨λΈκ³Ό ν† ν¬λ‚˜μ΄μ €λ₯Ό μ•± μ‹œμž‘ μ‹œ ν•œλ²ˆλ§Œ λ‘œλ”© (맀우 μ€‘μš”!)
13
+ # μš”μ²­μ΄ 올 λ•Œλ§ˆλ‹€ λ‘œλ”©ν•˜λ©΄ μ„œλ²„κ°€ 터져버릴 κ±°μ•Ό.
14
  MODEL_ID = "Qwen/Qwen1.5-1.8B-Chat"
15
 
16
+ # λ©”λͺ¨λ¦¬ νš¨μœ¨μ„ μœ„ν•΄ bfloat16 μ‚¬μš©ν•˜κ³ , accelerate 라이브러리둜 ν•˜λ“œμ›¨μ–΄ μžλ™ ν• λ‹Ή
17
  tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
18
  model = AutoModelForCausalLM.from_pretrained(
19
  MODEL_ID,
 
21
  device_map="auto",
22
  )
23
 
24
+ # Transformers 라이브러리의 pipeline을 μ‚¬μš©ν•˜λ©΄ μ½”λ“œκ°€ 더 κ°„κ²°ν•΄μ Έ.
25
  pipe = pipeline(
26
  "text-generation",
27
  model=model,
28
  tokenizer=tokenizer,
29
  )
30
 
31
+ # 3. μš”μ²­ λ³Έλ¬Έ(Request Body)의 데이터 ν˜•μ‹μ„ μ§€μ •
32
+ # ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ "text"λΌλŠ” 킀에 λ²ˆμ—­ν•  λ¬Έμž₯을 λ‹΄μ•„μ„œ 보내야 ν•œλ‹€λŠ” κ·œμΉ™.
33
  class TranslationRequest(BaseModel):
34
  text: str
35
+ target_lang: str # 'english' λ˜λŠ” 'japanese'
36
 
37
+ # 4. API μ—”λ“œν¬μΈνŠΈ(Endpoint) 생성
38
+ # "/translate" λΌλŠ” μ£Όμ†Œλ‘œ POST μš”μ²­μ΄ 듀어왔을 λ•Œ 이 ν•¨μˆ˜κ°€ 싀행돼.
39
  @app.post("/translate")
40
  async def translate(request: TranslationRequest):
41
  korean_text = request.text
42
  target_lang = request.target_lang
43
 
44
+ # ν”„λ‘¬ν”„νŠΈ μ—”μ§€λ‹ˆμ–΄λ§: λͺ¨λΈμ—κ²Œ μ›ν•˜λŠ” 결과물을 λͺ…ν™•ν•˜κ²Œ μ§€μ‹œ
45
  if target_lang == 'english':
46
  prompt = f"Translate the following Korean sentence into natural, everyday English. Provide only the translated sentence, without any additional explanations or quotation marks.\n\nKorean: \"{korean_text}\"\n\nEnglish:"
47
  elif target_lang == 'japanese':
 
49
  else:
50
  return {"error": "Invalid target language"}
51
 
52
+ # Gemma/Qwen 같은 챗봇 λͺ¨λΈμ„ μœ„ν•œ λŒ€ν™” ν˜•μ‹
53
  messages = [
54
  {"role": "user", "content": prompt}
55
  ]
56
+
57
+ # νŒŒμ΄ν”„λΌμΈμœΌλ‘œ ν…μŠ€νŠΈ 생성 μ‹€ν–‰
58
  outputs = pipe(
59
  messages,
60
  max_new_tokens=150,
 
63
  top_k=50,
64
  )
65
 
66
+ # κ²°κ³Όλ¬Όμ—μ„œ ν•„μš”ν•œ λΆ€λΆ„λ§Œ μΆ”μΆœ
67
  generated_text = outputs[0]["generated_text"]
68
+ # 'assistant\n' λ‹€μŒμ— μ˜€λŠ” μ‹€μ œ λ²ˆμ—­ 결과만 κΉ”λ”ν•˜κ²Œ μž˜λΌλ‚΄κΈ°
69
  translated_text = generated_text.split("assistant\n")[-1].strip()
70
 
71
+ # 5. ν”„λ‘ νŠΈμ—”λ“œμ— λ²ˆμ—­λœ ν…μŠ€νŠΈλ₯Ό JSON ν˜•νƒœλ‘œ λ°˜ν™˜
72
  return {"translated_text": translated_text}
73
 
74
+ # μ„œλ²„κ°€ 잘 μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•œ κΈ°λ³Έ μ£Όμ†Œ
75
  @app.get("/")
76
  def read_root():
77
  return {"message": "Translation API is running"}