import sys import os # ✅ Add src to Python path sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "src"))) from txagent.txagent import TxAgent # ✅ Now this will work import pandas as pd import pdfplumber import gradio as gr def extract_structured_text_from_csv(file_path): try: df = pd.read_csv(file_path) relevant_columns = [ "Booking Number", "Form Name", "Form Item", "Item Response", "Interviewer", "Interview Date" ] df = df[[col for col in relevant_columns if col in df.columns]] return df.to_string(index=False) except Exception as e: return f"Error parsing CSV: {e}" def extract_structured_text_from_pdf(file_path): extracted = [] try: with pdfplumber.open(file_path) as pdf: for page in pdf.pages: tables = page.extract_tables() for table in tables: for row in table: if any(row): extracted.append("\t".join([cell or "" for cell in row])) return "\n".join(extracted) except Exception as e: return f"Error parsing PDF: {e}" def create_ui(agent: TxAgent): with gr.Blocks(theme=gr.themes.Soft()) as demo: gr.Markdown("

\ud83d\udc8a TxAgent: Therapeutic Reasoning

") chatbot = gr.Chatbot(label="TxAgent", height=600, type="messages") file_upload = gr.File(label="Upload Medical File", file_types=[".pdf", ".txt", ".docx", ".jpg", ".png", ".csv"], file_count="multiple") message_input = gr.Textbox(placeholder="Ask a biomedical question or just upload the files...", show_label=False) send_button = gr.Button("Send", variant="primary") conversation_state = gr.State([]) def handle_chat(message, history, conversation, uploaded_files): context = ( "You are a clinical AI reviewing patient form data from interviews. " "Your task is to analyze the responses, dates, and items, and reason step-by-step about " "what the doctor might have overlooked. Do not summarize or answer yet — just reason step-by-step first." ) if uploaded_files: extracted_text = "" for file in uploaded_files: path = file.name if path.endswith(".csv"): extracted_text += extract_structured_text_from_csv(path) + "\n" elif path.endswith(".pdf"): extracted_text += extract_structured_text_from_pdf(path) + "\n" message = f"{context}\n\n---\n{extracted_text.strip()}\n---\n\nNow reason what the doctor might have missed." generator = agent.run_gradio_chat( message=message, history=history, temperature=0.3, max_new_tokens=1024, max_token=8192, call_agent=False, conversation=conversation, uploaded_files=uploaded_files, max_round=30 ) for update in generator: yield update inputs = [message_input, chatbot, conversation_state, file_upload] send_button.click(fn=handle_chat, inputs=inputs, outputs=chatbot) message_input.submit(fn=handle_chat, inputs=inputs, outputs=chatbot) gr.Examples([ ["Upload the files"], ], inputs=message_input) return demo