|
import gradio as gr |
|
import spaces |
|
import torch |
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
|
from services.rag_pipeline import rag_pipeline |
|
|
|
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) |
|
|
|
@spaces.GPU(duration=300) |
|
def generate_response_with_pipeline(query): |
|
return rag_pipeline(query) |
|
|
|
demo = gr.Interface(fn=generate_response_with_pipeline, inputs="text", outputs="text") |
|
demo.launch() |
|
|