Spaces:
Sleeping
Sleeping
| """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() | |