first-aid-rag-assistant / src / app.py
app.py
Raw
import streamlit as st

from assistant import create_assistant
from db.feedback import save_feedback
from db.conversations import save_conversation
from judge import evaluate_relevance

assistant = create_assistant()

st.title("First Aid QA Assistant")

user_input = st.text_input("Enter your question:")

if st.button("Ask"):
    with st.spinner("Processing..."):
        answer = assistant.rag(user_input)
        st.success("Completed!")
        st.write(answer)

        record = assistant.last_call
        st.write(f"Response time: {record.response_time:.2f}s")
        st.write(f"Prompt tokens: {record.prompt_tokens}")
        st.write(f"Completion tokens: {record.completion_tokens}")
        st.write(f"Cost: ${record.cost:.4f}")

        conversation_id = save_conversation(
            record, user_input,
            assistant.last_rewritten_question or user_input,
        )
        st.session_state.conversation_id = conversation_id
        relevance, explanation = evaluate_relevance(user_input, answer)
        save_feedback(conversation_id, "judge",
                        relevance=relevance, explanation=explanation)
        st.write(f"Relevance: {relevance}")
        st.write(f"Explanation: {explanation}")

conversation_id = st.session_state.get("conversation_id")

if conversation_id is not None:
    col1, col2 = st.columns(2)

    with col1:
        if st.button("+1", key=f"feedback_up_{conversation_id}"):
            save_feedback(conversation_id, "user", score=1)
            st.success("Thanks!")

    with col2:
        if st.button("-1", key=f"feedback_down_{conversation_id}"):
            save_feedback(conversation_id, "user", score=-1)
            st.success("Thanks for the feedback!")