Texel Support 9B

Texel Support is the customer support model of Texel, the onchain GPU cloud for agents on Robinhood Chain. It is a LoRA adapter for Qwen3.5-9B. It answers questions about Texel from the live docs, checks the credits, instances, outputs, and receipts of the wallet that is signed in, and sends bug reports and complaints to the Texel team as tickets.

It was trained on one NVIDIA A40 (48 GB) rented on texel.run and billed by the second in Texel credits. The receipt of that rental is sealed on Robinhood Chain in the hour of Nov 11, 19:00 UTC. Press Check this hour on that page to rebuild the hour's root in your browser and compare it with the seal.

How it works

The model answers from its tools and never from memory alone. It runs with six tools:

Tool What it returns
search_docs(query) The 3 best sections of the public texts of texel.run: the docs, GPU rates, model prices, the roadmap, the changelog, the receipts pages, the blog, and the support notes
get_credits The credits of the wallet signed in: the balance, free outputs left today, what a refund would send, and deposits that wait for the chain
list_instances The GPU instances of the wallet that run now or ended in the last 24 hours
list_outputs The images, videos, and voices the wallet made in the last 24 hours, with their status and price
list_receipts The newest receipts of the wallet, and whether each hour is sealed on Robinhood Chain
open_ticket(kind, summary, details) Sends a bug report or a complaint to the Texel team, with the wallet attached

The wallet tools only read. The model cannot buy, refund, rent, or move funds, so it tells the user where to do it. This repo holds the tool schemas (tools.json). Give the model a short system prompt that says what Texel is, the date and time, and whether a wallet is signed in ("No wallet is signed in." or "The user is signed in with the wallet 0x1a2bโ€ฆ9f3e."), as in the example below.

Training

  • Data: 960 support chats for training (1,367 examples, 4.3M tokens) and 72 held out for evaluation. Each chat starts from a scenario: a question on the docs, a check of a made-up wallet, a bug report or complaint, a scam or another request to refuse, or small talk. A simulated user (DeepSeek V4.1 Flash) wrote the user's side, and an open-weight teacher (Qwen3.8) answered as Texel Support with the real tools. Of 1,073 chats, 41 were dropped by checks for numbers or links that no tool gave, credits mixed up with dollars, and answers that skipped a tool.
  • Sources: only the public pages of texel.run, read as a signed-out visitor on 11 Nov 2026.
  • Method: LoRA with rank 32 and alpha 32 on the MLP of all 32 layers and on q, k, v, and o of the 8 full-attention layers, for 58.2M trainable weights (0.61%). bf16, learning rate 2e-4 with a cosine schedule, batches of 16, 1.2 epochs (103 steps), sequences up to 8,192 tokens, thinking off. The loss covers only what the assistant writes after the last user message.
  • Run: 55 minutes of training at 1,313 tokens a second, with a peak of 21.3 GB on the A40. The eval loss fell from 0.674 to 0.600. The receipt covers the whole rental (13,681 GPU seconds, 2.2422 credits): setup, training, evaluation, and the time until the instance was ended.
  • Software: Unsloth 2026.11.3, Transformers 5.17.0, PEFT 0.21.2, PyTorch 2.14.1, flash-linear-attention 0.6.0.

Evaluation

The 72 held-out chats were played again from their first message with the same tools and made-up wallets. A judge model (DeepSeek V4 Pro) graded each first answer against what the tools returned.

Qwen3.5-9B Texel Support 9B
Correct 62.5% 77.8%
Partly correct 22.2% 12.5%
Wrong 15.3% 9.7%
Calls the same tools as the reference answer 47.2% 79.2%
Passes the rule checks 97.2% 98.6%

Use

Load the base with AutoModelForImageTextToText, since the adapter's weights sit under its language_model.

import json
import torch
from peft import PeftModel
from transformers import AutoModelForImageTextToText, AutoTokenizer

base = AutoModelForImageTextToText.from_pretrained(
    "unsloth/Qwen3.5-9B", dtype=torch.bfloat16, device_map="auto"
)
model = PeftModel.from_pretrained(base, "texellabs/texel-support-9b")
tokenizer = AutoTokenizer.from_pretrained("texellabs/texel-support-9b")

system = (
    "You are Texel Support, the assistant in the chat of texel.run. Texel is the onchain GPU "
    "cloud on Robinhood Chain: a wallet signs in, buys Texel credits, makes images, video, and "
    "voice in the Playground, and rents NVIDIA GPUs by the second.\n\n"
    "Today is Thursday, November 12, 2026, 09:00 UTC. No wallet is signed in."
)
tools = json.load(open("tools.json"))
messages = [
    {"role": "system", "content": system},
    {"role": "user", "content": "How much is an A40 per hour on Texel?"},
]
prompt = tokenizer.apply_chat_template(
    messages, tools=tools, add_generation_prompt=True, enable_thinking=False, tokenize=False
)
inputs = tokenizer(prompt, return_tensors="pt", add_special_tokens=False).to(model.device)
output = model.generate(**inputs, max_new_tokens=600, do_sample=False)
print(tokenizer.decode(output[0, inputs["input_ids"].shape[1]:]))

The model calls a tool in the XML format of Qwen3.5 (<tool_call><function=search_docs>...). Run the tool, add its result as a tool message, and generate again until the model answers.

Limits

  • It writes in English.
  • Prices, GPUs, and the roadmap of Texel change, so serve it with search_docs over the live site, not over a copy.
  • In the evaluation, about 1 answer in 10 was still wrong, mostly price units or a guess where the tools had no answer.
  • The wallet tools call the gateway of texel.run for the wallet signed in, so this repo has their schemas, not the gateway.

License

Apache 2.0, the license of the base model.

texel.run ยท X ยท GitHub

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for texellabs/texel-support-9b

Finetuned
Qwen/Qwen3.5-9B
Adapter
(121)
this model