cmcmaster's picture
Update app.py
6d4d687 verified
import gradio as gr
from outlines.models import llamacpp
from outlines import generate, samplers
from pydantic import BaseModel, Field
from typing import Optional
import json
import llama_cpp
# Define the output schema
class Medication(BaseModel):
drug_name: str = Field(description="The name of the drug.")
is_generic: bool = Field(description="Indicates if the drug name is a generic drug name.")
strength: Optional[str] = Field(default=None, description="The strength of the drug.")
unit: Optional[str] = Field(default=None, description="The unit of measurement for the drug strength.")
dosage_form: Optional[str] = Field(default=None, description="The form of the drug (e.g., patch, tablet).")
frequency: Optional[str] = Field(default=None, description="The frequency of drug administration.")
route: Optional[str] = Field(default=None, description="The route of administration (e.g., oral, topical).")
is_prn: Optional[bool] = Field(default=None, description="Whether the medication is taken 'as needed'.")
total_daily_dose_mg: Optional[float] = Field(default=None, description="The total daily dose in milligrams.")
# Load your model locally via llama-cpp
model = llamacpp(
"cmcmaster/drug_parsing_Llama-3.2-1B-Instruct-Q5_K_S-GGUF",
"drug_parsing_llama-3.2-1b-instruct-q5_k_s.gguf",
tokenizer=llama_cpp.llama_tokenizer.LlamaHFTokenizer.from_pretrained("cmcmaster/drug_parsing_Llama-3.2-1B-Instruct")
)
sampler = samplers.greedy()
# Prepare structured generator
structured_generator = generate.json(model, Medication, sampler = sampler)
def respond(
message,
history: list[tuple[str, str]],
):
try:
medication = structured_generator(message)
response = json.dumps(medication.model_dump(), indent=2)
except Exception as e:
response = f"Error: {str(e)}"
yield response
# Gradio interface
demo = gr.ChatInterface(
respond
)
if __name__ == "__main__":
demo.launch()