Text Generation
PEFT
Safetensors
English
pharmacovigilance
drug-safety
medical
lora
gemma
gemma-4
amd
mi300x
rocm
tcs-amd-hackathon
conversational
Eval Results (legacy)
Instructions to use team-gemmra/gemmra with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use team-gemmra/gemmra with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("google/gemma-4-31b-it") model = PeftModel.from_pretrained(base_model, "team-gemmra/gemmra") - Notebooks
- Google Colab
- Kaggle
File size: 10,090 Bytes
ee774c0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 | ---
library_name: peft
license: apache-2.0
base_model: google/gemma-4-31b-it
tags:
- pharmacovigilance
- drug-safety
- medical
- peft
- lora
- text-generation
- gemma
- gemma-4
- amd
- mi300x
- rocm
- tcs-amd-hackathon
datasets:
- custom
language:
- en
pipeline_tag: text-generation
model-index:
- name: gemmra
results:
- task:
type: text-generation
name: Pharmacovigilance Assessment
metrics:
- type: accuracy
value: 0.862
name: Composite Score (Weighted)
- type: accuracy
value: 0.995
name: T1 Seriousness (F1 Score)
- type: accuracy
value: 0.667
name: T2 MedDRA Coding (Weighted)
- type: accuracy
value: 0.801
name: T3 Labelling (F1 Score)
- type: accuracy
value: 0.986
name: T4 Causality (Weighted)
---
# Gemmra — Pharmacovigilance LoRA Adapter for Gemma 4 31B
**Gemmra** is a LoRA adapter that transforms Google's Gemma 4 31B-IT into a specialized pharmacovigilance assessment system. It automates four critical drug safety tasks that typically take 30 minutes per case manually — completing them in under 10 seconds with auditable reasoning traces.
Built for the **TCS & AMD AI Hackathon 2026** on AMD Instinct MI300X (192 GB HBM3).
> ⚠️ **Research Use Only.** This model is for research and educational purposes. It does not provide professional medical or regulatory advice. Do not use for clinical decision-making without expert oversight.
## Key Results
| Task | Metric | Score | Eval Samples |
|------|--------|:-----:|:------------:|
| T1: Seriousness Classification | F1 Score | **99.5%** | 1,027 |
| T2: MedDRA PT Coding | Weighted (Exact→Synonym→Fuzzy→SOC) | **66.7%** | 759 |
| T3: Drug Labelling Status | F1 Score | **80.1%** | 980 |
| T4: WHO-UMC Causality | Weighted (Exact + Partial) | **98.6%** | 794 |
| **Composite** | **Average (T1+T2+T3+T4)** | **86.2%** | **3,560** |
| Format Compliance | Structured Output Parsing | **100%** | 3,560 |
### Base Model Comparison
Evaluated on the same eval samples (base model used hand-crafted format prompts for fair comparison).
| Metric | Base Gemma 4 31B | Gemmra (SFT) | Δ |
|--------|:---:|:---:|:---:|
| T1 Seriousness (F1) | 97.7% | **99.5%** | +1.8pp |
| T2 MedDRA (Weighted) | 31.1% | **66.7%** | +35.6pp |
| T3 Labelling (F1) | 78.2% | **80.1%** | +1.9pp |
| T4 Causality (Weighted) | 84.5% | **98.6%** | +14.1pp |
| Composite | 72.9% | **86.2%** | +13.3pp |
## Model Details
- **Base Model:** [google/gemma-4-31b-it](https://huggingface.co/google/gemma-4-31b-it)
- **Method:** LoRA SFT (bf16, r=64) (WiSE-FT weight interpolation explored for reasoning recovery)
- **Training Hardware:** AMD Instinct MI300X (192 GB HBM3)
- **Precision:** bf16 (zero quantization — MI300X VRAM enables full precision)
- **Training Time:** ~1.9 hours
- **VRAM Usage:** 95 GB (training) / 61 GB (inference)
### LoRA Configuration
| Parameter | Value |
|-----------|-------|
| Rank (r) | 64 |
| Alpha (lora_alpha) | 128 |
| Dropout | 0.0 |
| Target Modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj |
| Task Type | CAUSAL_LM |
| Trainable Parameters | ~0.5% of 31B |
### WiSE-FT (Weight Interpolation Exploration)
While pure SFT (α=1.0) is the primary model deployed due to its superior accuracy across 3 out of 4 tasks and 100% format compliance, we also explored **WiSE-FT** as a research variant to recover reasoning depth. Scaling the LoRA adapter weights by α=0.9 blends SFT format compliance with base model reasoning depth. This recovers the base model's native clinical reasoning (providing 400+ words of structured thinking) at a small cost of ~4% composite accuracy.
```
θ_final = α × θ_SFT + (1 - α) × θ_base (via LoRA adapter weight scaling)
```
## Training Data
| Source | Purpose | Volume |
|--------|---------|--------|
| [FDA FAERS](https://www.fda.gov/drugs/fda-adverse-event-reporting-system-faers) | Adverse event case reports (29 quarters, 2019Q1–2026Q1) | 12M+ cases |
| [BioDEX](https://github.com/KarelDO/BioDEX) | Biomedical literature → MedDRA PT mapping | T2 pairs |
| [OnSIDES](https://github.com/tatonetti-lab/onsides) | Drug label side effects → labelling ground truth | T3 pairs |
- **Training pairs:** 32,355 instruction-completion pairs
- **Eval samples:** 3,560 (content-hash decontaminated, MeditronFO-inspired splitting)
- **Diversity:** 93–99% unique completions via Combinatorial Diversity Engine
### Data Challenges Solved
1. **MedDRA is proprietary** — engineered PT training from BioDEX open literature
2. **FDA redacts doctor narratives** — built structured prompts from remaining FAERS fields
3. **BioDEX truncation** — abstracts cut at 500 chars hid ground truth from 92% of T2 data; fixing this single line gave 2.1× improvement
4. **Train/eval leakage** — content-hash splitting ensures zero contamination
## Usage
### Loading the Adapter
```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
# Load base model (requires ~62 GB VRAM in bf16)
base_model = AutoModelForCausalLM.from_pretrained(
"google/gemma-4-31b-it",
torch_dtype=torch.bfloat16,
device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained("google/gemma-4-31b-it")
# Load Gemmra LoRA adapter
model = PeftModel.from_pretrained(base_model, "Amaltrkmr/gemmra")
```
### Running Inference
```python
messages = [
{"role": "system", "content": "You are a pharmacovigilance expert. Assess whether this adverse event case is SERIOUS per ICH E2A criteria (Death, Life-threatening, Hospitalization, Disability, Congenital anomaly). Think step by step, then provide your structured assessment."},
{"role": "user", "content": """Patient: 69-year-old female
Drug: ACTEMRA (tocilizumab)
Adverse events: Cardiac arrest, Pulmonary embolism, Acute kidney injury, Haemodialysis, Platelet count decreased
Outcome: Patient did not survive"""}
]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=1024, temperature=0.1, do_sample=True)
response = tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(response)
```
**Expected Output:**
```
SERIOUS: YES
Criteria met: DE (Death), LT (Life-threatening), HO (Hospitalization), DS (Disability)
Rationale: The clinical outcome meets multiple seriousness categories, confirming serious classification.
```
### Using with Unsloth (Faster)
```python
from unsloth import FastLanguageModel
import torch
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="google/gemma-4-31b-it",
max_seq_length=8192,
load_in_4bit=False,
dtype=torch.bfloat16,
)
from peft import PeftModel
model = PeftModel.from_pretrained(model, "Amaltrkmr/gemmra")
FastLanguageModel.for_inference(model)
```
## Four Pharmacovigilance Tasks
| Task | Input | Output | Regulatory Framework |
|------|-------|--------|---------------------|
| T1: Seriousness | Patient demographics, AEs, outcomes | SERIOUS: YES/NO + criteria (DE/LT/HO/DS/CA) | ICH E2A |
| T2: MedDRA Coding | Adverse event narrative | MedDRA Preferred Term | MedDRA hierarchy |
| T3: Labelling | Drug name + adverse event | LABELLED: YES/NO + evidence | Drug product labels |
| T4: Causality | Full case context | WHO-UMC category + 6-dim evidence | WHO-UMC criteria |
## Training Pipeline
```
FAERS + BioDEX + OnSIDES
↓
Combinatorial Diversity Engine → 32,355 pairs
↓
SFT (bf16 LoRA r=64 on MI300X, ~1.9 hrs) → Primary Adapter ✅
↓
WiSE-FT exploration (α=0.9) → Explored reasoning variant
↓
GRPO validation → +0.003 composite improvement → validated SFT ceiling
↓
Evaluation (3,560 decontaminated samples)
↓
This Adapter ✅
```
## Hardware Requirements
| Setup | VRAM Required | Notes |
|-------|:---:|-------|
| bf16 inference | ~62 GB | AMD MI300X (192 GB) ✅, 2× A100 80 GB ✅ |
| 4-bit inference | ~18 GB | Single A100/RTX 4090 |
| bf16 training (LoRA r=64) | ~95 GB | AMD MI300X only — impossible on single NVIDIA GPU |
## AMD MI300X Advantage
Training this model at bf16 precision with LoRA r=64 across all 7 linear layer types requires 95 GB VRAM. This is physically impossible on any single NVIDIA GPU (A100/H100 max at 80 GB). AMD MI300X's 192 GB HBM3 is the enabling technology — zero quantization means higher quality gradients and a better final model.
## Limitations
- **MedDRA vocabulary:** Trained on BioDEX-derived PTs (~5,000 terms), not the full proprietary MedDRA dictionary (80,000+ PTs). T2 accuracy will improve with dictionary augmentation.
- **Data source:** FDA FAERS data has known limitations — doctor narratives are redacted, outcome codes can be inconsistent.
- **Not a medical device:** Outputs require expert review before regulatory submission.
- **English only:** Trained exclusively on English-language adverse event reports.
## Citation
```bibtex
@misc{gemmra2026,
title={Gemmra: Multi-Task Pharmacovigilance Assessment with Fine-Tuned Gemma 4 on AMD MI300X},
author={Amal T R and Bhaskar Jha},
year={2026},
howpublished={TCS \& AMD AI Hackathon 2026},
url={https://github.com/bhaskarjha-dev/gemmra}
}
```
## Contributors
- **[Amal T R](https://huggingface.co/Amaltrkmr)** — Model training, evaluation, data pipeline, WiSE-FT research
- **[Bhaskar Jha](https://huggingface.co/bhaskarjha-dev)** — Architecture, data engineering, website, presentation, system design
## Links
- 🌐 **Website:** [gemmra.bhaskarjha.dev](https://gemmra.bhaskarjha.dev)
- 💻 **GitHub:** [bhaskarjha-dev/gemmra](https://github.com/bhaskarjha-dev/gemmra) (upstream: [amaltr/gemmra](https://github.com/amaltr/gemmra))
- 🏆 **Hackathon:** TCS & AMD AI Hackathon 2026 — Track: Fine-Tuning (FINETUNING_005)
|