|
import gradio as gr
|
|
import spaces
|
|
import torch
|
|
from transformers import AutoModelForCausalLM, AutoTokenizer
|
|
from retriever.vectordb import search_documents
|
|
|
|
model_name = "dasomaru/gemma-3-4bit-it-demo"
|
|
|
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
|
|
|
|
model = AutoModelForCausalLM.from_pretrained(
|
|
model_name,
|
|
torch_dtype=torch.float16,
|
|
trust_remote_code=True,
|
|
)
|
|
|
|
@spaces.GPU(duration=300)
|
|
def generate_response(query):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained("dasomaru/gemma-3-4bit-it-demo")
|
|
model = AutoModelForCausalLM.from_pretrained("dasomaru/gemma-3-4bit-it-demo")
|
|
model.to("cuda")
|
|
|
|
|
|
top_k = 5
|
|
retrieved_docs = search_documents(query, top_k=top_k)
|
|
|
|
|
|
prompt = (
|
|
"๋น์ ์ ๊ณต์ธ์ค๊ฐ์ฌ ์ํ ๋ฌธ์ ์ถ์ ์ ๋ฌธ๊ฐ์
๋๋ค.\n\n"
|
|
"๋ค์์ ๊ธฐ์ถ ๋ฌธ์ ๋ฐ ๊ด๋ จ ๋ฒ๋ น ์ ๋ณด์
๋๋ค:\n"
|
|
)
|
|
for idx, doc in enumerate(retrieved_docs, 1):
|
|
prompt += f"- {doc}\n"
|
|
prompt += f"\n์ด ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฌ์ฉ์์ ์์ฒญ์ ๋ต๋ณํด ์ฃผ์ธ์.\n\n"
|
|
prompt += f"[์ง๋ฌธ]\n{query}\n\n[๋ต๋ณ]\n"
|
|
|
|
|
|
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
|
|
outputs = model.generate(
|
|
**inputs,
|
|
max_new_tokens=512,
|
|
temperature=0.7,
|
|
top_p=0.9,
|
|
top_k=50,
|
|
do_sample=True,
|
|
)
|
|
|
|
return tokenizer.decode(outputs[0], skip_special_tokens=True)
|
|
|
|
demo = gr.Interface(fn=generate_response, inputs="text", outputs="text")
|
|
demo.launch()
|
|
|