# Parallel embedding subsystem plan (NV1–NV3) This plan assumes the old vectorization subsystem remains in place temporarily, while a new generic embedding subsystem is built in parallel. ## Principles - Build the new subsystem under `at.procon.dip.embedding.*`. - Do not shape it around old TED-specific or legacy vectorization services. - Operate on `DocumentTextRepresentation` and `DocumentEmbedding` as the core abstraction. - Keep the new subsystem configurable and provider-based. - Migrate and cut over later. ## NV1 — provider/model/query foundation ### Goal Create a standalone embedding foundation that can: - resolve configured providers - resolve configured models - embed arbitrary text lists - embed search queries - support deterministic testing ### Deliverables - `EmbeddingProperties` - `EmbeddingUseCase` - `EmbeddingRequest` - `EmbeddingProviderResult` - `EmbeddingModelDescriptor` - `ResolvedEmbeddingProviderConfig` - `EmbeddingProvider` - `ExternalHttpEmbeddingProvider` - `MockEmbeddingProvider` - `EmbeddingProviderRegistry` - `EmbeddingModelRegistry` - `EmbeddingProviderConfigResolver` - `EmbeddingExecutionService` - `QueryEmbeddingService` - startup validation of provider/model wiring ### Notes - No cutover to the old vectorization path yet. - No persistence/job orchestration yet. - New subsystem should be safe to include in the app while disabled by default. ## NV2 — persistence and job orchestration ### Goal Make the new subsystem able to create and process embedding jobs against `DocumentTextRepresentation`. ### Deliverables - `EmbeddingJob` entity/repository/service - retry / backoff policy - default `EmbeddingSelectionPolicy` - representation-level embedding execution - `DocumentEmbedding` persistence updates through the new subsystem ## NV3 — generic semantic search engine ### Goal Add semantic search into the generic search platform using only the new subsystem. ### Deliverables - `PgVectorSemanticSearchEngine` - `DocumentSemanticSearchRepository` - query embedding through `QueryEmbeddingService` - chunk-aware retrieval and collapse - fusion with lexical search ## Migration philosophy Because the app is still in development, prefer: 1. migrate documents and text representations first 2. re-embed through the new subsystem 3. only preserve old raw vector data if there is a strong operational reason ## Recommended implementation order 1. NV1 foundation 2. NV1 tests with mock provider 3. NV2 jobs and selection policy 4. NV3 semantic search 5. migration/backfill 6. cutover