---
name: openrouter-embeddings
description: Generate text embeddings via OpenRouter using Qwen3-Embedding-8B.
---
# openrouter-embeddings
Text → embedding vector via OpenRouter. Default model: `qwen/qwen3-embedding-8b`.
## Usage
Resolve `TOOL_DIR` = the directory containing this `SKILL.md`. Commands below use `TOOL_DIR` as a symbolic placeholder; replace it with the resolved, quoted path before running Bash.
### Single text
```bash
export OPENROUTER_API_KEY=sk-or-v1-...
python3 TOOL_DIR/scripts/embed.py \
--text "The quick brown fox jumps over the lazy dog" \
--output vec.json
```
### Batch from JSONL
Input `records.jsonl` (one JSON per line):
```
{"id": "row_0", "text": "Every place name in the United States."}
{"id": "row_1", "text": "Nearby stars and potential exoplanets."}
```
Run:
```bash
python3 TOOL_DIR/scripts/embed.py \
--jsonl records.jsonl \
--output records_with_embeddings.jsonl \
--batch-size 32
```
Output is the same JSONL with an added `embedding` field per line.
## Flags
| Flag | Default | Description |
|---|---|---|
| `--text` | — | Embed one string (mutually exclusive with `--jsonl`) |
| `--jsonl` | — | Embed many; each line must have a `text` field |
| `--output` | required | Output path |
| `--model` | `qwen/qwen3-embedding-8b` | Any embedding model on OpenRouter |
| `--batch-size` | `32` | Records per API call (jsonl mode) |
| `--dimensions` | — | Optional: truncate to N dims if supported |
## Endpoint
`POST /api/v1/embeddings` — OpenAI-compatible schema.
Request:
```json
{ "model": "qwen/qwen3-embedding-8b", "input": ["text1", "text2", ...] }
```
Response:
```json
{ "data": [ { "embedding": [0.01, -0.02, ...], "index": 0 }, ... ], "model": "...", "usage": {...} }
```
## Notes
- `qwen3-embedding-8b` outputs high-dimensional dense vectors suitable for semantic similarity, clustering, RAG.
- For cheaper batches, consider `qwen/qwen3-embedding-4b` or other listed embedding models (`GET /api/v1/embeddings/models`).