Downloads · 30 days
92
15% of all-time downloads
t-tech/T-Search-FP8
T-Search-FP8 is a text generation model from t-tech. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
🚨 T-Search-FP8 is designed for use with the official T-Search harness. The source T-Search checkpoint did not show noticeable differences relative to the Qwen3.6-35B-A3B base model on general-purpose benchmarks.
Downloads · 30 days
92
15% of all-time downloads
All-time downloads
611
Public
Parameters
36B
37.5 GB on disk
Likes
13
Public
Click a slice to open those files.
.safetensors37.5 GB · 100%
How the weights are stored.
F8_E4M334.5B · 96%
From the Hugging Face model README
🚨 T-Search-FP8 is designed for use with the official T-Search harness. The source T-Search checkpoint did not show noticeable differences relative to the Qwen3.6-35B-A3B base model on general-purpose benchmarks.
🚨 Users are advised to exercise caution and are responsible for any additional training and oversight required to ensure the model's responses meet acceptable ethical and safety standards. The responsibility for incorporating this model into industrial or commercial solutions lies entirely with those who choose to deploy it.
We introduce T-Search-FP8, an agentic retriever built for difficult multi-step search in English and Russian. It plans and executes searches across multiple rounds with a configurable search budget.
T-Search-FP8 is built on Qwen3.6-35B-A3B and trained on fully synthetic search tasks generated for the same harness used at inference time.
The model is responsible for collecting evidence. Given a question and access to a corpus search backend, it formulates queries, reads retrieved snippets, decides which chunks are worth preserving, and returns a ranked evidence set. A downstream generator, reranker, or full-text fetcher can then consume that ranking.
The official T-Search harness implements the inference protocol used for training and evaluation. The retriever operates in rounds. Within each round, it follows a ReAct loop with an approximately 32K-token context budget and three tools:
search_corpus searches the corpus and returns document chunks;save_and_advance preserves important chunks and starts a new round;finalize_ranking ends the search and returns a ranked evidence set.The agent sees the original question, previously saved chunks, and the current coverage state: which parts of the question are supported by evidence and which remain open. It chooses search queries, inspects retrieved chunks, and decides whether to continue searching, preserve state for another round, or finalize.
At 75% context utilization, search_corpus is locked. The agent must either call finalize_ranking or use save_and_advance to build compact memory for the next round: preserved chunks with reasons, covered and open parts of the question, previous attempts, and a useful next step. Full tool history and intermediate noise do not cross the round boundary.
Training proceeds in two stages: supervised fine-tuning on fully synthetic search trajectories, followed by reinforcement learning with GSPO and recall-based rewards. At each stage, separate English and Russian experts are trained on language-specific data and then merged into a single checkpoint.
Weights use the E4M3 format with 128 × 128 block-wise scaling, while activation scales are computed dynamically at inference time. Modules excluded from quantization remain in BF16 and are listed under modules_to_not_convert in config.json.
Training tasks contain a question, a fixed index, annotated evidence chunks, and a full tool-use trajectory. Candidate tasks pass adversarial checks for trivial query leakage, answerability from model weights, single-document shortcuts, missing evidence, and weak distractors.
Long teacher trajectories are split into self-contained rounds. Invalid tool actions are masked from the loss, while useful recovery behavior after a tool error is retained. Productive rounds are selected by evidence gain rather than by final recall alone, preserving useful behavior from difficult tasks.
Training uses 11K SFT examples from 8K unique questions per language; one quarter targets robustness to different retrievers. An additional non-overlapping pool of 2K questions per language is reserved for RL.
The policy is optimized with GSPO. RL optimizes the complete search policy on full tool-use trajectories. The main reward is recall over gold chunk_id values; precision and F-score are tracked for diagnostics but are not used as the primary training signal. This discourages the agent from finalizing early with a small high-precision but incomplete evidence set.
A detailed Russian-language training report will be available soon on Habr.
The accompanying evaluation datasets are released as TRuST and SynthComp.
| Benchmark | Description |
|---|---|
| TRuST | 324 manually authored Russian multi-step search questions with fixed indices and annotated evidence. |
| SynthComp-En / SynthComp-Ru | English and Russian synthetic fixed-index benchmarks with 395 questions each, separated from the SFT and RL data by question and evidence overlap checks. |
| ru-BrowseComp-Plus | Adapted Russian-language version of BrowseComp-Plus. |
| ru-SealQA | Adapted Russian-language version of SealQA. |
We use Recall@10 as the primary metric.
We report single-rollout results for all models and, for T-Search, an additional N=3 configuration that runs three independent rollouts in parallel and combines their rankings using reciprocal rank fusion (RRF).
| Model | BrowseComp-Plus | ru-BrowseComp-Plus | SealQA | ru-SealQA | SynthComp-En | SynthComp-Ru | TRuST | Avg |
|---|---|---|---|---|---|---|---|---|
| T-Search (N=3) | 72.65 | 62.93 | 66.08 | 61.98 | 58.52 | 58.00 | 49.12 | 61.33 |
| T-Search (N=1) | 65.35 | 55.95 | 61.16 | 57.72 | 54.52 | 53.13 | 43.92 | 55.96 |
| GLM-5.1 | 64.32 | 58.18 | 55.49 | 53.21 | 51.69 | 51.71 | 43.11 | 53.96 |
| GLM-5.2 | 63.01 | 52.54 | 55.30 | 54.69 | 52.29 | 49.37 | 37.07 | 52.04 |
| Kimi-K2.6 | 60.71 | 49.76 | 56.86 | 52.46 | 48.25 | 47.06 | 42.39 | 51.07 |
| DeepSeek-V4-Flash | 53.27 | 46.30 | 55.70 | 51.12 | 44.83 | 45.68 | 40.40 | 48.19 |
| Qwen3.6-27B | 56.69 | 46.81 | 54.01 | 48.95 | 46.82 | 46.99 | 38.12 | 48.34 |
| Qwen3.6-35B-A3B (baseline) | 43.66 | 38.58 | 46.07 | 43.26 | 41.82 | 43.88 | 33.53 | 41.54 |
| gemma-4-26B-A4B-it | 35.32 | 27.51 | 45.13 | 39.05 | 36.24 | 34.77 | 21.75 | 34.25 |
| Qwen3.5-397B-A17B | 53.48 | 44.06 | 51.68 | 48.33 | 47.38 | 46.91 | 38.57 | 47.20 |
| Qwen3.5-122B-A10B | 47.81 | 40.15 | 51.57 | 44.74 | 42.11 | 42.25 | 30.55 | 42.74 |
We also study the latency–quality trade-off by varying the maximum number of search rounds and the number of parallel agent runs. This separates the effect of deeper sequential search from broader parallel exploration.
To evaluate retrieval robustness, we varied the search backend while keeping the model and agent configuration fixed.
| Retriever | BrowseComp-Plus | ru-BrowseComp-Plus | SealQA | ru-SealQA | SynthComp-En | SynthComp-Ru | TRuST | Avg |
|---|---|---|---|---|---|---|---|---|
| Qwen3-Embedding-8B | 65.35 | 55.95 | 61.16 | 57.72 | 54.52 | 53.13 | 43.92 | 55.96 |
| Qwen3-Embedding-8B + LLM reranking | 75.04 | 66.24 | 64.82 | 59.95 | 62.71 | 62.39 | 48.93 | 62.87 |
| Qwen3-Embedding-0.6B | 51.70 | 43.71 | 56.80 | 49.53 | 54.72 | 52.27 | 36.95 | 49.38 |
| jina-embeddings-v5-text-small-retrieval | 60.52 | 51.41 | 62.46 | 55.60 | 56.37 | 54.56 | 39.31 | 54.32 |
| BM25 | 39.49 | 31.97 | 55.33 | 50.00 | 66.87 | 65.15 | 49.18 | 51.14 |
do_sample: true
temperature: 0.7
top_p: 1.0
Serve t-tech/T-Search-FP8 through an OpenAI-compatible endpoint. See the harness README for installation and search-backend integration.
The following configuration adapts the official Qwen3.6 FP8 SGLang cookbook to the 65,536-token T-Search serving context:
python3 -m sglang.launch_server \
--model-path "/path/to/model" \
--served-model-name "t-tech/T-Search-FP8" \
--trust-remote-code \
--host 0.0.0.0 \
--port 8000 \
--reasoning-parser qwen3 \
--tool-call-parser qwen3_coder \
--speculative-algorithm EAGLE \
--speculative-num-steps 3 \
--speculative-eagle-topk 1 \
--speculative-num-draft-tokens 4 \
--mem-fraction-static 0.8 \
--context-length 65536
from retriever_agent import (
AgentConfig,
HttpSearchClient,
OpenAILLMClient,
RetrieverAgent,
)
config = AgentConfig(model="t-tech/T-Search-FP8")
llm = OpenAILLMClient(["http://<sglang-host>:8000/v1"], config)
search = HttpSearchClient("http://<search-host>:8000")
agent = RetrieverAgent(config, llm, search)
result = agent.retrieve("your query")
for doc in result.documents:
print(doc.rank, doc.doc_id, doc.score, doc.text)