bisonnetworking/medgemma-health-chat-lora
04
MedGemma Health Chat LoRA Adapter
Model Description
A LoRA adapter fine-tuned on google/medgemma-1.5-4b-it for multi-persona health chat conversations. The model responds as one of six medical personas (primary care, internal medicine, clinical nutritionist, exercise specialist, integrated physician, chronic health specialist) with direct, clinically grounded guidance optimized for mobile display.
Intended Use
- Health chat assistant for patient-facing applications
- Provides clinical guidance in a conversational format
- Designed for mobile-first display (no tables, concise prose)
- Each conversation assigns a persona based on topic relevance
Not intended for: diagnosing conditions, replacing professional medical care, or emergency triage.
Personas
Training Data
- Dataset: bisonnetworking/medgemma-health-chat-sft
- Training samples: 49,500 conversations
- Eval samples: 500 conversations
- Format: ShareGPT/conversational JSONL with system (persona prompt) + user + assistant turns
- Health context: Simulated Apple Health data (vitals, labs, medications, conditions) injected into user messages
Training Procedure
LoRA Configuration
- Rank (r): 32
- Alpha: 64
- Dropout: 0
- Target modules: qproj, kproj, vproj, oproj, gateproj, upproj, down_proj
- Trainable parameters: 65,576,960 (1.50% of 4,365,656,432 total)
Training Hyperparameters
- Epochs: 2
- Batch size: 8 (per-device)
- Learning rate: 2e-4 (cosine scheduler)
- Warmup ratio: 0.03
- Optimizer: adamw_8bit
- Weight decay: 0.01
- Max sequence length: 2048
- Precision: bf16
- Packing: True
Training Results
- Total steps: 12,376
- Final training loss: 0.7981
- Best eval loss: 0.8779 (step 12,000)
- Final eval loss: 0.8779
Compute Infrastructure
- Hardware: NVIDIA H100 80GB (Modal serverless)
- Software: Unsloth 2025.7.8, Transformers 4.54.0, TRL 0.19.1, PEFT 0.16.0
- Training time: ~3 hours
- Framework: Modal
How to Use
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch
base_model = "google/medgemma-1.5-4b-it"
adapter_model = "bisonnetworking/medgemma-health-chat-lora"
# Load base model
model = AutoModelForCausalLM.from_pretrained(
base_model, torch_dtype=torch.float16, trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(base_model)
# Load LoRA adapter
model = PeftModel.from_pretrained(model, adapter_model)
model = model.merge_and_unload()
# Generate
messages = [
{"role": "system", "content": "You are a board-certified Primary Care Physician..."},
{"role": "user", "content": "I've had a sore throat for 3 days. What should I do?"},
]
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt", add_generation_prompt=True)
outputs = model.generate(inputs, max_new_tokens=256, temperature=0.7, top_p=0.9)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))Merged Model
A pre-merged 16-bit version is available at bisonnetworking/medgemma-health-chat-merged for direct use without loading a separate adapter.
Evaluation
300 test cases (50 per persona) across 6 categories:
- Medical accuracy (14 cases/persona)
- Persona adherence (9 cases/persona)
- Health context usage (10 cases/persona)
- Data integrity / no hallucination (6 cases/persona)
- Safety / emergency recognition (6 cases/persona)
- Formatting / mobile constraints (5 cases/persona)
Limitations
- Fine-tuned on synthetic conversations — quality depends on the base model's medical knowledge
- Persona prompts enforce style but cannot guarantee clinical accuracy
- No tables in output (mobile constraint) — may reduce clarity for complex comparisons
- Not a substitute for professional medical advice
