Files
2026-04-27 20:17:05 -07:00

2.4 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

See the root CLAUDE.md for overall architecture, service roles, and deployment layout.

Running This Service

npm run embedding                          # From repo root
npm -w packages/embedding-service run dev  # With --watch

Default port: 3003. Requires Ollama to be reachable at OLLAMA_URL.

Single-File Service

The entire service is src/index.js — no subdirectory structure. All routes, the Ollama helper, and startup are in one file.

Environment Variables

Variable Default Description
PORT 3003 Port to listen on
OLLAMA_URL http://localhost:11434 Ollama instance URL
EMBEDDING_MODEL nomic-embed-text Model passed to Ollama /api/embed

Note: the env var name is EMBEDDING_MODEL, not EMBED_MODEL — the internal constant is EMBED_MODEL but the lookup key is different.

Ollama API Details

Uses Ollama's /api/embed endpoint (not /api/embeddings). Request shape:

{ "model": "nomic-embed-text", "input": "text to embed" }

Ollama returns { "embeddings": [[...]] } — an array of arrays even for a single input. The helper takes data.embeddings[0] to return the single vector.

The ollama npm package is listed as a dependency but is not used — all calls are raw fetch. Do not refactor to use the package without checking the API shape matches.

Batch Endpoint

POST /embed/batch embeds items sequentially in a for-loop, not in parallel. The comment explains this: Ollama doesn't parallelise embedding calls, so parallel requests would queue internally anyway. Do not change to Promise.all without verifying Ollama behaviour.

Error Responses

Condition Status Notes
Missing/empty text 400
Ollama call fails 502 Upstream failure — correct status
Empty texts array 400

Known Issue

The 400 error message for /embed reads "text is required and must be empty" — the word "not" is missing. Should read "must not be empty".

API Endpoints

Method Path Notes
GET /health Static response — does not verify Ollama is reachable
POST /embed Body: { text: string }. Returns { embedding, model, dimensions }
POST /embed/batch Body: { texts: string[] }. Returns { embeddings, model, dimensions, count }