Spaces:
Runtime error
Runtime error
import gradio as gr | |
from smolagents import CodeAgent, HfApiModel | |
# Define system prompts for the agents | |
patient_system_prompt = """ | |
You are a patient describing your symptoms to a physician. You are here to talk about a health issue. | |
Be concise and provide relevant information about your symptoms. | |
""" | |
physician_system_prompt = """ | |
You are a physician responding to a patient's symptoms. | |
Ask relevant questions to understand the patient's condition and provide appropriate advice. | |
""" | |
# Load the models for the agents | |
patient_model = HfApiModel(model_id="HuggingFaceTB/SmolLM2-1.7B-Instruct") | |
physician_model = HfApiModel(model_id="HuggingFaceTB/SmolLM2-1.7B-Instruct") | |
# Initialize the agents | |
patient_agent = CodeAgent( | |
model=patient_model, | |
system_prompt=patient_system_prompt, | |
planning_interval=1 # Allow the agent to plan after each turn | |
) | |
physician_agent = CodeAgent( | |
model=physician_model, | |
system_prompt=physician_system_prompt, | |
planning_interval=1 # Allow the agent to plan after each turn | |
) | |
def generate_conversation(topic, turns): | |
conversation = [] | |
total_tokens = 0 | |
physician_tokens = 0 | |
patient_tokens = 0 | |
# Initial prompt for the patient | |
patient_input = f"I'm here to talk about {topic}." | |
print(f"Patient Initial Input: {patient_input}") # Debugging | |
patient_response = patient_agent.run(patient_input) | |
print(f"Patient Response: {patient_response}") # Debugging | |
patient_tokens += len(patient_response.split()) | |
conversation.append({"role": "patient", "message": patient_response, "tokens": len(patient_response.split())}) | |
for turn in range(turns): | |
# Physician's turn | |
print(f"Physician Turn {turn} Prompt: {patient_response}") # Debugging | |
physician_response = physician_agent.run(patient_response) | |
print(f"Physician Response: {physician_response}") # Debugging | |
physician_tokens += len(physician_response.split()) | |
conversation.append({"role": "physician", "message": physician_response, "tokens": len(physician_response.split())}) | |
# Patient's turn | |
print(f"Patient Turn {turn} Prompt: {physician_response}") # Debugging | |
patient_response = patient_agent.run(physician_response) | |
print(f"Patient Response: {patient_response}") # Debugging | |
patient_tokens += len(patient_response.split()) | |
conversation.append({"role": "patient", "message": patient_response, "tokens": len(patient_response.split())}) | |
# Summarize the conversation | |
summary = { | |
"total_tokens": physician_tokens + patient_tokens, | |
"physician_tokens": physician_tokens, | |
"patient_tokens": patient_tokens | |
} | |
return conversation, summary | |
def app_interface(topic, turns): | |
conversation, summary = generate_conversation(topic, turns) | |
output = { | |
"input": {"topic": topic, "turns": turns}, | |
"conversation": conversation, | |
"summary": summary | |
} | |
return output | |
# Gradio interface | |
with gr.Blocks() as demo: | |
gr.Markdown("## π¨ββοΈ Synthetic Data Generation: Physician-Patient Role-Play π€") | |
with gr.Row(): | |
topic_input = gr.Textbox(label="Enter Disease/Topic", placeholder="e.g., chest pain") | |
turns_input = gr.Number(label="Number of Turns", value=1) # Default to 1 turn for debugging | |
submit_button = gr.Button("π Start Interaction") | |
output_json = gr.JSON(label="Generated Conversation") | |
# Download button for the conversation | |
download_button = gr.Button("π₯ Download Conversation") | |
download_button.click( | |
fn=lambda data: gr.File.download(data), | |
inputs=output_json, | |
outputs=gr.File() | |
) | |
submit_button.click( | |
fn=app_interface, | |
inputs=[topic_input, turns_input], | |
outputs=output_json | |
) | |
demo.launch() |