/ Модель

Характеристики

Контекст
32 768 токенов
Параметры
508 млн
Лицензия
Apache 2.0
Архитектура
qwen3 · dense
Базовая модель
Qwen3-Embedding-0.6B
Библиотека
sentence-transformers
Опубликована
20 апр 2026

Qwen3-Embedding-0.6B-GraphQL

ЭмбеддингиТекст → embedding4 профессии

Qwen3-Embedding-0.6B-GraphQL — компактная модель эмбеддингов, дообученная xthor на базе Qwen/Qwen3-Embedding-0.6B с использованием набора данных xthor/Qwen3-Embedding-GraphQL-v1.

941скачиваний за 30 дней6лайковвеса обновлены16 июл 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Эмбеддинги» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

Она предназначена для локального извлечения GraphQL-координат Type.field по вопросам на естественном языке, особенно в AI-агентах, которым нужно находить релевантные части большой схемы без передачи всей схемы в контекст. Указанный язык — английский.

Модель основана на архитектуре SentenceTransformers, содержит около 0,6 млрд параметров и формирует векторы размерности 1024. Для запросов и документов корпуса предусмотрены отдельные промпты: query следует использовать для естественно-языковых вопросов, а document — для описаний GraphQL-координат. Поддерживаются веса SentenceTransformers и сборки GGUF для llama.cpp и Ollama; доступны варианты F16, Q8_0 и Q4_K_M с различным соотношением качества и размера.

Ключевое преимущество — специализация на различении одинаковых имён полей у разных GraphQL-типов. На приведённом бенчмарке модель достигает recall@20 50,6% и recall@50 63,6%, превосходя базовую модель и указанные OpenAI-эмбеддинги по извлечению полевых координат. Качество существенно зависит от формата корпуса: рекомендуются SDL-фрагменты или форматирование dot_plus_gloss. Ограничения включают сравнительно невысокий размер контекста и специализацию на GraphQL retrieval; показатели зависят от структуры схемы и представления документов. Модель распространяется по лицензии Apache-2.0.

Для каких профессий подходит4

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Qwen3-Embedding-0.6B-GraphQL

A small, self-hosted embedding model for retrieving GraphQL Type.field coordinates from natural-language questions. It is designed for schema retrieval in AI agent pipelines, where the full schema is too large to place in context for every request.

Real schemas reuse field names extensively. Many types expose fields such as title, author, createdAt, state, or status, so matching the field name alone is not enough; retrieval must also identify the correct owner type.

This model fine-tunes Qwen/Qwen3-Embedding-0.6B for that owner-type disambiguation task. At 0.6B parameters, it can run locally on CPU or alongside an agent's primary model.

Benchmark

The GraphQL AI Working Group benchmark evaluates 816 natural-language queries across GitHub, GitLab, Linear, Shopify, and the Singapore Open Data API. Field-level recall against the ground-truth Type.field coordinate:

modeldimrecall@20recall@50
Qwen3-Embedding-0.6B-GraphQL (fine-tune)102450.6%63.6%
OpenAI text-embedding-3-large307247.3%59.8%
Qwen3-Embedding-0.6B (base, un-tuned)102446.7%58.5%
OpenAI text-embedding-3-small153642.3%54.3%

The fine-tune leads field-level retrieval at both cutoffs and improves recall@50 by 5.1 percentage points over its base model. At the owner-type level, text-embedding-3-large leads at 87.8% recall@50; the fine-tune reaches 85.6%, ahead of the base model at 78.6% and text-embedding-3-small at 80.8%.

The model ships as SentenceTransformers weights and GGUF builds for llama.cpp and Ollama.

Important: how you format the corpus matters as much as the model. Use SDL snippets or dot_plus_gloss formatting for best results. See Embedding style comparison for details.


Inference

SentenceTransformers

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("xthor/Qwen3-Embedding-0.6B-GraphQL")

query = "When did I place this order?"
# coordinates of Type.field pairs
coords = [
    "Order.createdAt",
    "Order.completedAt",
    "Order.updatedAt",
]

q = model.encode(query, prompt_name="query")
c = model.encode(coords, prompt_name="document")
scores = (q @ c.T).tolist()

for coord, score in sorted(zip(coords, scores), key=lambda x: -x[1]):
    print(f"{score:.3f}  {coord}")

The fine-tuned model ranks Order.createdAt first; the un-tuned base model ranks Order.completedAt first. This is a small sanity check using readable bare coordinates. For production retrieval, use the richer SDL or gloss formatting described below.

Two prompts are wired into the model and must be used for best results:

  • prompt_name="query" for natural-language questions
  • prompt_name="document" for GraphQL coordinate descriptions in the corpus

Ollama

# pull one quantization (Q8_0 is a good default: near-lossless, ~650 MB)
hf download xthor/Qwen3-Embedding-0.6B-GraphQL model-q8_0.gguf --local-dir .

cat > Modelfile <<'EOF'
FROM ./model-q8_0.gguf
EOF
ollama create qwen3-graphql-embedder -f Modelfile

# OpenAI-compatible embeddings endpoint
curl -s http://localhost:11434/v1/embeddings \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen3-graphql-embedder","input":"When did I place this order?"}' \
  | jq '.data[0].embedding'

llama.cpp

hf download xthor/Qwen3-Embedding-0.6B-GraphQL model-q8_0.gguf --local-dir .

./llama-server -m model-q8_0.gguf --embedding --port 8080
# POST http://localhost:8080/embedding   { "content": "..." }

Available GGUF quantizations

filesizeuse case
model-f16.gguf~1.2 GBreference quality, parity with safetensors
model-q8_0.gguf~650 MBnear-lossless; recommended default
model-q4_k_m.gguf~400 MBsmall footprint; accepts a minor quality trade-off

Results

223 held-out test queries · 28,893-coordinate corpus · 30% real SDLs (GitHub GHES, Saleor, Shopify, AniList) never seen in training.

metricbaselinetuned (3 epochs)lift
exact_match@10.0900.229+0.139 (+155%)
recall@30.1300.318+0.188
recall@50.1610.345+0.184 (+114%)
recall@100.2150.435+0.220 (+102%)
mrr@100.1210.285+0.164
ndcg@100.1430.320+0.177

baseline vs tuned — headline metrics

recall@k across the sweep

Where the lift comes from

Direct questions ("has my package shipped?", "what's my total?") are already handled well by the base model. The gains come from indirect questions where the user names a concept rather than a field. Those require owner-type reasoning, and that's where the base model falls behind.

Small inference example

"When did I place this order?"

Against the bare coordinates Order.createdAt, Order.completedAt, and Order.updatedAt, the base model ranks Order.completedAt first. The fine-tuned model ranks the correct coordinate, Order.createdAt, first and opens a clearer margin:

modelOrder.createdAtOrder.completedAttarget margin
base0.6190.650-0.031
fine-tuned0.6600.601+0.059

Every candidate is a plausible timestamp on the same order. The model must distinguish when the order was placed from when it was completed or last updated. This three-candidate example is an illustrative sanity check; the aggregate results above measure retrieval quality over the full held-out corpus.

Known limitations

  1. Formatting sensitivity. With raw dot notation (Type.field), the fine-tune's R@1 is only 0.308 on the GitHub schema. Always use sdl, dot_plus_gloss, or natural formatting for the corpus.

  2. Same-owner wrong-field rate. same_owner_wrong_field_rate@1 rose from 0.063 to 0.103. The model picks the right owner type more often but occasionally lands on the wrong field within that type. The training signal rewards owner disambiguation; within-owner field disambiguation isn't targeted. The next iteration will add competition sets that share owner and differ by field.

  3. Tail regression with raw dot notation. When using raw dot notation, the fine-tune's P95 rank (404) is worse than the base model's (123). The model becomes more confident: it either ranks the correct answer first or misses much harder. This is fully mitigated by using sdl (P95 40) or dot_plus_gloss (P95 41) formatting.

  4. Indirect queries. Queries that don't name or allude to the owner type (e.g., "get the README" → Repository.object) remain hard for both models. The fine-tune does not improve on these.

metric deltas

How you format the corpus matters

How you turn each Type.field coordinate into text before embedding it affects retrieval more than the fine-tune does. The benchmark below compares twelve formats on the GitHub GraphQL schema (52 held-out queries):

embedding style comparison

Use one of these two. They tie at the top:

# sdl: if you parse the schema (MRR 0.723)
type PullRequest { baseRefName: String! }

# dot_plus_gloss: string-only, no parsing needed (MRR 0.715)
PullRequest.baseRefName — the base ref name of a pull request

The cheap string-only gloss costs almost nothing versus full schema parsing, so reach for dot_plus_gloss unless you already have parsed types on hand. Whatever you do, don't embed raw Type.field identifiers. With dot formatting, MRR drops to 0.393 and the worst-case rank blows out 10x. The owner type is what carries the signal: drop it entirely and retrieval collapses to MRR ~0.05.

Full results

Each format is one way of rendering PullRequest.baseRefName into text before embedding (the example column shows exactly what). P95 is the 95th-percentile rank, i.e. how badly the worst queries rank. Lower is better.

formatexample (PullRequest.baseRefName →)base MRRtuned MRRP95
sdltype PullRequest { baseRefName: String! }0.5110.72340
dot_plus_glossPullRequest.baseRefName — the base ref name of a pull request0.5510.71541
semanticGraphQL field PullRequest.baseRefName. Owner type… Returns: String!…0.3680.65939
field_firstbase ref name (PullRequest)0.5710.65270
naturalthe base ref name field on PullRequest0.4200.578119
arrowPullRequest > base ref name0.4190.548159
colonPullRequest: base ref name0.4000.488199
split_spacepull request base ref name0.3910.447448
signaturePullRequest.baseRefName: String!0.3340.408298
dotPullRequest.baseRefName (raw, no change)0.3340.393404
type_onlypull request (field dropped, ablation)0.2480.242261
field_onlybase ref name (type dropped, ablation)0.0630.0453377

Training

runepochsbatchlrloss
qwen32645e-5cached_mnrl
qwen3-e33645e-5cached_mnrl

Both: --max-seq-length 256, 4 hard negatives per anchor, bf16, full fine-tune (no LoRA), single H100. Published checkpoint: qwen3-e3.

Dataset

splitrows
train4,788
val94
test223
corpus28,893

Built from 7,626 raw seed pairs via world-leakage, per-row strict-leakage, and family-level semantic-dedup filters. The strict-leakage filter is aggressive on real-SDL queries, which is why val/test shrink to ~20% of raw.


Citation


license: apache-2.0 library_name: sentence-transformers base_model: Qwen/Qwen3-Embedding-0.6B datasets:

  • xthor/Qwen3-Embedding-GraphQL-v1 pipeline_tag: sentence-similarity tags:
  • sentence-transformers
  • sentence-similarity
  • feature-extraction
  • graphql
  • retrieval
  • embeddings
  • text-embeddings-inference
  • qwen3
  • gguf language:
  • en

Qwen3-Embedding-0.6B-GraphQL

A small, self-hosted embedding model for retrieving GraphQL Type.field coordinates from natural-language questions. It is designed for schema retrieval in AI agent pipelines, where the full schema is too large to place in context for every request.

Real schemas reuse field names extensively. Many types expose fields such as title, author, createdAt, state, or status, so matching the field name alone is not enough; retrieval must also identify the correct owner type.

This model fine-tunes Qwen/Qwen3-Embedding-0.6B for that owner-type disambiguation task. At 0.6B parameters, it can run locally on CPU or alongside an agent's primary model.

Benchmark

The GraphQL AI Working Group benchmark evaluates 816 natural-language queries across GitHub, GitLab, Linear, Shopify, and the Singapore Open Data API. Field-level recall against the ground-truth Type.field coordinate:

modeldimrecall@20recall@50
Qwen3-Embedding-0.6B-GraphQL (fine-tune)102450.6%63.6%
OpenAI text-embedding-3-large307247.3%59.8%
Qwen3-Embedding-0.6B (base, un-tuned)102446.7%58.5%
OpenAI text-embedding-3-small153642.3%54.3%

The fine-tune leads field-level retrieval at both cutoffs and improves recall@50 by 5.1 percentage points over its base model. At the owner-type level, text-embedding-3-large leads at 87.8% recall@50; the fine-tune reaches 85.6%, ahead of the base model at 78.6% and text-embedding-3-small at 80.8%.

The model ships as SentenceTransformers weights and GGUF builds for llama.cpp and Ollama.

Important: how you format the corpus matters as much as the model. Use SDL snippets or dot_plus_gloss formatting for best results. See Embedding style comparison for details.


Inference

SentenceTransformers

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("xthor/Qwen3-Embedding-0.6B-GraphQL")

query = "When did I place this order?"
# coordinates of Type.field pairs
coords = [
    "Order.createdAt",
    "Order.completedAt",
    "Order.updatedAt",
]

q = model.encode(query, prompt_name="query")
c = model.encode(coords, prompt_name="document")
scores = (q @ c.T).tolist()

for coord, score in sorted(zip(coords, scores), key=lambda x: -x[1]):
    print(f"{score:.3f}  {coord}")

The fine-tuned model ranks Order.createdAt first; the un-tuned base model ranks Order.completedAt first. This is a small sanity check using readable bare coordinates. For production retrieval, use the richer SDL or gloss formatting described below.

Two prompts are wired into the model and must be used for best results:

  • prompt_name="query" for natural-language questions
  • prompt_name="document" for GraphQL coordinate descriptions in the corpus

Ollama

# pull one quantization (Q8_0 is a good default: near-lossless, ~650 MB)
hf download xthor/Qwen3-Embedding-0.6B-GraphQL model-q8_0.gguf --local-dir .

cat > Modelfile <<'EOF'
FROM ./model-q8_0.gguf
EOF
ollama create qwen3-graphql-embedder -f Modelfile

# OpenAI-compatible embeddings endpoint
curl -s http://localhost:11434/v1/embeddings \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen3-graphql-embedder","input":"When did I place this order?"}' \
  | jq '.data[0].embedding'

llama.cpp

hf download xthor/Qwen3-Embedding-0.6B-GraphQL model-q8_0.gguf --local-dir .

./llama-server -m model-q8_0.gguf --embedding --port 8080
# POST http://localhost:8080/embedding   { "content": "..." }

Available GGUF quantizations

filesizeuse case
model-f16.gguf~1.2 GBreference quality, parity with safetensors
model-q8_0.gguf~650 MBnear-lossless; recommended default
model-q4_k_m.gguf~400 MBsmall footprint; accepts a minor quality trade-off

Results

223 held-out test queries · 28,893-coordinate corpus · 30% real SDLs (GitHub GHES, Saleor, Shopify, AniList) never seen in training.

metricbaselinetuned (3 epochs)lift
exact_match@10.0900.229+0.139 (+155%)
recall@30.1300.318+0.188
recall@50.1610.345+0.184 (+114%)
recall@100.2150.435+0.220 (+102%)
mrr@100.1210.285+0.164
ndcg@100.1430.320+0.177

baseline vs tuned — headline metrics

recall@k across the sweep

Where the lift comes from

Direct questions ("has my package shipped?", "what's my total?") are already handled well by the base model. The gains come from indirect questions where the user names a concept rather than a field. Those require owner-type reasoning, and that's where the base model falls behind.

Small inference example

"When did I place this order?"

Against the bare coordinates Order.createdAt, Order.completedAt, and Order.updatedAt, the base model ranks Order.completedAt first. The fine-tuned model ranks the correct coordinate, Order.createdAt, first and opens a clearer margin:

modelOrder.createdAtOrder.completedAttarget margin
base0.6190.650-0.031
fine-tuned0.6600.601+0.059

Every candidate is a plausible timestamp on the same order. The model must distinguish when the order was placed from when it was completed or last updated. This three-candidate example is an illustrative sanity check; the aggregate results above measure retrieval quality over the full held-out corpus.

Known limitations

  1. Formatting sensitivity. With raw dot notation (Type.field), the fine-tune's R@1 is only 0.308 on the GitHub schema. Always use sdl, dot_plus_gloss, or natural formatting for the corpus.

  2. Same-owner wrong-field rate. same_owner_wrong_field_rate@1 rose from 0.063 to 0.103. The model picks the right owner type more often but occasionally lands on the wrong field within that type. The training signal rewards owner disambiguation; within-owner field disambiguation isn't targeted. The next iteration will add competition sets that share owner and differ by field.

  3. Tail regression with raw dot notation. When using raw dot notation, the fine-tune's P95 rank (404) is worse than the base model's (123). The model becomes more confident: it either ranks the correct answer first or misses much harder. This is fully mitigated by using sdl (P95 40) or dot_plus_gloss (P95 41) formatting.

  4. Indirect queries. Queries that don't name or allude to the owner type (e.g., "get the README" → Repository.object) remain hard for both models. The fine-tune does not improve on these.

metric deltas

How you format the corpus matters

How you turn each Type.field coordinate into text before embedding it affects retrieval more than the fine-tune does. The benchmark below compares twelve formats on the GitHub GraphQL schema (52 held-out queries):

embedding style comparison

Use one of these two. They tie at the top:

# sdl: if you parse the schema (MRR 0.723)
type PullRequest { baseRefName: String! }

# dot_plus_gloss: string-only, no parsing needed (MRR 0.715)
PullRequest.baseRefName — the base ref name of a pull request

The cheap string-only gloss costs almost nothing versus full schema parsing, so reach for dot_plus_gloss unless you already have parsed types on hand. Whatever you do, don't embed raw Type.field identifiers. With dot formatting, MRR drops to 0.393 and the worst-case rank blows out 10x. The owner type is what carries the signal: drop it entirely and retrieval collapses to MRR ~0.05.

Full results

Each format is one way of rendering PullRequest.baseRefName into text before embedding (the example column shows exactly what). P95 is the 95th-percentile rank, i.e. how badly the worst queries rank. Lower is better.

formatexample (PullRequest.baseRefName →)base MRRtuned MRRP95
sdltype PullRequest { baseRefName: String! }0.5110.72340
dot_plus_glossPullRequest.baseRefName — the base ref name of a pull request0.5510.71541
semanticGraphQL field PullRequest.baseRefName. Owner type… Returns: String!…0.3680.65939
field_firstbase ref name (PullRequest)0.5710.65270
naturalthe base ref name field on PullRequest0.4200.578119
arrowPullRequest > base ref name0.4190.548159
colonPullRequest: base ref name0.4000.488199
split_spacepull request base ref name0.3910.447448
signaturePullRequest.baseRefName: String!0.3340.408298
dotPullRequest.baseRefName (raw, no change)0.3340.393404
type_onlypull request (field dropped, ablation)0.2480.242261
field_onlybase ref name (type dropped, ablation)0.0630.0453377

Training

runepochsbatchlrloss
qwen32645e-5cached_mnrl
qwen3-e33645e-5cached_mnrl

Both: --max-seq-length 256, 4 hard negatives per anchor, bf16, full fine-tune (no LoRA), single H100. Published checkpoint: qwen3-e3.

Dataset

splitrows
train4,788
val94
test223
corpus28,893

Built from 7,626 raw seed pairs via world-leakage, per-row strict-leakage, and family-level semantic-dedup filters. The strict-leakage filter is aggressive on real-SDL queries, which is why val/test shrink to ~20% of raw.


Citation

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · sentence-transformers

Можно запустить

Подбираем GPU…

Класс архитектуры
Qwen3Model
Ревизия весов
728ac82

0 моделей