# Vector-sync HTTP embedding provider

This provider supports two endpoints:

- `POST {baseUrl}/vector-sync` for single-text requests
- `POST {baseUrl}/vectorize-batch` for batch document requests

## Single request

Request body:
```json
{
  "model": "intfloat/multilingual-e5-large",
  "text": "This is a sample text to vectorize"
}
```

## Batch request

Request body:
```json
{
  "model": "intfloat/multilingual-e5-large",
  "truncate_text": false,
  "truncate_length": 512,
  "chunk_size": 20,
  "items": [
    {
      "id": "2f48fd5c-9d39-4d80-9225-ea0c59c77c9a",
      "text": "This is a sample text to vectorize"
    }
  ]
}
```

## Provider configuration

```yaml
batch-request:
  truncate-text: false
  truncate-length: 512
  chunk-size: 20
```

These values are used for `/vectorize-batch` calls and can also be overridden per request via `EmbeddingRequest.providerOptions()`.

## Orchestrator batch processing

To let `RepresentationEmbeddingOrchestrator` send multiple representations in one provider call, enable batch processing for jobs and for the model:

```yaml
dip:
  embedding:
    jobs:
      enabled: true
      parallel-batch-count: 1
      process-in-batches: true
      execution-batch-size: 20

    models:
      e5-default:
        supports-batch: true
```

Notes:
- jobs are grouped by `modelKey`
- non-batch-capable models still fall back to single-item execution
- `parallel-batch-count` controls how many claimed job batches may be started in parallel
- `execution-batch-size` controls how many texts are sent in one `/vectorize-batch` request inside each claimed job batch


## E5 prefix handling

For models such as `intfloat/multilingual-e5-large`, configure prefix handling on the model:

```yaml
dip:
  embedding:
    models:
      e5-default:
        provider-config-key: vector-sync-e5
        provider-model-key: intfloat/multilingual-e5-large
        dimensions: 1024
        supports-batch: true
        prefix-mode: CLIENT
        query-prefix: "query: "
        document-prefix: "passage: "
```

Supported modes:
- `OFF` - DIP sends raw text
- `CLIENT` - DIP prepends the configured prefix before calling the provider
- `EXTERNAL` - DIP assumes the external service applies the prefixing itself

For persisted document embeddings, the produced prefix provenance is stored in `doc.doc_embedding`:
- `prefix_profile_id` (resolved via `DOC.doc_embedding_prefix_profile`)

This makes it possible to identify whether indexed vectors were created with raw text, DIP-side prefixing, or externally handled prefixing before deciding on re-embedding.
