| | import logfire |
| | import streamlit as st |
| |
|
| | from app import agent, models |
| |
|
| | logfire.configure( |
| | service_name="streamlit", scrubbing=False, send_to_logfire="if-token-present" |
| | ) |
| | logfire.instrument_pydantic_ai() |
| |
|
| |
|
| | def format_output(statements: list[models.Statement]) -> str: |
| | sentences = [] |
| | citations = {} |
| |
|
| | for statement in statements: |
| | sentence = statement.text |
| |
|
| | if sentence.startswith(("*", "-")): |
| | |
| | sentence = f"\n{sentence}" |
| |
|
| | if statement.sources: |
| | citation_ids = [] |
| | for source in statement.sources: |
| | if not (citation_id := citations.get(source.citation)): |
| | citation_id = len(citations) + 1 |
| | citations[source.citation] = citation_id |
| | citation_ids.append(citation_id) |
| | sentence += " ".join(f"[^{i}]" for i in sorted(citation_ids)) |
| |
|
| | sentences.append(sentence) |
| |
|
| | answer = " ".join(sentences) |
| | footnotes = "\n".join(f"[^{id}]: {citation}" for citation, id in citations.items()) |
| | return f"{answer}\n\n{footnotes}" |
| |
|
| |
|
| | def main(): |
| | st.title("Elna") |
| | with st.form("search", border=False): |
| | query = st.text_input("Your medical question") |
| | submit = st.form_submit_button("Ask") |
| |
|
| | if submit: |
| | with st.spinner("Thinking...", show_time=True): |
| | output = agent.agent.run_sync(query).output |
| | answer = format_output(output.statements) |
| | with st.expander("Thinking Process"): |
| | st.markdown(output.thoughts) |
| | st.markdown(answer) |
| |
|
| |
|
| | if __name__ == "__main__": |
| | main() |
| |
|