bible-guidechat / app.py
alchemine's picture
feat: update app
96c4e49
"""Gradio app for the QA agent."""
from uuid import uuid4
from functools import partial
import gradio as gr
from src.agents.qa_agent import QAAgent
qa_agent = QAAgent()
def generate_user_id() -> str:
"""Generate a unique user ID."""
return str(uuid4())
def process_response(result: dict) -> str:
"""Process the response from the QA agent."""
answer, references = result["answer"], result["references"]
new_answer = answer
# 1. Add links
for idx, ref in references.items():
new_answer = new_answer.replace(f"[[{idx}]]", f"[[{idx}]]({ref})")
# 2. Add references
new_answer += "\n\n---\n### References\n"
for idx, ref in references.items():
new_answer += f"- {idx}: [{ref}]({ref})\n"
return new_answer
def respond(message, history: list[tuple[str, str]], user_id: str = "test", **kwargs):
"""Respond to a message."""
result: dict = qa_agent.invoke(message, user_id=user_id)
response = process_response(result)
yield response
# Create the app with tabs
with gr.Blocks() as app:
with gr.Tabs() as tabs:
with gr.Tab("기독ꡐ 질문 ✝️"):
# Use a separate user ID for the first tab
bible_user_id = gr.State(value=generate_user_id())
app.load(generate_user_id, outputs=[bible_user_id])
gr.Markdown(
"""
### 기독ꡐ 질문 ✝️
기독ꡐ ν˜Ήμ€ 성경에 λŒ€ν•΄ 많이 κΆκΈˆν•΄ν•˜λŠ” μ§ˆλ¬Έλ“€μ„ λͺ¨μ•„λ΄€μ–΄μš”. μ–΄λ–»κ²Œ μƒκ°ν•˜μ‹œλ‚˜μš”? πŸ€”
"""
)
examples = [
["μ„±κ²½μ—μ„œ λ§ν•˜λŠ” κ΅¬μ›μ΄λž€ λ¬΄μ—‡μΈκ°€μš”?"],
["천ꡭ과 μ§€μ˜₯은 μ‹€μ œλ‘œ μ‘΄μž¬ν•˜λ‚˜μš”?"],
["ν•˜λ‚˜λ‹˜μ€ μ™œ 고톡을 ν—ˆλ½ν•˜μ‹œλ‚˜μš”?"],
["κΈ°λ…κ΅μ—μ„œ λ§ν•˜λŠ” μ‚Όμœ„μΌμ²΄λž€ λ¬΄μ—‡μΈκ°€μš”?"],
["μ˜ˆμˆ˜λ‹˜μ€ μ™œ μ‹­μžκ°€μ— λŒμ•„κ°€μ…¨λ‚˜μš”?"],
["성경은 μ–΄λ–»κ²Œ 해석해야 ν•˜λ‚˜μš”?"],
]
respond_ = partial(respond, user_id=bible_user_id.value[0])
gr.ChatInterface(
respond_,
type="messages",
examples=examples,
# NOTE: use caching for production
# cache_examples=True,
)
with gr.Tab("자유 λŒ€ν™” πŸ’¬"):
# Use a separate user ID for the second tab
chat_user_id = gr.State(value=generate_user_id())
app.load(generate_user_id, outputs=[chat_user_id])
gr.Markdown(
"""
### 자유 λŒ€ν™” πŸ’¬
기독ꡐ ν˜Ήμ€ 성경에 λŒ€ν•œ 질문, μ‚Άμ˜ 고민이 μžˆμœΌμ‹ κ°€μš”? 자유둭게 λ‚˜λˆ μ£Όμ„Έμš” πŸ€—
"""
)
respond_ = partial(respond, user_id=chat_user_id.value[0])
gr.ChatInterface(respond_, type="messages")
if __name__ == "__main__":
app.launch()