MedBot / app.py
ajayk007's picture
Update app.py
f6fd098 verified
Raw
History Blame Contribute Delete
2.31 kB
import os
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
import gradio as gr
model_id = "microsoft/DialoGPT-small"
model = None
tokenizer = None
print(f"\nLoading model: {model_id}...")
try:
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
model.eval()
print("Model loaded successfully!")
except Exception as e:
print(f"Error loading model: {e}")
print("Ensure you are using a CPU-compatible model and that internet access is available.")
def medical_qna(question):
if model is None or tokenizer is None:
return "Error: Model failed to load in a previous step."
try:
input_ids = tokenizer.encode(question + tokenizer.eos_token, return_tensors="pt")
with torch.no_grad():
output_ids = model.generate(
input_ids,
max_new_tokens=150,
pad_token_id=tokenizer.eos_token_id,
do_sample=True,
top_k=50,
top_p=0.95,
temperature=0.7
)
generated_text = tokenizer.decode(output_ids[:, input_ids.shape[-1]:][0], skip_special_tokens=True)
thinking_process = "Analyzing symptoms and context..."
final_response = generated_text.strip()
formatted_output = f"**Thinking Process:**\n{thinking_process}\n\n**Final Response:**\n{final_response}"
return formatted_output
except Exception as e:
return f"An error occurred during processing: {e}"
if model is not None and tokenizer is not None:
print("\nSetting up Gradio interface...")
try:
interface = gr.Interface(
fn=medical_qna,
inputs=gr.Textbox(lines=3, placeholder="Enter medical question here...", label="Your Medical Question"),
outputs=gr.Markdown(label="Chatbot Response"),
title="Lightweight Medical Chatbot",
description="Ask a medical-style question. This uses a small model for CPU usage. Not for real medical advice."
)
print("Launching Gradio interface...")
interface.launch()
except Exception as e:
print(f"Error launching Gradio interface: {e}")
else:
print("\nModel was not loaded. Skipping Gradio interface setup.")