together:qwen3.8-flash
9/5/2026, 2:36:23 AM · 15 tests · run 024a5fd9-4162-49e3-868d-4f5120240042
basic-generation
okPlain streaming generation with a soft length constraint (~100 words).
- Produced 88 words (110 output tokens).
Result
{
"wordCount": 88,
"outputTokens": 110
}togetherai:Qwen/Qwen3.8-Flash
usage-cost
okAsserts usage tokens populate and cost computes from the ChatReq contract.
- in=69 out=128 rt=120 cost=$0.000071 (paid).
Result
{
"inputTokens": 69,
"outputTokens": 128,
"reasoningTokens": 120,
"costUsd": 0.00007050999999999999,
"paid": true
}togetherai:Qwen/Qwen3.8-Flash
streaming-structure
okAsserts a streaming call captures events that reconstruct into the final text.
- mode=streaming, 28 stream events, 1 text block(s), 35 chars.
Result
{
"mode": "streaming",
"streamEventCount": 28,
"textBlocks": 1,
"textLen": 35
}togetherai:Qwen/Qwen3.8-Flash
complete-stream-parity
okSame prompt via stream() and complete() both return valid, matching results.
- Test threw: This model only supports streaming. Set "stream": true.
Result
null
reasoning-conformance
okAsserts the model's reasoning knob behaves as its reasoning-config declares.
- Class (from reasoning-config): toggleable.
- off: out=875 · mid: out=1157 (rt=615, rchars=1233).
Result
{
"class": "toggleable",
"mode": "deterministic",
"offOutputTokens": 875,
"midOutputTokens": 1157,
"midReasoningTokens": 615
}togetherai:Qwen/Qwen3.8-Flash
togetherai:Qwen/Qwen3.8-Flash
single-tool-call
okOffers a calculator tool and checks the model calls it for an arithmetic question.
- Called "multiply" with args {"a":23,"b":17}.
Result
{
"toolCalled": true,
"toolName": "multiply",
"args": {
"a": 23,
"b": 17
},
"correct": true
}togetherai:Qwen/Qwen3.8-Flash
tool-loop
okForces a tool call, feeds the result back, and checks the continuation uses it.
- step1 (auto): multiply({"a":23,"b":17}) → step2: "The product of 23 and 17 is 391."
Result
{
"toolName": "multiply",
"args": {
"a": 23,
"b": 17
},
"product": 391,
"continuation": "The product of 23 and 17 is 391.",
"usesResult": true,
"forced": false
}togetherai:Qwen/Qwen3.8-Flash
togetherai:Qwen/Qwen3.8-Flash
web-search
okEnables server-side web search and checks invocation counts, the per-request cost surcharge, and provider-executed output blocks.
- Skipped: model does not support the catalog's web_search tool version.
Result
{
"skipped": "no server-side web search support"
}reasoning-tool-continuity
okReasoning model: continuity token captured on a tool call and replayed so the follow-up succeeds.
- reasoned=true, none token —; follow-up → "**Balance lookup:** Account `acme-42` currently holds **$1,234.00**. "
Result
{
"signatureType": "none",
"tokenCaptured": false,
"reasoned": true,
"answered": true,
"continuation": "**Balance lookup:** Account `acme-42` currently holds **$1,234.00**.\n\n**Growth calculation (5% compounded annually for 7 years):**\n\nFuture v"
}togetherai:Qwen/Qwen3.8-Flash
togetherai:Qwen/Qwen3.8-Flash
prompt-cache
okRepeat a large prefix; assert cache-read tokens are reported and cost drops.
- Skipped: provider has no (known) prompt-cache reporting.
Result
{
"skipped": "cacheStyle=none"
}json-output
okRequests a strict JSON object and checks it parses with the required keys.
- Output parsed as JSON.
- All required keys present.
- Output is bare JSON (no leading prose/fence).
Result
{
"parsed": {
"name": "Anthropic",
"founded": 2021,
"headquarters": "San Francisco, California"
},
"validJson": true,
"missingKeys": [],
"bareJson": true
}togetherai:Qwen/Qwen3.8-Flash
summarize-memex
okSummarizes an ~11k-token essay to ~500 words (long input, reasoning minimized).
- Read ~10388 input tokens, wrote 541 words (681 output tokens) in 9494ms.
Result
{
"wordCount": 541,
"inputTokens": 10388,
"outputTokens": 681,
"latencyMs": 9494
}togetherai:Qwen/Qwen3.8-Flash
truncation
okTiny maxTokens on a long prompt yields finishReason:"length".
- finishReason=length, out=100 tokens.
Result
{
"finishReason": "length",
"outputTokens": 100
}togetherai:Qwen/Qwen3.8-Flash
streaming-only-rejection
okStreaming-only models reject complete(); all others accept it.
- streamingOnly=false; complete() threw (This model only supports streaming. Set "stream": true.).
Result
{
"streamingOnly": false,
"completeThrew": true
}abort
okA pre-aborted signal rejects the call (abort is threaded + honored).
- pre-aborted signal → rejected (AbortError).
Result
{
"rejected": true,
"errorName": "AbortError"
}