Bamboo Relay
AI model APIDecisions

StartLux Decision API

Free testing of structured decisions, image input, and automatic thinking through Bamboo Relay

StartLux-Decision is trained by StartLux Labs. Bamboo Relay provides API access to the 27B AutoThink model. It evaluates named questions against a shared state and returns choices, scores, and probabilities.

Official resources: Hugging Face model · GitHub · Technical report.

Model: startlux-decision-27b-autothink

Endpoint: POST https://api.bamboonode.cn/v1/decisions

Compatible alias: POST https://api.bamboonode.cn/v1/systemone

Price: Free during the current testing rollout, including for new accounts with a zero balance; no top-up is required. A valid Bamboo API key with access to the default group is required. Provider token usage is returned even when the charge is zero.

Quick start

Create a Bamboo API key in the console, then keep it in your application's server environment:

export BAMBOO_API_KEY="YOUR_BAMBOO_API_KEY"

curl https://api.bamboonode.cn/v1/decisions \
  -H "Authorization: Bearer $BAMBOO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "startlux-decision-27b-autothink",
    "state": "A customer was charged twice for an order and wants a refund.",
    "questions": {
      "team": {
        "type": "choice",
        "instructions": "Which team should handle this ticket?",
        "criteria": {"billing": "Payments and refunds", "tech": "Technical errors"}
      },
      "urgent": {"type": "noul", "instructions": "Is there an immediate safety emergency?"},
      "severity": {
        "type": "score",
        "instructions": "Rate the impact of the duplicate charge.",
        "criteria": ["Low impact", "High impact"]
      }
    },
    "think_mode": "auto"
  }'

The response is a decision object. Values below are illustrative:

{
  "model": "startlux-decision-27b-autothink",
  "answers": {
    "team": {"type": "choice", "choice": "billing", "confidence": 0.998, "none_probability": 0.004, "probabilities": {"billing": 0.999, "tech": 0.001}},
    "urgent": {"type": "noul", "noul": 0.01},
    "severity": {"type": "score", "score": 0.81, "probabilities": {"0": 0.19, "1": 0.81}}
  },
  "usage": {"input_tokens": 241, "output_tokens": 0}
}

Request fields

Defaults below apply to the A800 service currently connected to Bamboo Relay. Omitted fields use those server settings; explicit request values override them. In particular, this deployment enables allow_none, while a generic StartLux server may leave it disabled.

FieldMeaning
modelUse startlux-decision-27b-autothink. It can be omitted to select this model.
stateRequired shared input: text or a JSON value.
questionsRequired nonempty object. Each key is a question ID; the response uses the same IDs.
imagesOptional array of up to 8 base64 strings or image data URIs. Image markers in state correspond to images in array order.
think_modeDefault auto: think when the first answer is uncertain; never skips thinking; always requests it.
think_budgetInteger from 1 to 4096, default 4096. Omit it to keep the normal reasoning budget; 1 would limit thinking to one token when enabled.
gateNumber from 0 to 1, default 0.6. In auto mode, triggers thinking below this confidence threshold. Explicit zero is preserved.
mixNumber from 0 to 1, default 0.75. Weights the read-out after thinking: final = (1 - mix) × first + mix × after-thinking. Explicit zero is preserved.
none_checkDefault true. Each choice answer includes none_probability. Set false to disable the check and omit this field.
allow_noneDefault true on this service. choice may be null when the internal “None of the above” option wins. Set false to keep a listed option.
return_detailsInclude decision details and timing when supported by the upstream.
return_thoughtInclude thinking text when a thought is generated. Setting it to true automatically includes details; read answers.<id>.details.thought.text without also setting return_details.

Streaming is unsupported. Decisions complete synchronously; no polling request is needed.

Question types

  • choice: Supply instructions and a nonempty criteria object or list. The answer contains choice, probabilities, and confidence. choice can be null when none detection permits it.
  • score: Supply instructions and 2–10 ordered criteria, as a list or numeric-keyed object. The answer contains the score and probabilities.
  • noul: Ask a yes/no question. The returned noul is the probability of “yes”, not a boolean. Choose an application threshold, such as noul >= 0.5.
  • bool: An accepted request alias for noul. The response type is noul.

None detection and null answers

With the default none_check: true, none_probability indicates how strongly the model believes none of the listed options is correct. It is an uncalibrated warning signal, rather than a precise probability. The official guidance recommends treating none_probability >= 0.2 as no suitable listed option: review the answer or retry with better options. See the official explanation and threshold measurements.

This application threshold is separate from allow_none: the server returns choice: null when its internal “None of the above” option wins. Handle null explicitly even when your application does not use the 0.2 threshold. The listed probabilities are normalized separately, so a high listed-option probability does not rule out a high none_probability.

Images and thinking

Put image data in images and insert one <image> marker per image in state, in the same order: the first marker maps to images[0], the second to images[1], and so on. When markers are used, their count must equal the number of images; a mismatch returns HTTP 422. For JSON states, put the markers inside string values.

{
  "model": "startlux-decision-27b-autothink",
  "state": "<image> Identify the dominant color.",
  "images": ["data:image/png;base64,BASE64_IMAGE_DATA"],
  "questions": {
    "color": {"type": "choice", "instructions": "Which color fills the image?", "criteria": ["red", "blue"]}
  },
  "think_mode": "always",
  "return_thought": true
}

usage.input_tokens includes the upstream's input accounting, including rereads during elimination. usage.output_tokens includes generated thinking tokens. These fields are preserved in the gateway response.

Node.js example

const response = await fetch("https://api.bamboonode.cn/v1/decisions", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.BAMBOO_API_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "startlux-decision-27b-autothink",
    state: "The shop opens from 09:00 to 17:00. It is now 12:00.",
    questions: { open: { type: "noul", instructions: "Is the shop open?" } },
    think_mode: "auto"
  })
});
if (!response.ok) throw new Error(`Request failed (${response.status})`);
const result = await response.json();
console.log(result.answers.open.noul >= 0.5);

Errors

Missing or invalid Bamboo API keys return HTTP 401. The key must permit this model and its group. Image-marker count mismatches return HTTP 422. Invalid question shapes, image counts, thinking budgets, and unsupported streaming are rejected. Provider failures return a gateway error; inspect the status and error message before retrying.

On this page