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.
| Field | Meaning |
|---|---|
model | Use startlux-decision-27b-autothink. It can be omitted to select this model. |
state | Required shared input: text or a JSON value. |
questions | Required nonempty object. Each key is a question ID; the response uses the same IDs. |
images | Optional array of up to 8 base64 strings or image data URIs. Image markers in state correspond to images in array order. |
think_mode | Default auto: think when the first answer is uncertain; never skips thinking; always requests it. |
think_budget | Integer from 1 to 4096, default 4096. Omit it to keep the normal reasoning budget; 1 would limit thinking to one token when enabled. |
gate | Number from 0 to 1, default 0.6. In auto mode, triggers thinking below this confidence threshold. Explicit zero is preserved. |
mix | Number 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_check | Default true. Each choice answer includes none_probability. Set false to disable the check and omit this field. |
allow_none | Default 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_details | Include decision details and timing when supported by the upstream. |
return_thought | Include 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: Supplyinstructionsand a nonemptycriteriaobject or list. The answer containschoice, probabilities, and confidence.choicecan benullwhen none detection permits it.score: Supplyinstructionsand 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 returnednoulis the probability of “yes”, not a boolean. Choose an application threshold, such asnoul >= 0.5.bool: An accepted request alias fornoul. The response type isnoul.
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.