--argjson requires strict JSON; the unquoted-key object made jq fail,
sent an empty request body, and the triage died with 'model returned
nothing'. Also log the raw API response when choices is missing so the
next failure shows its cause immediately.
The trailing-line LABELS contract was unreliable at temperature 0.2:
a raw A/B run showed both deepseek-chat and deepseek-flash emit the
line correctly at temperature 0 but drop it nondeterministically at
0.2 (five failed live runs, one lucky success). Structural fix: the
triage now requests response_format json_object, temperature 0, and
parses the reply with jq (comment field for the reply, labels array
for labeling). The label whitelist still drops invented names and the
raw JSON is logged before parsing. Model switched to deepseek-flash:
the A/B showed JSON compliance on both models and flash is the
cheaper line. Mentions and PR first-looks keep text mode at
temperature 0.
The reworded instruction from #20 ("plain text with no markdown
formatting, characters, or emphasis") made models stop emitting the
LABELS line entirely; the original quoted phrasing had 100 percent
compliance. Tolerant parser and debug logging stay.
deepseek-flash dropped the LABELS instruction twice in live tests
(decorated once, absent once); deepseek-chat followed it exactly on
the first try. The price difference is fractions of a cent per call,
reliability wins. The tolerant parser from #20 stays: it is harmless
and protects against any model formatting quirks.
deepseek-flash sometimes bolds or backticks the LABELS marker and the
individual names. Accept any decoration around the marker line and
strip markdown characters from each name before the whitelist check.
Also log the parsed label line for easier triage of future misses.
DeepSeek's current recommendation: V4.1-Flash replaces V4-Pro and is
the efficient line (new encoder-decoder MoE, quarter-size KV cache,
off-peak at half price). Plenty for triage work; the API name is
deepseek-flash.
Closes#15. Issues opened by the maintainer now go through the same
classification and label application but without the triage comment
or reaction. Visitors keep the full behavior; mentions and PR
first-looks stay maintainer-off.
Closes#13. The triage prompt now ends with a LABELS line (bug,
question, feature, plus P1/P2/P3 for bugs). The script strips that
line from the posted comment, filters it against a fixed whitelist,
creates the labels with stable colors if missing, and applies them.
Mentions and PR first-looks stay comment-only.
Closes#10. A GitHub Action bot with no server: one triage comment per
new issue (classification, missing-info list, grounded first answer),
answers comments that @artex-bot, and a first-look summary checklist on
opened pull requests. Comment-only, never an approving review. Skips
the maintainer, bots, and itself; exits cleanly without the API key;
all model inputs are size-capped.