Jina Embeddings
Multimodal embedding service using Jina Embeddings v4. Generates embeddings for text, images, or mixed content.
Port: 8080
Model: jinaai/jina-embeddings-v4
What it Does
Jina Embeddings generates dense vectors for:
- Text embeddings - Queries and passages
- Image embeddings - Visual content
- Multimodal - Combined text and image inputs
Use cases:
- Semantic text search
- Image similarity search
- Cross-modal retrieval (text → image)
API Endpoints
Text Embeddings
Endpoint: POST /embeddings/text
curl -X POST "http://jina-embeddings:8080/embeddings/text" \
-H "Content-Type: application/json" \
-d '{
"texts": ["What is climate change?", "Global warming effects"],
"input_type": "query",
"normalize": true
}'Request:
| Parameter | Type | Description |
|---|---|---|
texts | array | List of texts |
input_type | string | query or passage |
normalize | boolean | L2 normalize (default: true) |
Response:
{
"embeddings": [[0.1, 0.2, ...], [0.15, 0.18, ...]],
"dimensions": 1024,
"model": "jinaai/jina-embeddings-v4",
"normalized": true
}Image Embeddings
Endpoint: POST /embeddings/image
curl -X POST "http://jina-embeddings:8080/embeddings/image" \
-H "Content-Type: application/json" \
-d '{
"images": ["<base64-encoded-image>"],
"normalize": true
}'Multimodal Embeddings
Endpoint: POST /embeddings/multimodal
curl -X POST "http://jina-embeddings:8080/embeddings/multimodal" \
-H "Content-Type: application/json" \
-d '{
"inputs": [
{"type": "text", "content": "Describe this", "text_type": "query"},
{"type": "image", "content": "<base64-image>"}
],
"normalize": true
}'Health Check
curl http://jina-embeddings:8080/healthUsage Example
import requests
# Text embeddings
response = requests.post(
"http://jina-embeddings:8080/embeddings/text",
json={
"texts": ["machine learning basics", "deep neural networks"],
"input_type": "passage",
"normalize": True
}
)
result = response.json()
print(f"Embedding dimensions: {result['dimensions']}")
print(f"First embedding: {result['embeddings'][0][:5]}...")Query vs Passage
Use the right input_type for best results:
- query - For search queries (short, question-like)
- passage - For documents being indexed (longer text)
# Indexing documents
doc_embeddings = requests.post(
"http://jina-embeddings:8080/embeddings/text",
json={"texts": documents, "input_type": "passage"}
).json()
# Searching
query_embedding = requests.post(
"http://jina-embeddings:8080/embeddings/text",
json={"texts": [user_query], "input_type": "query"}
).json()Configuration
| Variable | Default | Description |
|---|---|---|
MODEL_NAME | jinaai/jina-embeddings-v4 | Model identifier |
MAX_MODEL_LEN | 8192 | Maximum input length |
GPU_MEMORY_UTILIZATION | 0.95 | GPU memory usage |