Infrastructure configs for GMKtec K11 (Docker, vLLM, LocalAI, ComfyUI, control-plane, gpu-fan agent, Server UI with CLI/file explorer/GPU fan curve). Co-authored-by: Cursor <cursoragent@cursor.com>
4.5 KiB
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:
# 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:
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
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):
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
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)
docker compose -f docker-compose.dev.yml exec api python scripts/discover_rtx1_models.py
Oczekiwane: embed test OK, chat test OKdocker compose -f docker-compose.dev.yml up -d api(jeśli zmieniano.env)- Smoke hybrid chat — SSE z
"route": "hybrid"i semantycznym retrieval - Jeśli ES był indeksowany bez wektorów:
python scripts/reindex_embeddings.py
Test z hosta dev:
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(bind0.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 |
Runtime LocalAI na RTX1 |
../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 |