Models
flinq ships models specialized on the European construction (AEC) domain, trained by flinq on European construction data, starting from open Qwen3 base models. German is the deepest-trained language. The 2.0 models were also trained and evaluated on 12 further European languages: English, Dutch, Czech, Polish, French, Portuguese, Spanish, Italian, Swedish, Hungarian, Romanian and Danish.
Three model ids are available:
- Embedding models serve
/v1/embeddings,/v1/searchand/v1/chunk.flinq-embed-2.0(GA) is the recommended default. It embeds text and images into one vector space and reads search queries with trained task instructions.flinq-embed-1.5-beta(beta) is a text-only model with 1024-dim vectors.
- Rerank model serves
/v1/rerank.flinq-rerank-2.0(GA) is a cross-encoder that returns calibrated relevance scores, for texts and images.
All three are billed at the same price.
Model ids and versioning
Section titled “Model ids and versioning”model is required on every request. An embedding model works on
/v1/embeddings, /v1/search and /v1/chunk; the rerank model works on
/v1/rerank. A model sent to an endpoint of the other type returns 422
naming the models for that endpoint. There is no silent substitution: you always
get exactly the model you request, and an unknown id returns 404 with the list
of available models. Discover the current ids, dimensions, tasks and limits at
any time:
curl https://api.flinq.ai/v1/models -H "Authorization: Bearer flq_your_key_here"An id keeps serving exactly the model it names. A new model version gets a new id, so your stored vectors stay comparable until you decide to re-embed on a newer version yourself.
Vectors from different models are not comparable with each other. Embed a corpus and its queries with the same model id, and re-embed the corpus when you switch.
Embedding models
Section titled “Embedding models”flinq-embed-2.0
Section titled “flinq-embed-2.0”| Property | Value |
|---|---|
| Stage | GA |
| Type | embedding |
| Endpoints | /v1/embeddings, /v1/search, /v1/chunk |
| Modalities | text and images (images on /v1/embeddings) |
| Native dimension | 2048 |
| Matryoshka dimensions | 2048 / 1024 / 512 / 256 / 128 |
| Max input | 8,192 tokens per text |
| Max inputs per request | 256 |
| Query tasks | lv_matching, image_search, retrieval (default) |
| Images | PNG, JPEG or WebP as base64 data URL; up to 5 MB and 50 MP each, up to 16 per request |
| Output | L2-normalized float vectors |
| Distance | cosine (equivalently, dot product on normalized vectors) |
| Domain | European construction (AEC); German plus 12 further European languages |
| Price | EUR 0.40 per 1M tokens (images billed as their visual tokens) |
flinq-embed-1.5-beta
Section titled “flinq-embed-1.5-beta”| Property | Value |
|---|---|
| Stage | beta |
| Type | embedding |
| Endpoints | /v1/embeddings, /v1/search, /v1/chunk |
| Modalities | text |
| Native dimension | 1024 |
| Matryoshka dimensions | 1024 / 768 / 512 / 256 / 128 |
| Max input | 8,192 tokens per text |
| Max inputs per request | 256 |
| Query tasks | none (sending task returns 422) |
| Output | L2-normalized float vectors |
| Distance | cosine (equivalently, dot product on normalized vectors) |
| Domain | European construction (AEC); deepest-trained language German |
| Price | EUR 0.40 per 1M tokens |
Queries and documents
Section titled “Queries and documents”Retrieval is asymmetric: a short search query and the passage that answers it
are different kinds of text. On /v1/embeddings, mark which side you are
embedding with input_type:
"document"(the default) for everything that gets searched: your corpus, catalogue entries, chunks, images."query"for the search queries you run against it.
On flinq-embed-2.0, a query can also name a task, which selects the
instruction the model was trained with for that kind of search:
task | Use it for |
|---|---|
lv_matching | A bill-of-quantities (LV) position matched against a cost or product catalogue. |
image_search | A text query against figures, drawings and diagrams. |
retrieval | General passages. The default. |
/v1/search applies the query side automatically; pass task there to pick the
instruction. The instruction is added on the server and is not billed. Images
are always documents.
Images
Section titled “Images”On flinq-embed-2.0, text and images share one vector space, so a text query
finds the drawing it describes. Send images as OpenAI chat content parts inside
input, and mix them freely with texts in the same request:
{ "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBORw0KGgo..." } }Only base64 data URLs are accepted; remote http(s) URLs are not fetched. Images
are scaled down, keeping the aspect ratio, to at most 802,816 pixels (about
0.8 MP, for example 896 × 896), and EXIF rotation is respected. An image is billed
as its visual tokens: one token per 32 × 32-pixel block after scaling, at most
784 tokens per image. See Embeddings for a
full example.
/v1/search is text-only, because its BM25 leg needs text. For image search,
embed your images as documents and your text queries with
"task": "image_search", or rerank image documents with flinq-rerank-2.0 on
/v1/rerank.
Choosing dimensions
Section titled “Choosing dimensions”Both embedding models are Matryoshka-trained: the first N components of each
vector are a faithful embedding on their own. Choose the slice that fits your
index budget and latency target with dimensions; flinq truncates and
re-normalizes.
flinq-embed-2.0 (native 2048):
- 2048. Default. Highest retrieval quality.
- 1024. Half the storage. A good choice for vector stores that index at
most 2,000 dimensions, such as pgvector’s
vectortype. - 512. Balanced point for large indexes where serving cost matters.
- 256. Cheap, large-scale ANN for a small quality drop.
- 128. Smallest footprint, for very large corpora or tight memory budgets where some quality loss is acceptable.
flinq-embed-1.5-beta (native 1024):
- 1024. Default. Highest retrieval quality for this model.
- 768. A modest reduction with minimal quality cost.
- 512, 256, 128. Progressively smaller and cheaper, as above.
A common pattern is to retrieve on a smaller slice for speed, then rerank the
top-k pool with flinq-rerank-2.0 on /v1/rerank, which
reads the full texts and returns a calibrated score.
Rerank model
Section titled “Rerank model”flinq-rerank-2.0
Section titled “flinq-rerank-2.0”| Property | Value |
|---|---|
| Stage | GA |
| Type | rerank (cross-encoder) |
| Endpoints | /v1/rerank |
| Modalities | text and images (images as documents) |
| Score | calibrated relevance_score in [0, 1] |
| Max documents per request | 128 |
| Max query | 1,024 tokens |
| Max document | 3,000 tokens per document |
| Query tasks | lv_matching, image_search, retrieval (default) |
| Images | PNG, JPEG or WebP as base64 data URL; up to 5 MB and 50 MP each, up to 16 per request |
| Domain | European construction (AEC); German plus 12 further European languages |
| Price | EUR 0.40 per 1M tokens (query once plus every document; images billed as their visual tokens) |
Given a query and a list of candidate documents, /v1/rerank returns them
reordered by relevance, each with a score. The reranker reads the query and
each document together in one pass, and relevance_score is a calibrated
relevance probability between 0 and 1. Because the score means the same thing
from one query to the next, you can set a threshold on it and decide that
no candidate matches. See Rerank for parameters
and a no-match example.