From 8315814fd9aa23679c56676dc59b83ba6a32c14f Mon Sep 17 00:00:00 2001 From: saravanakumardb1 Date: Mon, 2 Mar 2026 09:06:56 -0800 Subject: [PATCH] docs(roadmap): mark Sprint 3 LLM abstraction as DONE --- .../cloud_AGNOSTIC_REFACTOR_ROADMAP.md | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/docs/roadmaps/completed/cloud_AGNOSTIC_REFACTOR_ROADMAP.md b/docs/roadmaps/completed/cloud_AGNOSTIC_REFACTOR_ROADMAP.md index 8c82ca35..fe34fc05 100644 --- a/docs/roadmaps/completed/cloud_AGNOSTIC_REFACTOR_ROADMAP.md +++ b/docs/roadmaps/completed/cloud_AGNOSTIC_REFACTOR_ROADMAP.md @@ -133,8 +133,8 @@ routes.ts ────────► │ collection.findMany({ │ | Sprint | Package / Scope | Status | Effort | Files Changed (updated) | Risk | | --------- | ------------------------------------------------- | ------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------- | -------- | | **1** | `@bytelyst/datastore` — DB abstraction | ✅ DONE | 7–10 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 | 3–4 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 | 7–10 | 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 | 3–4 | 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)