sail.tinker helpers let you drive Sail inference from a
Tinker RL or training loop. They
bridge Tinker’s token-level sampling interface to Sail’s raw-token Responses
path, so rollouts run against Sail-hosted models (optionally with a LoRA
adapter) while logprobs flow back into your training code.
These helpers require
tinker-cookbook installed alongside sail-sdk.
Constructing a SailTokenCompleter without tinker-cookbook available raises
sail.InferenceError.sail.SailTokenCompleter
A TinkerTokenCompleter backed by Sail’s raw-token Responses API. Construct
one with a model and sampling settings, then await it on tokenized prompts to
get sampled tokens and their logprobs.
Constructor
| Parameter | Description |
|---|---|
model | Required. Model id to sample from. Raises ValueError if empty. |
max_tokens | Required. Max tokens to generate; must be > 0 (ValueError otherwise). |
temperature | Sampling temperature. Default 1.0. |
top_p | Nucleus sampling cutoff. Default 1.0. |
completion_window | Completion window for each request. Default "priority". LoRA requests cannot use "asap"; the selected window must be supported by the model. |
lora | Name of a Sail-registered LoRA adapter to apply. Mutually exclusive with tinker_lora_signed_url. |
tinker_lora_signed_url | Signed URL to a Tinker checkpoint archive (see get_tinker_checkpoint_signed_url_async). Requires adapter_config. Mutually exclusive with lora. |
adapter_config | LoRA adapter config as a mapping or JSON string. Required when tinker_lora_signed_url is set. |
tinker_lora_name | Optional human-readable name attached to the Tinker LoRA. |
metadata | Extra string metadata forwarded on each request. |
timeout | Per-request timeout in seconds. |
voyage | A sail.Voyage to attribute requests to a voyage. |
request_logprobs | Whether to request logprobs from the server. Default True. |
lora and tinker_lora_signed_url, or setting
tinker_lora_signed_url without adapter_config, raises ValueError.
async __call__(model_input, stop=None)
model_input— must expose a callable.to_ints()returning the prompt token ids (this is Tinker’sModelInput). A non-callableto_ints, a non-integer token, or an empty prompt raisesTypeError/ValueError.stop— optional stop condition. Anintis wrapped as a single-element list; a tuple is converted to a list; other values pass through unchanged.
TokensWithLogprobs:
| Field | Description |
| ---------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| tokens | list[int] — the sampled token ids. |
| maybe_logprobs | list[float] | None— per-token logprobs, orNone when the response carried none. |
| stop_reason | The model’s stop reason (e.g. "stop", "length"), falling back to the response status or "unknown". |
If the Sail response is malformed (missing output_text, missing/ non-integer
token_ids, or mismatched token/logprob lengths), a
sail.InferenceError is raised with the offending
response attached as exc.response.
get_tinker_checkpoint_signed_url_async
tinker_lora_signed_url to SailTokenCompleter. It calls the Tinker
service client’s REST client
(get_checkpoint_archive_url_from_tinker_path_async) and unwraps the URL from the
result (accepting a bare string, or url / signed_url / archive_url /
checkpoint_archive_url on an object or mapping).
This helper is async-only and requires a Tinker REST client with async checkpoint
URL methods.
| Parameter | Description |
|---|---|
service_client | A Tinker ServiceClient (exposes create_rest_client()). |
tinker_path | The Tinker checkpoint path to resolve. |
ttl_seconds | Optional checkpoint TTL to set or extend before resolving the signed URL. |
sail.InferenceError if the Tinker client does
not provide async checkpoint URL methods, or if the response does not contain a
URL.