Skip to main content

Tinker SDK Backend

The Tinker backend uses Tinker’s hosted inference and training APIs. No local GPU is required. Training runs against Qwen/Qwen3-30B-A3B via API credits.

Requirements

Installation

1

Clone and install

git clone https://github.com/kfallah/CLaaS.git
cd CLaaS
uv sync --extra tinker
2

Configure environment

cd docker
cp .env.tinker.example .env.tinker
Edit .env.tinker and set TELEGRAM_BOT_TOKEN and TINKER_API_KEY.
3

Start the stack

docker compose -f docker-compose.tinker.yml --env-file .env.tinker up --build
No model download needed. Inference and training happen remotely via Tinker.
4

Verify

curl http://localhost:8000/v1/models
curl http://localhost:8080/
curl http://localhost:8080/v1/lora

Services

ServicePortDescription
tinker-proxy8000OpenAI-compatible proxy backed by Tinker SDK
claas-api8080CLaaS feedback API in Tinker execution mode
openclaw18789OpenClaw gateway with Telegram bot
initOne-shot: creates LoRA via API + writes OpenClaw config

Configuration

These variables are set in .env.tinker.
VariableRequiredDefaultDescription
TELEGRAM_BOT_TOKENYesBot token from @BotFather
TINKER_API_KEYYesTinker SDK API key
MODELNoQwen/Qwen3-30B-A3BBase model (must use Tinker name)
FEEDBACK_BATCH_SIZENo4Samples per batch before distill
For the full Hydra config and all environment variables, see the Configuration Reference.

Known Gotchas

Tinker model naming: Tinker uses its own model identifiers that differ from HuggingFace names. For example, the HuggingFace model Qwen/Qwen3-Coder-30B-A3B-Instruct is Qwen/Qwen3-30B-A3B in Tinker. Sampling works with either name, but LoRA training init will reject the HuggingFace name with a 400 error. Always use the Tinker name.
CLAAS_TINKER_BASE_MODEL must match base_model: The proxy reads CLAAS_TINKER_BASE_MODEL to initialize its sampling client, and the eval config’s base_model is passed to the API for LoRA init. If they reference different models, scoring and training will target different models.