Migrate all repos into monorepo context folders

Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
      Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
      Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)

Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
This commit is contained in:
2026-06-30 20:39:52 +02:00
parent 2f2b295531
commit a5f8fb49ab
1717 changed files with 447332 additions and 0 deletions
@@ -0,0 +1,65 @@
# Capability: Embedding Prefetch & Batch Similarity
## ADDED Requirements
### Requirement: Bulk prefetch and deduplicate embedding inputs
The server MUST collect all texts that require embeddings for a matching run, normalize them, deduplicate them, and prefetch their embeddings before computing similarity scores.
#### Scenario: Matching run with repeated competences
- Given a matching run where the required competences contain duplicates (e.g. "Python", "Python")
- And a candidate list contains overlapping competences (e.g. multiple candidates list "Python")
- When the similarity computation starts
- Then the embedding for "Python" is requested at most once from the Azure embeddings API
- And all uses of "Python" reuse the same embedding vector for similarity computation
### Requirement: Compute similarity using prefetched vectors (no inner-loop embedding calls)
The similarity computation MUST use prefetched embedding vectors and MUST NOT request embeddings from inside per-competence or per-candidate inner loops.
#### Scenario: Per-skill similarity on large candidate set
- Given required competences and a large candidate competence list
- When `per_skill` similarity is computed
- Then all embeddings are resolved prior to the nested loops
- And the nested loops perform only cosine similarity calculations
## MODIFIED Requirements
### Requirement: Batch embedding API support in Azure client
`AzureOpenAIClient.get_embeddings_batch(...)` MUST support true request-level batching using the Azure embeddings API (`input=[...]`) and MUST preserve input ordering.
#### Scenario: Batch embedding input list
- Given a list of N texts to embed
- When `get_embeddings_batch(texts)` is called
- Then the client makes as few Azure embedding requests as possible (subject to chunking)
- And the returned list of embeddings aligns with `texts` order
### Requirement: Run-scoped in-memory embedding cache
The server MUST maintain a run-scoped in-memory cache to prevent repeated SQLite cache reads for identical texts during a single matching operation.
#### Scenario: Frequent repeated cache hits within one run
- Given cached embeddings are present on disk
- And a matching run needs the same text embedding multiple times
- When the similarity engine resolves embeddings
- Then repeated lookups for the same text are served from an in-memory cache after the first lookup
- And no additional SQLite reads are required for that text during the run
## REMOVED Requirements
### Requirement: Sequential batch behavior requirement
The previous constraint that `get_embeddings_batch` must call the embeddings API sequentially per text is removed.
#### Scenario: Legacy sequential constraint
- Given earlier requirements constrained `get_embeddings_batch` to per-text calls
- When the system is upgraded for performance
- Then this constraint no longer applies
- And request-level batching is allowed