Skip to content

Add a caller-managed Gimbal-27B server adapter - #65

Open
Superwheat wants to merge 1 commit into
hotchpotch:mainfrom
Superwheat:add-gimbal-adapter
Open

Superwheat wants to merge 1 commit into
hotchpotch:mainfrom
Superwheat:add-gimbal-adapter

Conversation

@Superwheat

@Superwheat Superwheat commented Oct 26, 2026 •

Copy link
Copy Markdown

Problem and resulting behavior

Superwheat/Gimbal-27B is a typed decision model served by its
own released helper (helper/gimbal_serve, vLLM pooling runner) at POST /v1/systemone. The shared
llama-cpp adapter does not fit that server: the server's native Noul type rejects outcome definitions, a
request holds at most 64 questions, and the full-precision probabilities are only in raw_probabilities.

This PR adds --adapter gimbal, a client for a running server that never starts, stops or configures it:

  • Noul questions are sent as an explicit two-option Choice over the authored true/false definitions, in
    declared order, and mapped back to false/true (noul_transport: explicit-choice-v1).
  • Choice keys are anonymous; Score levels are sent in ascending numeric order and mapped back to the
    declared option IDs; structured instructions and descriptions keep their JSON values.
  • States other than strings or objects, and JSON scalar values, are sent as their JSON text.
  • Cases above 64 questions are sent in consecutive chunks of 64 with the same state. The server scores
    each question independently (premise = that question's instructions plus the state, one hypothesis per
    candidate), so no question's candidates are split.
  • Probabilities are the server's unrounded calibrated raw_probabilities from --full-precision, validated
    without renormalization. A server without --full-precision is a visible failure.
  • Overflow is rejected by the server against its --max-tokens limit (HTTP 400) and kept as an unretried
    failure; transient statuses and transport errors get a bounded retry. Response bodies are never recorded.
  • Kwargs through --adapter-kwargs: base_url, served_model, timeout, case_batch_size (1..32),
    retries (0..5) and runtime_settings (recorded metadata only).

OPEN_MODELS.md gains a Gimbal-27B section with the server command, transport rules and the input limit
(the longest english-v1 branch is 14,713 tokens with the model's tokenizer, so --max-tokens 16384 covers
the scope). evaluator/README.md links it.

Validation

  • tests/test_gimbal.py (39 synthetic tests with httpx.MockTransport): transport of all three tasks with
    nontrivial option order, structured values and authored Noul definitions; numeric Score level order;
    JSON-text transport of array and scalar values; chunking of a 65-question case; malformed responses
    (missing full-precision maps, wrong keys, sums, booleans, tasks, IDs, usage, non-object payloads); model
    drift; inputs rejected before any call (over 256 options, over 10 levels, images, Box, duplicate IDs);
    unretried 400/413 without echoing bodies; bounded retries for 5xx and transport errors; batch alignment
    with individual failures; invalid settings; CLI kwargs passing and rejection of foreign kwargs.
  • uv run tox (py311, lint, type): 725 passed, 7 skipped; ruff check . and ty check pass.
  • CPU end-to-end check against the released helper (gimbal_serve at the pinned checkpoint, its real
    request schema, serialization, tokenizer and calibration, with a fake scorer in place of the GPU): all 137
    english-v1 benchmarks at dataset revision 10bcb8c6916b98b966cc1f03aab1781a7c354b4c completed with zero
    failed decisions and validated; 18,702 requests, 169,395 branches.
  • Real-model GPU smoke and full run: see the linked Dataset PR (smoke smoke-v1 --limit 2, then the full
    scope on one B200).

Related result submission

Dataset PR for Gimbal-27B english-v1: https://huggingface.co/datasets/hotchpotch/s1mb-result/discussions/114

Language scopes and training exposure

English (english-v1) only. This PR changes code and documentation only; the result PR's metadata.json
carries the training-exposure declarations.

The gimbal adapter evaluates Superwheat/Gimbal-27B through the released
gimbal_serve vLLM helper at POST /v1/systemone, without starting or
configuring the server.

- Send Noul as an explicit two-option Choice over the authored true/false
  definitions, since the native Noul type takes no outcome definitions.
- Send states other than strings or objects, and JSON scalar values, as
  their JSON text.
- Chunk cases above the server's 64-question limit with the same state.
- Read unrounded raw_probabilities from a --full-precision server and keep
  server overflow rejections as unretried failures.
- Accept gimbal constructor kwargs through --adapter-kwargs.
- Document setup, transport and input limits in OPEN_MODELS.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant