hoon1018 commited on
Commit
a8c131d
ยท
verified ยท
1 Parent(s): 9fd445c

Create cinema.py

Browse files
Files changed (1) hide show
  1. apps/cinema.py +58 -0
apps/cinema.py ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import json
3
+ from fastapi import APIRouter, HTTPException
4
+ from pydantic import BaseModel
5
+ from huggingface_hub import InferenceClient
6
+
7
+ # ๋ผ์šฐํ„ฐ ์„ค์ •
8
+ router = APIRouter()
9
+
10
+ # HF ํ† ํฐ (Settings > Secrets์— HF_TOKEN ์ด ๋“ฑ๋ก๋˜์–ด ์žˆ์–ด์•ผ ํ•จ)
11
+ client = InferenceClient(api_key=os.getenv("HF_TOKEN"))
12
+
13
+ # ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ชจ๋ธ
14
+ class MovieRequest(BaseModel):
15
+ title: str
16
+ director: str
17
+ tmdb_md: str = ""
18
+
19
+ @router.post("/movie-info")
20
+ async def get_movie_info(req: MovieRequest):
21
+ try:
22
+ context = f"TMDB ์ •๋ณด:\n{req.tmdb_md}" if req.tmdb_md else "TMDB ์ •๋ณด๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค."
23
+
24
+ prompt = f"""
25
+ ๋‹น์‹ ์€ ์˜ํ™” ์ „๋ฌธ AI ๋น„์„œ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ [์ œ๊ณต๋œ ์ •๋ณด]๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ๋งŒ ๋‹ต๋ณ€ํ•˜์„ธ์š”.
26
+
27
+ [์ œ๊ณต๋œ ์ •๋ณด]
28
+ {context}
29
+
30
+ [์ž‘์„ฑ ๊ทœ์น™]
31
+ 1. "summary": ์˜ํ™” '{req.title}'(๊ฐ๋…:{req.director})์˜ ๋‚ด์šฉ์„ ํ•œ๊ตญ์–ด๋กœ 150์ž ์ด๋‚ด๋กœ ์š”์•ฝํ•  ๊ฒƒ. ๋‚ด์šฉ ์™œ๊ณก ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด 150์ž๋ฅผ ์ดˆ๊ณผํ•  ๊ฒƒ ๊ฐ™์œผ๋ฉด ๋’ท๋ถ€๋ถ„์„ 'ยทยทยท'์œผ๋กœ ์ƒ๋žตํ•  ๊ฒƒ.
32
+ 2. "ott": ํ•œ๊ตญ์—์„œ ์‹œ์ฒญ ๊ฐ€๋Šฅํ•œ OTT ํ”Œ๋žซํผ ์ด๋ฆ„๋งŒ ์‰ผํ‘œ๋กœ ๋‚˜์—ดํ•  ๊ฒƒ. (์—†์œผ๋ฉด "-")
33
+ 3. ๋ฐ˜๋“œ์‹œ ์•„๋ž˜ JSON ํ˜•์‹์œผ๋กœ๋งŒ ์ถœ๋ ฅํ•˜๊ณ  ๋‹ค๋ฅธ ์„ค๋ช…์€ ์ ˆ๋Œ€ ์ถ”๊ฐ€ํ•˜์ง€ ๋งˆ์„ธ์š”.
34
+
35
+ [์ถœ๋ ฅ ํ˜•์‹]
36
+ {{
37
+ "summary": "...",
38
+ "ott": "..."
39
+ }}
40
+ """
41
+
42
+ response = client.chat_completion(
43
+ model="Qwen/Qwen2.5-72B-Instruct",
44
+ messages=[{"role": "user", "content": prompt}],
45
+ max_tokens=300,
46
+ temperature=0.1
47
+ )
48
+
49
+ raw_result = response.choices[0].message.content.strip()
50
+
51
+ # ๋งˆํฌ๋‹ค์šด ์ฝ”๋“œ ๋ธ”๋ก(```json)์ด ๋ถ™์–ด ๋‚˜์˜ฌ ๊ฒฝ์šฐ ํ…์ŠคํŠธ ์ „์ฒ˜๋ฆฌ
52
+ if raw_result.startswith("```"):
53
+ raw_result = raw_result.strip("`").replace("json\n", "")
54
+
55
+ return json.loads(raw_result)
56
+
57
+ except Exception as e:
58
+ raise HTTPException(status_code=500, detail=str(e))