# OiMy E2B v2 LiteRT-LM Conversion — Final Report

**Date:** 2026-05-29
**Pod:** 13h10xw2gffsbl (RTX 3090, 213.192.2.111:40120)

## Summary

Successfully reproduced the tuned OiMy E2B LoRA → merged LiteRT-LM conversion and deployed to CDN.

## Steps Completed

### 1. LoRA Merge
- Base model: `google/gemma-4-E2B-it` (10.25 GB safetensors)
- Adapter: `/workspace/gemma4-e2b-oimy-lora-v2/adapter_model.safetensors` (119 MB)
- LoRA config: r=16, alpha=32, scaling=2.0
- Target modules: q_proj, k_proj, v_proj, o_proj, up_proj, down_proj, gate_proj
- **353/353 LoRA pairs merged** (manual merge due to Gemma4ClippableLinear `.linear.weight` wrapping)
- Output: `/workspace/oimy-e2b-litert-merged/` (10.25 GB)

### 2. LiteRT-LM Export
- Tool: `litert-torch 0.9.1` + `litert-lm-builder 0.12.0`
- Torch: 2.11.0+cu128, Transformers: 5.9.0
- Command: `litert-torch export_hf ... --task=text_generation --trust_remote_code --externalize_embedder=True`
- Quantization: dynamic_wi8_afp32 (4x compression)
- Export time: ~9 min 12 sec
- Original model: 8.50 GiB → Quantized: 2.14 GiB
- Embedder: 1.50 GiB → 390 MiB
- Per-layer embedder: 8.75 GiB → 2.19 GiB

### 3. Output Verification
- `litert-lm-peek` confirmed 5 sections: LlmMetadata, Tokenizer, PrefillDecode, Embedder, PerLayerEmbedder
- LiteRT-LM version: 1.5.0
- Max tokens: 4096
- UUID: c66f7a4c-d4b2-4d04-bb2f-c4de783c7713

### 4. CDN Deployment
- **File:** `oimy-gemma-4-e2b-v2.litertlm`
- **Size:** 5,071,706,064 bytes (4.8 GB) — size-verified pod↔CDN
- **SHA256:** `8e4d1aa381c47e63245ad4ff3832cfe954d8b4b06d392a7de4dd895f2a631e32`
- **URL:** https://cdn.oimyai.com/gemma-4-e2b/oimy-gemma-4-e2b-v2.litertlm
- **CDN Range test:** HTTP 206 ✅
- **Manifest updated:** `/var/www/models/gemma-4-e2b/manifest.json`

### 5. Manifest Changes
- `primary_file` → `oimy-gemma-4-e2b-v2.litertlm`
- `primary_url` → `https://cdn.oimyai.com/gemma-4-e2b/oimy-gemma-4-e2b-v2.litertlm`
- `max_context_tokens` → 4096 (was 2048)
- Previous (untuned) base model preserved as `previous_primary_*` fields
- Notes updated to reflect tuned merged model

## Key Technical Notes
- PEFT `merge_and_unload()` fails on Gemma4ClippableLinear — manual merge required
- Weight key mapping: adapter uses `q_proj` but base model stores at `q_proj.linear.weight`
- Torch ≥2.11 required for litert-torch 0.9.1 (union type syntax)
