Week 15 — Apr 7-13, 2026
Summary
Major feature week: streaming chat with multi-provider support, Supabase project sync to mobile, and Gemma 4 ML pipeline stubs (training/serving/mobile). Several iOS stability fixes around asset deduplication and chunked upload cleanup.
8 commits | 33 files changed | +2,017 / -135 lines
Highlights
Streaming Chat Endpoint (Apr 8)
New /ml/chat/stream SSE endpoint multiplexes responses from Gemini and on-prem Ollama into a single connection. Each event is tagged with its provider so clients can render responses in parallel.
Project Sync to Mobile (Apr 8)
POST /v1/sync-project fetches the full project tree (tasks, subtasks, items, specialties) from Supabase, generates markdown with YAML frontmatter, and saves it as a location asset. iOS app pulls via DataSyncService. Planning context (clarifying Q&A from Gemini) is now embedded in the synced markdown.
Gemma 4 Pipeline Stubs (Apr 13)
Scaffolded Phases 3-5 of the ML pipeline spec for three Gemma 4 model slots:
TS_Modal(31B dense, H100, full LoRA)TS_mobile4B(E4B, A10G, QLoRA 4-bit)TS_mobile2B(E2B, T4, QLoRA 4-bit)
New modules: model registry with version tracking, per-slot training configs, HuggingFace download + Unsloth trainer stubs, vLLM serving stubs, A/B routing stubs, GGUF quantization stubs. ML_PIPELINE_SPEC updated from Gemma 3 to Gemma 4.
iOS Stability Fixes (Apr 8)
- Deduplicated
list_assetswhenprojectId=allusing window function — prevents OOM on iOS pull sync when the same filename appears under multiple project IDs. - Fixed Bruno tests to clean up chunked uploads and data bridge assets, eliminating orphaned records that caused 500 errors on missing S3 blobs.
Daily Breakdown
Apr 8 (6 commits)
c826279Add streaming chat endpoint with multi-provider support (Gemini + Ollama)7d21cdeAdd project sync endpoint — pulls Supabase project data into location markdown files4002ee3Add planning context (clarifying Q&A) to synced project markdownf35c4c1Deduplicate list_assets when projectId=all to prevent OOM on iOS pull1d154c4Fix Bruno tests to clean up after themselves34ecddbUpdate all Bruno environments with real Supabase test IDs
Apr 9 (1 commit)
4b30a5dFix nightly scraper crash — use SELECT * for tasks/subtasks/items
Apr 13 (1 commit)
1b42581Stub Gemma 4 training/serving/mobile pipeline (Phases 3-5)
New Files
| File | Purpose |
|---|---|
dev/ml/gateway/chat.py |
Streaming chat with provider adapters |
dev/data/sync.py |
Supabase -> markdown project sync |
dev/core/supabase_queries.py |
Shared Supabase fetch functions |
dev/core/markdown_gen.py |
Project-to-markdown renderer |
dev/core/location.py |
Location resolution (extracted from users/auth.py) |
dev/ml/training/model_registry.py |
ModelSlot enum, version tracking, S3 registry |
dev/ml/training/training_config.py |
Per-slot LoRA/QLoRA training configs |
dev/ml/training/trainer.py |
HF download + training stubs |
dev/ml/serving/vllm_server.py |
vLLM inference stub |
dev/ml/serving/ab_router.py |
A/B routing stub |
dev/ml/mobile/quantize.py |
GGUF export + benchmark stubs |
Modified Files
dev/core/core.py— Added mlTrainingImage, Modal Volume, HF secretdev/core/__init__.py— Export new ML symbolsdev/ml/ml_endpoint.py— 8 new endpoints + Volume mount + GPU functionsdev/data/data.py— Window function deduplication for list_assetsdev/data/data_endpoint.py— sync-project routedev/users/auth.py— Extracted location resolution to core/location.pydev/ml/data_pipeline/supabase_scraper.py— Use shared query functions, fix column namesspecs/ML_PIPELINE_SPEC.md— Gemma 4 model selection + versioning docs- Bruno environment files — Real Supabase test IDs across all envs
- Bruno test files — Chunked upload cleanup, sync-project test, data bridge cleanup