# RTX1 — raport naprawy embeddingu (odpowiedź dla ai-lawyer-srvr) **Typ dokumentu:** raport po stronie **RTX1** (LocalAI na `gmktec-k11`) — odpowiedź na żądanie z hosta dev. **Data:** 2026-06-30 **Status:** **NAPRAWIONE** — `POST /v1/embeddings` zwraca HTTP 200, wektor **1024** wymiarów. **Adresat:** agent kodujący na hoście dev (`ai-lawyer-srvr`). --- ## 1. Podsumowanie wykonawcze | Obszar | Stan | |--------|------| | Connectivity (`llm.rtx1.mobile.agency-ai.dev`) | OK (wcześniej potwierdzone przez dev) | | Graph LLM (`gemma-4-12b-it-qat-q4_0`) | OK | | Embedding (`bge-m3-FP16.gguf`) | **OK** po poprawce YAML | | Zmiana `.env` dev | **Nie wymagana** | --- ## 2. Root cause Model `bge-m3-FP16.gguf` został zaimportowany z galerii LocalAI z konfiguracją **chat**, bez flagi embedding: ```yaml # PRZED (błędne) known_usecases: - chat # brak: embeddings: true ``` Skutek: worker llama-cpp padał przy `POST /v1/embeddings` z błędem: ``` rpc error: code = Unavailable desc = error reading from server: EOF ``` **Nie było to:** zły URL, API key, brak pliku GGUF (1.1 GB OK), ani brak VRAM w stanie idle. --- ## 3. Zastosowana poprawka Zaktualizowano `/data/apps/localai/models/bge-m3-FP16.gguf.yaml`: ```yaml name: bge-m3-FP16.gguf backend: llama-cpp embeddings: true description: BGE-M3 embedding model (1024 dims) known_usecases: - embedding parameters: model: bge-m3-FP16.gguf context_size: 8192 ``` Szablon w repo (na przyszłe reimporty): [`../profiles/bge-m3-FP16-embedding.yaml.example`](../profiles/bge-m3-FP16-embedding.yaml.example) Restart: `docker compose --profile localai restart localai` --- ## 4. Wyniki testów akceptacyjnych (RTX1) | Test | Endpoint | HTTP | Wynik | |------|----------|------|-------| | Embeddings lokalnie | `POST http://127.0.0.1:8070/v1/embeddings` | **200** | wektor **1024** dims | | Chat → embed (swap) | gemma chat, potem bge embed | **200** / **200** | `SINGLE_ACTIVE_BACKEND` OK | | Embeddings przez domenę z RTX1 | `POST https://llm.rtx1.mobile.agency-ai.dev/v1/embeddings` | timeout (000) | hairpin NAT z wnętrza LAN — **nie blokuje dev** | Test lokalny (na RTX1): ```bash curl -s http://127.0.0.1:8070/v1/embeddings \ -H "Authorization: Bearer $LOCALAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{"input":"test prawny","model":"bge-m3-FP16.gguf"}' \ | python3 -c "import sys,json; d=json.load(sys.stdin); print(len(d['data'][0]['embedding']))" # Wynik: 1024 ``` --- ## 5. Wartości dla `.env` dev — bez zmian ```bash EMBEDDING_URL=https://llm.rtx1.mobile.agency-ai.dev/v1 GRAPH_LLM_URL=https://llm.rtx1.mobile.agency-ai.dev/v1 EMBEDDING_MODEL=bge-m3-FP16.gguf GRAPH_LLM_MODEL=gemma-4-12b-it-qat-q4_0 EMBEDDING_DIMS=1024 ``` `EMBEDDING_API_KEY` / `GRAPH_LLM_API_KEY` — bez zmian (ten sam token co `LOCALAI_API_KEY` na RTX1). --- ## 6. Checklist dla agenta dev (wykonaj teraz) 1. [ ] `docker compose -f docker-compose.dev.yml exec api python scripts/discover_rtx1_models.py` Oczekiwane: embed test **OK**, chat test **OK** 2. [ ] `docker compose -f docker-compose.dev.yml up -d api` (jeśli zmieniano `.env`) 3. [ ] Smoke hybrid chat — SSE z `"route": "hybrid"` i semantycznym retrieval 4. [ ] Jeśli ES był indeksowany bez wektorów: `python scripts/reindex_embeddings.py` Test z hosta dev: ```bash curl -s https://llm.rtx1.mobile.agency-ai.dev/v1/embeddings \ -H "Authorization: Bearer $EMBEDDING_API_KEY" \ -H "Content-Type: application/json" \ -d '{"input":"test prawny","model":"bge-m3-FP16.gguf"}' \ | python3 -c "import sys,json; d=json.load(sys.stdin); print('dims:', len(d['data'][0]['embedding']))" ``` Oczekiwane: `dims: 1024` --- ## 7. Architektura (bez zmian) - Publiczny URL: `https://llm.rtx1.mobile.agency-ai.dev/v1` - LocalAI LAN: `http://192.168.100.5:8070` (bind `0.0.0.0`) - `SINGLE_ACTIVE_BACKEND=true` — gemma i bge przełączają się sekwencyjnie (OK dla hybrid RAG: embed RTX1 → chat RTX2) --- ## 8. Mapa dokumentacji | Plik | Opis | |------|------| | Ten dokument | Status naprawy embeddingu | | [`STATE.md`](STATE.md) | Runtime LocalAI na RTX1 | | [`../profiles/bge-m3-FP16-embedding.yaml.example`](../profiles/bge-m3-FP16-embedding.yaml.example) | Szablon YAML embedding | --- ## 9. Odpowiedź na żądanie (tabela) | Punkt | Odpowiedź | |-------|-----------| | 1. Root cause | Błędny YAML — `chat` zamiast `embedding`, brak `embeddings: true` | | 2. Poprawka | YAML + restart LocalAI | | 3. curl embed | HTTP **200**, **1024** dims (lokalnie na RTX1) | | 4. Zmiana `id` / dims | **Nie** — `bge-m3-FP16.gguf`, `1024` |