Embeddings client runbook
Operator notes for POST /v1/embeddings when OmniRoute sits in front of
Hindsight 0.9.1 (text-only encode(list[str])) and Memorix 1.6.0 (Jina media
gate). Live-verified 2026-08-17 against OmniRoute 3.8.49 at
https://omniroute.jaguar-fish.ts.net/v1. No secrets below.
Working model ids
Section titled “Working model ids”| Client id | HTTP | Vectors | Dim | Notes |
|---|---|---|---|---|
openrouter/google/gemini-embedding-2 |
200 | batch 2 → 2 | 3072 | Works without a native Gemini key |
openrouter/google/gemini-embedding-2-preview |
200 | batch 2 → 2 | 3072 | Same space as the non-preview id |
openrouter/google/gemini-embedding-001 |
200 | batch 2 → 2 | 3072 | Listed in GET /v1/embeddings |
jina-ai/jina-embeddings-v5-omni-small |
200 | batch 2 → 2 | 1024 | Canonical Jina omni id |
jina/jina-embeddings-v5-omni-small |
200 | batch 2 → 2 | 1024 | Alias; response model is jina-ai/... |
jina-embeddings-v5-omni-small |
200 | batch 2 → 2 | 1024 | Bare id also resolves |
jina-ai/jina-embeddings-v5-omni-nano |
200 | 1 → 1 | 768 | Different vector space from small |
GET /v1/models and GET /v1/embeddings listed
jina-ai/jina-embeddings-v5-omni-small (1024) and
jina-ai/jina-embeddings-v5-omni-nano (768) and
openrouter/google/gemini-embedding-001. They did not list
openrouter/google/gemini-embedding-2 even though that id already serves.
Do not mix nano (768-d) and small (1024-d) in one index. They are not comparable.
Broken / misleading ids
Section titled “Broken / misleading ids”Native Gemini Embedding 2
Section titled “Native Gemini Embedding 2”Request:
{ "model": "gemini-embedding-2", "input": ["alpha", "beta"] }Actual (2026-08-17): HTTP 400
{ "error": { "message": "No credentials for embedding provider: gemini", "type": "invalid_request_error", "code": "bad_request" }}gemini/gemini-embedding-2 returns the same 400. google/gemini-embedding-2
returns HTTP 400 Unknown embedding provider: google unless a custom
provider node uses the google prefix.
Expected: either a native Gemini embed with a Google AI Studio key on the
gemini provider, or a 400 that names the working OpenRouter id.
Repro (redact the bearer):
curl -sS -D- https://omniroute.example/v1/embeddings \ -H "Authorization: Bearer $OMNIROUTE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"gemini-embedding-2","input":["alpha","beta"]}'Working substitute:
curl -sS https://omniroute.example/v1/embeddings \ -H "Authorization: Bearer $OMNIROUTE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"openrouter/google/gemini-embedding-2","input":["alpha","beta"]}'Native gemini-embedding-2 cannot succeed from GitOps alone. A Google AI
Studio key must be added as a gemini provider connection (dashboard or
GEMINI_API_KEY imported into OmniRoute). That secret is not in this repo.
Jina multimodal path
Section titled “Jina multimodal path”POST /v1/multimodal-embeddings → HTTP 404
{ "error": { "message": "Unknown API route: /v1/multimodal-embeddings", "type": "not_found", "code": "unknown_route", "path": "/v1/multimodal-embeddings" }}Use POST /v1/embeddings until an alias exists.
Jina / Memorix image object
Section titled “Jina / Memorix image object”OmniRoute canonical image item (28×28 PNG, 784 pixels — Jina rejects 1×1):
{ "model": "jina-ai/jina-embeddings-v5-omni-small", "input": [ { "type": "image", "source": { "type": "base64", "data": "<base64-png>", "media_type": "image/png" } } ]}Actual: HTTP 200, 1 vector, 1024-d.
Memorix 1.6.0 / Jina native shape:
{ "model": "jina-ai/jina-embeddings-v5-omni-small", "input": [{ "image": "data:image/png;base64,<base64-png>" }]}Actual: HTTP 400
{ "error": { "message": "Invalid request", "type": "invalid_request_error", "code": "bad_request" }}{ "text": "..." } mixed with { "image": "data:..." } is the same 400.
Client notes
Section titled “Client notes”Hindsight 0.9.1
Section titled “Hindsight 0.9.1”Hindsight embeddings are text-only (encode(list[str])). It does not send
image objects. Point Hindsight’s OpenAI-compatible embeddings base URL at
OmniRoute /v1 and use a working id from the table above
(jina-ai/jina-embeddings-v5-omni-small or
openrouter/google/gemini-embedding-2). Do not set the model to bare
gemini-embedding-2 unless a gemini API key exists on the gateway.
Memorix 1.6.0
Section titled “Memorix 1.6.0”Memorix only treats baseUrl matching /jina\.ai/i as native media. An
OmniRoute URL stays on the text-only path even when the model is Jina omni.
That gate is a Memorix client issue. Independently, OmniRoute still rejects
the Jina {image: "data:..."} body that Memorix would send if the gate
opened, so Jina-compatible clients cannot embed images through OmniRoute
without the canonical {type,source} schema.
Use jina-ai/jina-embeddings-v5-omni-small for text. Do not point Memorix
base_url at https://api.jina.ai — keep OmniRoute as the only hop.
HagiCode
HagiCode is an agentic coding workspace: structured workflows, multi-agent execution, and Hero Dungeon views turn ideas into shipped software.
Turn ideas into polished, usable software with a smarter, faster, and more enjoyable agentic coding workflow.

- SmartStructured workflows turn intent into an executable path from idea to shipped change.
- EfficientMulti-agent workflows keep research, implementation, and review moving in parallel.
- FunHero Dungeon interfaces make long coding sessions visual, collaborative, and rewarding.