dongchan21 commited on
Commit
0c36a84
ยท
verified ยท
1 Parent(s): 7dca1f6

Upload 5 files

Browse files
Files changed (5) hide show
  1. Dockerfile +26 -0
  2. inspect_vector_db.py +12 -0
  3. main.py +38 -0
  4. models.py +17 -0
  5. requirements.txt +11 -0
Dockerfile ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python 3.9 ์Šฌ๋ฆผ ๋ฒ„์ „ ์‚ฌ์šฉ
2
+ FROM python:3.9-slim
3
+
4
+ # ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
5
+ WORKDIR /app
6
+
7
+ # ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ๋ฐ ํ•„์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ (ํ•„์š”์‹œ)
8
+ RUN apt-get update && apt-get install -y \
9
+ build-essential \
10
+ && rm -rf /var/lib/apt/lists/*
11
+
12
+ # ์˜์กด์„ฑ ํŒŒ์ผ ๋ณต์‚ฌ ๋ฐ ์„ค์น˜
13
+ COPY requirements.txt .
14
+ RUN pip install --no-cache-dir -r requirements.txt
15
+
16
+ # ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ
17
+ COPY . .
18
+
19
+ # ๊ถŒํ•œ ์„ค์ • (Hugging Face Spaces์—์„œ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ)
20
+ RUN chmod -R 777 /app
21
+
22
+ # ํฌํŠธ ์„ค์ • (Hugging Face Spaces ๊ธฐ๋ณธ ํฌํŠธ)
23
+ EXPOSE 7860
24
+
25
+ # ์„œ๋ฒ„ ์‹คํ–‰ ๋ช…๋ น
26
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
inspect_vector_db.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pickle
2
+
3
+ META_PATH = "vector_db/deposit_meta.pkl"
4
+
5
+ with open(META_PATH, "rb") as f:
6
+ docs = pickle.load(f)
7
+
8
+ print(f"โœ… ์ด {len(docs)}๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ์ธ๋ฑ์Šค์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.\n")
9
+
10
+ # ์•ž๋ถ€๋ถ„ ๋ช‡ ๊ฐœ๋งŒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
11
+ for i, doc in enumerate(docs[:5]):
12
+ print(f"[{i+1}] {doc[:300]}...\n")
main.py ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from fastapi.middleware.cors import CORSMiddleware
3
+
4
+ from agents.question_agent import suggest_questions
5
+ from agents.rag_agent import answer_question
6
+
7
+ app = FastAPI()
8
+
9
+ # --- CORS ์„ค์ • ์ถ”๊ฐ€ ---
10
+ origins = [
11
+ "http://localhost:5173", # Vite ๊ธฐ๋ณธ ํฌํŠธ
12
+ "http://127.0.0.1:5173",
13
+ "*", # ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ์ „์ฒด ํ—ˆ์šฉ ๊ฐ€๋Šฅ
14
+ ]
15
+
16
+ app.add_middleware(
17
+ CORSMiddleware,
18
+ allow_origins=origins,
19
+ allow_credentials=True,
20
+ allow_methods=["*"],
21
+ allow_headers=["*"],
22
+ )
23
+ # ------------------------
24
+
25
+
26
+ @app.get("/health")
27
+ def health():
28
+ return {"status": "ok"}
29
+
30
+ @app.post("/suggest")
31
+ def suggest(data: dict):
32
+ print(f"๐Ÿ“ฅ [POST /suggest] Request Body: {data}")
33
+ return suggest_questions(data["user_message"], data.get("user_profile", {}))
34
+
35
+ @app.post("/answer")
36
+ def answer(data: dict):
37
+ print(f"๐Ÿ“ฅ [POST /answer] Request Body: {data}")
38
+ return answer_question(data["selected_question"], data.get("user_profile", {}))
models.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pydantic import BaseModel, Field
2
+ from typing import List, Optional, Dict
3
+
4
+ class SuggestRequest(BaseModel):
5
+ user_message: str
6
+ user_profile: Dict = Field(default_factory=dict)
7
+
8
+ class SuggestResponse(BaseModel):
9
+ category: str = "์ƒํ’ˆ ์ถ”์ฒœ / ๋น„๊ต"
10
+ suggested_questions: List[str]
11
+
12
+ class AnswerRequest(BaseModel):
13
+ selected_question: str
14
+
15
+ class AnswerResponse(BaseModel):
16
+ answer: str
17
+ source_docs: List[str] = []
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ fastapi==0.115.2
2
+ uvicorn[standard]==0.30.6
3
+ openai==1.51.2
4
+ faiss-cpu==1.8.0.post1
5
+ sentence-transformers==3.1.1
6
+ pydantic==2.9.2
7
+ numpy==1.26.4
8
+ chardet
9
+ watchdog
10
+ pandas
11
+ openpyxl