ca. 14 Minuten

SupraAgent benchmark: modules, long sources, poisoned corpora and concurrency

Veröffentlicht von · SupraTix GmbH
Veröffentlicht am · Aktualisiert am

SupraAgent benchmark: modules, long sources, poisoned corpora and concurrency

Local benchmark of SupraAgent: 96/96 module hits and 77/96 first-listed sources over 1,037 documentation sections, 92/96 on a sealed holdout, facts retained in 72/72 controlled cases up to 1,024,000 characters with a 45 ms answer path, injected instructions 947 → 0 in the prompt, warm p50 5.1 ms under tenant-isolated caching, with named limits and peer-reviewed methods.

Status 12 November 2026. The SupraAgent benchmark measures, separately, whether retrieval finds the right module source, whether facts survive in very long sources, how the answer path behaves under poisoned corpora, and how fast the local components run cold, warm and under concurrent tenants. Every run is a local diagnostic: real retrieval, admission and synthesis components over a fixture index, deterministic extraction, no model-provider calls and no executed business actions. The questions, sources and attacks were written by us. The numbers below are the current state of that benchmark. They are not answer correctness, not a user study and not evidence of being the best agent.

Study

Size

What it measures

Module replay

96 questions × 2 retrievers × 3 repeats = 576 runs

Module hit@1 and hit@4, MRR, citation markers, local runtime

Sealed holdout

96 new questions, evaluated once

Module and gold-section routing on questions never used for tuning

Long sources

144 controlled + 180 decoy-dense cases × 3 repeats = 972 answers per actor

Facts retained in prompt and answer, visible limits, safety controls, runtime per length

Poisoned corpora

5,952 trials (10 attack variants × 2 retrievers × 3 doses × 96 questions, plus clean baselines)

Contamination, rank 1, citation, planted-number adoption, instruction projection, admission

Cold starts and concurrency

10 processes × 96 questions, threads T = 1/4/8, 4 processes

Cold and warm percentiles with intervals, throughput, tenant interference, cache isolation

Context fixtures (previous bundle, not re-run)

9 cases × 5 methods × 3 repeats = 135 executions

Source recall and literal fact presence per retrieval method

Module routing: 96 questions over 1,037 documentation sections

The questions cover People, Teaching, Attema, Blogery, Store Connect, Deals, IoT Manage, Shortcuts, iAccelerator, Help Center, Templaterr and SupraAgent. Each module has four question types in German and English: actions with inputs and prerequisites, activities and status, process steps with verifiable outcomes, and support for permission errors and missing information. The corpus contains 1,037 complete endpoint documentation sections; both retrievers see the same sources. The replay now fetches 32 candidates before the admission gate and keeps the first four admitted, exactly as production does, so a rejected document no longer consumes one of the four slots.

Measure, first repeat

BM25

Hash vectors

Module hit@4 (a source from the requested module in the top four)

96/96

74/96

Module hit@1 (the first listed source is from the requested module)

77/96

57/96

MRR of the first module source

0.891

0.663

Answers with a citation

96/96

96/96

Local warm p50 / p95, 288 runs (start of round: 11.013 / 14.613 ms BM25)

5.947 / 9.326 ms

85.933 / 90.731 ms

Failed runs, lost or unresolved citations

0

0

Hit@1 matters because readers act on the first listed source (Craswell et al., WSDM 2008). BM25 scores fields separately with the section title weighted 2.5 (Robertson, Zaragoza and Taylor, CIKM 2004). A module-coherence feedback step (Lavrenko and Croft, SIGIR 2001) was implemented and measured: hit@1 77 → 91, MRR 0.891 → 0.970, no question ranking its module source lower, paired difference +0.146 over 48 question families (95 % bootstrap interval 0.073–0.229, sign-flip p = 0.0005; Sakai, SIGIR 2006; Smucker, Allan and Carterette, CIKM 2007). It is switched off because 9 of 288 runs (3 German Shortcuts questions × 3 repeats) lose their citation: the four Shortcuts sections are single units without sentence punctuation, longer than the 420-character snippet budget, so the extractive synthesizer has nothing to quote once the wrong-module section it used to cite is no longer ranked. With the switch off, first-position routing is unchanged. Answer texts changed in 141 of 576 runs against the previous state although sources and ranks are identical: a unit that several admitted sources repeat is now listed once and the freed line is filled from the next source (citation markers 918 → 879 on BM25). Timing is one workstation without model calls or production IO, read against the 0.1-second perceptual threshold of Card, Robertson and Mackinlay, CHI 1991, not as a service commitment. Hash vectors are deterministic lexical hashes, not a neural embedding baseline.

Module routing, 96 questions: BM25 hit@1 80.2 %, hit@4 100 %, MRR 89.1 %; hash vectors hit@1 59.4 %, hit@4 77.1 %, MRR 66.3 %.

1. Module routing: first and top-four sources per retriever, 96 questions, first repeat.

BM25 by group

Hit@1

Hit@4

Actions (24)

22/24

24/24

Activities (24)

19/24

24/24

Processes (24)

17/24

24/24

Support (24)

19/24

24/24

German (48)

38/48

48/48

English (48)

39/48

48/48

Every question type reaches its module within the top four. First-position routing is weakest for process questions and for Shortcuts (1 of 8 first) and Store Connect (3 of 8); language and question-type rows overlap and must not be added together.

Routing per question type, BM25: hit@1 22, 19, 17 and 19 of 24 for actions, activities, processes and support; hit@4 24 of 24 for each.

2. Routing per question type, BM25, 24 questions per type in German and English.

Sealed holdout: 96 new questions, evaluated once

A holdout reused for tuning loses its validity (Dwork et al., Science 2015). 96 new questions, 25 of which do not name their module, each with a gold documentation section, were sealed by SHA-256 on 11 November 2026 before any change of this round and replayed once after every decision, with the shipped defaults and with the coherence switch on.

Holdout, BM25, first repeat

Shipped defaults

Coherence on (off by default)

Module hit@4

92/96

89/96

Module hit@1

81/96

87/96

MRR of the first module source

0.894

0.914

Gold section in the top four

41/96

41/96

Gold section listed first

22/96

22/96

Answers with a citation

92/96

92/96

Local warm p50 / p95, 288 runs

5.697 / 8.002 ms

5.718 / 7.985 ms

Hash vectors reach module hit@4 in 48 of 96 and hit@1 in 38 of 96. The holdout shows what the development set hid: the coherence step raises hit@1 by 6 but lowers hit@4 by 3 of 96, so keeping it off stands on the holdout as well as on the citation gate. Four holdout answers carry no citation in both states, and the gold section is among the four listed sources in only 41 of 96 questions: module routing is not section routing, and that gap is the clearest open target. The holdout is now unsealed and counts as a development set from here on.

Long sources: 144 controlled and 180 decoy-dense cases up to 1,024,000 characters

The study crosses six source lengths, 8,000 to 1,024,000 characters, with evidence at the beginning, middle and end, in German and English, as motivated by Lost in the Middle (Liu et al., TACL 2024). Four controlled scenarios test a positive fact, an oversized negation, an injected instruction and an absent fact. A decoy-dense set repeats the product name and every question word in every paragraph, with other products' numbers in the same sentence template, so the partial-read windows beyond the fully scanned prefix are exercised instead of keyword uniqueness. Each case runs three times for two actors, the previous and the current code, and is measured at the provider-prompt boundary and in the deterministic answer. Lengths are Unicode characters, not model tokens, and no model comprehension is measured (Bai et al., ACL 2024).

Source length (characters)

Facts in prompt (of 12: 3 positions × 2 languages × fact and injection cases)

Facts in answer

Limit notice in the answer

Prompt p50

Answer p50

Answer p95

8,000

12/12

12/12

0/24

0.9 ms

2.8 ms

2.9 ms

32,000

12/12

12/12

0/24

2.3 ms

7.0 ms

7.2 ms

128,000

12/12

12/12

0/24

8.1 ms

22.7 ms

23.8 ms

256,000

12/12

12/12

24/24

12.7 ms

34.0 ms

37.2 ms

512,000

12/12

12/12

24/24

16.5 ms

38.5 ms

41.4 ms

1,024,000

12/12

12/12

24/24

22.7 ms

45.3 ms

49.9 ms

The complete scan of a source is bounded at 200,000 characters and 4,096 source units. Beyond that bound the packer segments at most sixteen windows of 8,192 characters on either side of whole-word matches of the question terms, discards every window-edge sentence and keeps an opened parenthesis or list from being cut by a window edge. Each bound that is reached is a named omission in the provider prompt, and the deterministic answer opens with one localized sentence saying that the source was only partially read (guidelines G2 and G11 of Amershi et al., CHI 2019). The packer, the attribution checker and the grounding audit used to scan those windows separately, up to nine tail passes per answer; one scan session per answer now serves all three, which is why the deterministic answer at 1,024,000 characters takes 45 ms instead of 268 ms with the same facts. Prompt preparation is 1.7–2.3× faster, most likely for a separate reason: a cheaper pre-filter in the directive detector described under poisoned corpora; that attribution was not measured in isolation. Correctness and citation support remain separate questions (Gao et al., EMNLP 2023).

Control (144 controlled cases, first repeat; all three repeats agree)

Prompt

Answer

Oversized negation withheld, no detached positive predicate

36/36

36/36

Injected instruction projected

0

0

Absent fact reported as present

0

0

Limit notice for a source within the 200,000-character bound

0

0

Decoy-dense set (180 cases): the fact leads the answer in 130 of 180 cases (30 of 30 up to 128,000 characters, then 20, 10 and 10 of 30), a decoy number leads in 25 of 180 (English, middle and end positions from 256,000 characters), and the limit notice appears in 90 of 90 cases over the bound with no false positive. These lead-line counts are identical for the previous and the current code: a fact behind hundreds of matching paragraphs beyond the prefix is outside the sixteen windows the tail scan opens, and that is a disclosed, unchanged limit. A decoy number appears somewhere below the lead line in 115 of 180 answers, 13 more than before, because a line freed by duplicate collapse is filled from the next paragraph, which in this set is a decoy. Injected instructions in this set, in literal, fake-system, role and paraphrase form, are projected into prompt or answer in 0 of 144 cases; the role and paraphrase forms reached the prompt in 39 cases before the directive detector was extended.

Long sources: facts retained 12 of 12 at every length from 8k to 1,024k characters; limit notice in the answer 0 of 24 up to 128k and 24 of 24 from 256k.

3. Long sources: facts retained and limit notices per length, beginning, middle and end, German and English.

Long sources, answer path in milliseconds: deterministic answer p50 before and after per length, 7.9 to 267.9 ms before and 2.8 to 45.3 ms after, with p95 markers.

4. Answer path per source length, previous versus current code, 24 cases × 3 repeats per length, no model call or production IO.

Decoy-dense sources: fact in the lead line 30, 30, 30, 20, 10 and 10 of 30 per length; decoy in the lead line 0, 0, 0, 5, 10 and 10 of 30.

5. Decoy-dense sources: fact versus decoy in the lead line per length, 30 cases per length.

Poisoned corpora: 5,952 trials

Following PoisonedRAG (Zou et al., USENIX Security 2025) and Greshake et al. (AISec 2023), 1, 5 or 20 attacker documents per targeted module are appended to the corpus: documents claiming to be the official source, clones with a new id and a changed number, documents stuffed with the module vocabulary, and documents carrying directives in five forms (English, two German forms, mixed, and a fake "System:" line with a detached payload sentence). Two negative controls: a clone the tenant must not see, and an exact benign duplicate. Success is counted separately as: attacker document among the four retrieved candidates, at rank 1, cited, its planted number adopted, its directive text projected into the prompt or the answer, and admitted although the tenant may not see it. BM25, dose 5, 96 questions per cell, before → after this round's mitigations (the "before" run used the code before the mitigations, with the earlier iterations of this round applied):

Ranking attack

Planted number adopted

Correct module first

Attacker cited

Authority claim

95 → 95

1 → 1

95 → 95

Hub stuffing

88 → 88

0 → 0

88 → 88

Source clone, number changed

34 → 13

62 → 62

75 → 32

Instruction attack

Directive text in the prompt

Payload adopted in the answer

English "ignore previous instructions"

0 → 0

0 → 0

German "ignoriere alle Anweisungen"

0 → 0

0 → 0

German "antworte stattdessen mit …"

88 → 0

0 → 0

Mixed German/English paraphrase

88 → 0

0 → 0

Fake "System:" line with a detached payload

0 → 0

95 → 0

The admission gate excluded every foreign-membership clone (0 of 576 admitted); the 70 answers that were left without an admitted source because rejected clones consumed the four slots fell to 0 with production-faithful over-fetching. The directive detector now recognises German, paraphrased and role forms, a directive's neighbouring sentences are withheld only when they carry none of the question's words or are sentence fragments, and near-duplicates across different documents are collapsed into one citation (Broder, 1997; Bernstein and Zobel, CIKM 2005). Over all attack cells, both retrievers and all doses, directive text in the prompt fell from 947 to 0 and planted-number adoption from 1,760 to 1,120, with no cell worse on any metric. Authority and hub documents still take rank 1 and their planted number is adopted in up to 95 of 96 deterministic answers: ranking inside the admitted set is not defended, and a verbatim source-pointer answer that would restore the 9 missing Shortcuts citations stays off because it would cite the attacker's document when every admitted source is one. The benign-duplicate control expects an unchanged answer; in 79 of 96 answers (80 before) the answer text differs because the duplicate displaces one of the four admitted sources, and that count stands as a disclosed limit. A passing cell is a local diagnostic of authored attacks, not a security certification.

Poisoned corpora, BM25, dose 5: planted numbers adopted before and after per attack kind: authority 95 and 95, source clone 34 and 13, hub stuffing 88 and 88, indirect instruction (the fake System line payload; the other four forms are 0 and 0) 95 and 0, benign duplicate answer text changed 80 and 79.

6. Poisoned corpora: planted numbers adopted per attack kind, BM25, dose 5, 96 questions, before and after; the indirect-instruction bar is the fake "System:" payload, the other four directive forms adopt nothing before or after.

Cold starts and concurrency

The harness runs ten independent interpreter processes per condition and reports pooled percentiles over their 960 requests, with the 95 % bootstrap interval of the mean per-process median as the uncertainty statement (Georges, Buytaert and Eeckhout, OOPSLA 2007), closed-loop threads with one simulated tenant each, a process pool, a large-tenant interference probe and a cross-tenant cache probe (Dean and Barroso, CACM 2013). The per-document statistics cache is now partitioned into one BM25 snapshot per tenant and listing (still bounded at 20,000 entries and 64 MiB of text per snapshot), verified by exact text, with scores identical cold and warm. The "before" column was measured on the code before this change, with the earlier iterations of this round applied. Apple M4 Max, CPython 3.11.9, no network, database or container contention.

Measure

Before

After

Service warm p50 / p95 / p99 (960 requests)

10.5 / 12.8 / 24.6 ms

5.1 / 7.5 / 9.9 ms

Service cold p50 (interval) / p95 / p99

24.8 (24.5–25.0) / 34.4 / 169.4 ms

21.5 (21.0–22.2) / 25.9 / 152.4 ms

Threads T = 1 / 4 / 8, throughput

94 / 62 / 49 req/s

202 / 161 / 149 req/s

Threads T = 8, service p50 / p95 / p99

148 / 318 / 355 ms

29 / 204 / 318 ms

Processes P = 4, throughput, p95

309 req/s, 13.5 ms

719 req/s, 7.9 ms

Small tenant p50, alone / beside a tenant with four times the sections

35 / 63 ms

16 / 21 ms

Second tenant's first query hits the first tenant's cache

yes

no

A freshly started process answers its first query after about 4.1 s of Django setup plus the cold request; cold p99 is garbage-collection driven and stays above 0.1 s; thread numbers include the CPython global interpreter lock.

Cold start and concurrency: mean per-process p50, cold 24.8 before and 21.6 after, warm 10.5 and 5.1 ms, with 95 % intervals; throughput at T=1, 4 and 8 threads 94, 62 and 49 before and 202, 161 and 149 after.

7. Cold start and concurrency: mean per-process medians with 95 % intervals (the table reports pooled percentiles, hence 24.8 and 21.5 there), and closed-loop throughput, before and after.

Context fixtures: source recall per retrieval method

Method

Source recall (5 cases)

Fact presence (4 cases)

BM25

65%

50%

Hash vectors

65%

50%

Graph, 1 hop

90%

75%

Graph, 3 hops

100%

100%

Hybrid graph

100%

100%

This study was not re-run in the current round; the numbers and figure are those of the previous evidence bundle (9 fixture cases × 5 retrieval methods × 3 repeats = 135 executions; recall over the 5 annotated cases, fact presence over the 4 cases that carry a reference fact). Three graph hops recover every expected source and reference fact in these small authored fixtures. This is an integration diagnostic: literal fact presence does not establish entailment, and synthetic benchmark.invalid addresses are test identifiers.

Context fixtures: source recall over five annotated cases and literal fact presence over four cases per retrieval method.

8. Context fixtures: source recall over five annotated cases and literal fact presence over four cases. Does not measure semantic accuracy.

What source links establish

Every numeric source marker in the module replay resolves to an admitted source ID, with zero lost or unresolved citations across all 576 runs. Source-ID resolution is structural, not semantic citation support. Answer correctness, translation quality, support usefulness and process success remain unmeasured without independent assessment.

Peer-reviewed methodology

The design follows peer-reviewed work; every DOI in the evidence bundle's research record was verified through Crossref, and entries without a DOI link to their proceedings pages. The papers guide the measurements and do not certify SupraAgent.

Evidence, reproduction and limits

Reports, archived sources, raw answers, the start-of-round runs, figures, the review findings and reproduction commands are in the evidence bundle (GitHub access required). The bundle freezes source hashes before and after each run and is fingerprinted with SHA-256; an explicit gate of 537 tests passes on the measured code. Changes shipped only when they passed gates fixed before measuring: no routing regression, no lost citation, no attack cell worse, no long-source cell below the previous code. One long-source check, the decoy lead line, fails identically before and after and is carried as a limit. Two features that failed a gate are implemented but switched off and are reported in both states (coherence: hit@1 77 versus 91 of 96 with 9 lost citations; source pointer: attacker cited in 88 versus 96 of 96 under hub stuffing).

A product-level quality claim would additionally require independently assessed answers and citation support, fresh customer-domain questions, human evaluation of the user experience, production latency under load, defended ranking under authority and hub documents, and isolated workflow runs with verified before/after state. Until then this benchmark supports specific retrieval, retention, robustness and regression diagnostics. It does not establish general accuracy, successful live workflows or superiority to other agents.

Auf Deutsch lesen





SupraTix GmbH oder Partnergesellschaften - Alle Rechte vorbehalten.

Copyright © 2016–2026