docs(roadmap): mark Sprint 3 LLM abstraction as DONE

This commit is contained in:
saravanakumardb1 2026-03-02 09:06:56 -08:00
parent 2c047bcf48
commit 8315814fd9

View File

@ -133,8 +133,8 @@ routes.ts ────────► │ collection.findMany({ │
| Sprint | Package / Scope | Status | Effort | Files Changed (updated) | Risk |
| --------- | ------------------------------------------------- | ------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------- | -------- |
| **1** | `@bytelyst/datastore` — DB abstraction | ✅ DONE | 710 days | **78+** repository files + 1 new package (all TS repos + 3 dashboards + MindLyst web 21 routes + Python 7 consumers) | Low |
| **2** | `@bytelyst/storage` — Blob/Object abstraction | 🔶 PACKAGE BUILT | 2 days | 3 files + 1 new package (package done, consumer migration pending) | Low |
| **3** | `@bytelyst/llm` — LLM provider abstraction | 🔶 PACKAGE BUILT | 2 days | 4 files + 1 new package (package done, consumer migration pending) | Low |
| **2** | `@bytelyst/storage` — Blob/Object abstraction | ✅ DONE | 2 days | 3 files + 1 new package (`@bytelyst/blob` → `@bytelyst/storage`, platform-service blob routes, Python `storage.py`) | Low |
| **3** | `@bytelyst/llm` — LLM provider abstraction | ✅ DONE | 2 days | 6 files migrated + 5 test files + 1 package (MindLyst llm.ts, Python text_cleaner, openai_client, 2 UI testers) | Low |
| **4** | `@bytelyst/secrets` — Secrets manager abstraction | ✅ PACKAGE DONE | 1 day | `@bytelyst/config` `resolveKeyVaultSecrets()` refactored with provider dispatch | Very Low |
| **5** | `@bytelyst/speech` — Speech STT abstraction | ⚠️ PRECURSOR EXISTS | 34 days | 3 files + 1 new package. LysnrAI `stt_router.py` already routes Azure↔Whisper | Medium |
| **6** | `@bytelyst/push` — Push notification abstraction | 🔶 PACKAGE BUILT | 1 day | 1 file + 1 new package (package done, no push infra to migrate yet) | Very Low |
@ -538,13 +538,17 @@ The Cosmos adapter translates these to SQL. The MongoDB adapter passes them dire
---
## 5. Sprint 2: Storage Abstraction Layer 🔶 PACKAGE BUILT
## 5. Sprint 2: Storage Abstraction Layer ✅ DONE
**Package:** `@bytelyst/storage`
**Effort:** 2 days
**Files changed:** `packages/blob/src/blob.ts`, `src/cloud/blob_client.py`, `services/platform-service/src/modules/blob/`
**Files changed:** `packages/blob/src/blob.ts`, `services/platform-service/src/modules/blob/routes.ts`, `services/platform-service/src/lib/blob.ts`, `learning_voice_ai_agent/src/cloud/storage.py`
> **Current state (2026-03-02):** `@bytelyst/storage` package built with `AzureBlobStorageProvider` + `MemoryStorageProvider`. Consumer migration (blob package, platform-service blob module, Python blob client) not yet started.
> **Current state (2026-03-02):** `@bytelyst/storage` package built with `AzureBlobStorageProvider` + `MemoryStorageProvider`. All consumers migrated:
>
> - `@bytelyst/blob` now delegates to `@bytelyst/storage` (no direct `@azure/storage-blob` import)
> - Platform-service `lib/blob.ts` re-exports from updated `@bytelyst/blob`; `modules/blob/routes.ts` uses `getBucket()` + `bucket.list/exists/delete` instead of raw `ContainerClient`
> - Python: new `src/cloud/storage.py` abstraction with `_AzureBlobProvider` + `_MemoryStorageProvider` (same pattern as `datastore.py`)
### 5.1 Interface Design
@ -628,13 +632,21 @@ const url = await bucket.getSignedUrl('user123/recording.wav', { permissions: 'r
---
## 6. Sprint 3: LLM Provider Abstraction 🔶 PACKAGE BUILT
## 6. Sprint 3: LLM Provider Abstraction ✅ DONE
**Package:** `@bytelyst/llm`
**Effort:** 2 days
**Files changed:** `src/llm/text_cleaner.py`, `backend/src/clients/openai_client.py`, MindLyst `web/src/lib/llm.ts`, extraction-service config
> **Current state (2026-03-02):** `@bytelyst/llm` package built with `AzureOpenAIProvider`, `OpenAIProvider`, and `MockLLMProvider`. Consumer migration (MindLyst llm.ts, extraction-service, Python text_cleaner) not yet started.
> **Current state (2026-03-02):** `@bytelyst/llm` package built with `AzureOpenAIProvider`, `OpenAIProvider`, and `MockLLMProvider`. All consumers migrated:
>
> - **MindLyst web** `llm.ts` — replaced 139-line custom abstraction with thin `@bytelyst/llm` wrapper (package added via `file:` ref)
> - **LysnrAI desktop** `text_cleaner.py` — migrated from direct `AzureOpenAI` import to `create_llm_client()` factory
> - **LysnrAI backend-python** `openai_client.py` — migrated from `AsyncAzureOpenAI` to `create_async_llm_client()` factory
> - **LysnrAI UI** `settings.py` + `unified_window.py` — connection testers use factory with explicit kwargs
> - **Python factory** `src/llm/llm_factory.py` — new cloud-agnostic factory (sync + async) with env-var auto-detection
> - **5 test files** updated to mock `create_llm_client` instead of `AzureOpenAI`
> - **Extraction-service** — uses Gemini via Python sidecar (no OpenAI SDK), no migration needed
### 6.1 Interface Design
@ -1241,7 +1253,7 @@ packages/llm/
| --------- | -------------------- | ------------------- | --------------- | ------------------------------------------------------------------------- |
| 1 | Database abstraction | 🔶 ~96% DONE | 710 | 60/78 TS repos + 3 dashboards done. MindLyst web (22) + Python (8) remain |
| 2 | Storage abstraction | 🔶 PACKAGE BUILT | 2 | Package done. Consumer migration pending |
| 3 | LLM abstraction | 🔶 PACKAGE BUILT | 2 | Package done. Consumer migration pending |
| 3 | LLM abstraction | ✅ DONE | 2 | All consumers migrated (MindLyst llm.ts + Python factory + 5 tests) |
| 4 | Secrets abstraction | ✅ DONE | 1 | Config refactored with provider dispatch |
| 5 | Speech abstraction | ⚠️ PRECURSOR EXISTS | 34 | Speech swap = implement 1 adapter (~300 LOC) |
| 6 | Push abstraction | 🔶 PACKAGE BUILT | 1 | Package done. No push infra to migrate yet |
@ -1296,7 +1308,6 @@ The key insight: **~80% of migration effort is in Sprint 1 (database)**. All Typ
### Remaining to Complete All Sprints
- **Sprint 2**: Consumer migration for `@bytelyst/storage` (blob package, platform-service blob module, Python blob client)
- **Sprint 3**: Consumer migration for `@bytelyst/llm` (MindLyst llm.ts, extraction-service, Python text_cleaner)
- **Sprint 5**: Speech abstraction package (Python/Swift — no package built yet)
- **Sprint 6**: No push infra exists to migrate (deferred)