Skip to content

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/search and /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 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.

PropertyValue
StageGA
Typeembedding
Endpoints/v1/embeddings, /v1/search, /v1/chunk
Modalitiestext and images (images on /v1/embeddings)
Native dimension2048
Matryoshka dimensions2048 / 1024 / 512 / 256 / 128
Max input8,192 tokens per text
Max inputs per request256
Query taskslv_matching, image_search, retrieval (default)
ImagesPNG, JPEG or WebP as base64 data URL; up to 5 MB and 50 MP each, up to 16 per request
OutputL2-normalized float vectors
Distancecosine (equivalently, dot product on normalized vectors)
DomainEuropean construction (AEC); German plus 12 further European languages
PriceEUR 0.40 per 1M tokens (images billed as their visual tokens)
PropertyValue
Stagebeta
Typeembedding
Endpoints/v1/embeddings, /v1/search, /v1/chunk
Modalitiestext
Native dimension1024
Matryoshka dimensions1024 / 768 / 512 / 256 / 128
Max input8,192 tokens per text
Max inputs per request256
Query tasksnone (sending task returns 422)
OutputL2-normalized float vectors
Distancecosine (equivalently, dot product on normalized vectors)
DomainEuropean construction (AEC); deepest-trained language German
PriceEUR 0.40 per 1M tokens

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:

taskUse it for
lv_matchingA bill-of-quantities (LV) position matched against a cost or product catalogue.
image_searchA text query against figures, drawings and diagrams.
retrievalGeneral 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.

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.

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 vector type.
  • 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.

PropertyValue
StageGA
Typererank (cross-encoder)
Endpoints/v1/rerank
Modalitiestext and images (images as documents)
Scorecalibrated relevance_score in [0, 1]
Max documents per request128
Max query1,024 tokens
Max document3,000 tokens per document
Query taskslv_matching, image_search, retrieval (default)
ImagesPNG, JPEG or WebP as base64 data URL; up to 5 MB and 50 MP each, up to 16 per request
DomainEuropean construction (AEC); German plus 12 further European languages
PriceEUR 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.