History & migrating from platisd/openai-pr-description
ai-pr-assistant is inspired by the excellent work of
platisd/openai-pr-description
by Dimitris Platis, and started as a fork of it — the upstream project
appeared abandoned (its last commit predates this one by over a year). It has
since gone in its own direction — new features, an internal restructure,
updated dependencies — with no intent to merge back upstream. It remains
under the MIT license; see LICENSE for the original and this
project's own copyright notices.
If you're currently using platisd/openai-pr-description or an earlier
devsetgo/openai-pr-description
Update your workflow's uses: line:
- uses: platisd/openai-pr-description@master
+ uses: devsetgo/ai-pr-assistant@main
(GitHub redirects the renamed devsetgo/openai-pr-description repository
automatically, but pointing at the new name directly is recommended.)
No input names were removed or repurposed, so an existing with: block
continues to work unchanged. A few defaults did change, described below —
review them even if you don't plan to touch your workflow file.
Behavior changes worth knowing about
- The default model now actually works. The upstream project's last
commit intended to default to
gpt-5-mini, butaction.ymlstill listedgpt-4o-minias the default, soINPUT_OPENAI_MODELwas alwaysgpt-4o-miniin practice regardless of that commit. This project'saction.ymlgenuinely defaults togpt-5-mini. Separately, requests to GPT-5/o-series ("reasoning") models now correctly omittemperatureand usemax_completion_tokensinstead ofmax_tokens— sending the old parameters to those models is rejected by the API with a 400 error, which is what upstream would hit today if used with agpt-5*/o1*/o3*model. max_tokensnow defaults to6000(was1000). It was always the output cap, not a prompt cap — theaction.ymldescription previously (and misleadingly) called it "prompt tokens." The default was raised because reasoning models (gpt-5*,gpt-6*,o1*,o3*,o4*) spend part of this budget on hidden reasoning before writing any visible text, and 1000 could be used up entirely on a large diff, leaving an empty description. If you setmax_tokensyourself, nothing changes for you.- Descriptions now end with a small attribution footer. The new
attributioninput defaults totrueand appendsCreated using devsetgo/ai-pr-assistant with <model>(in<sub>text, below a rule) to the generated description. Setattribution: falseto keep the output exactly as it was. - Diff truncation is now token-accurate. Previously the diff sent to the
model was cut at a hardcoded character count as a rough proxy for tokens.
It's now measured with the real tokenizer for the selected model and
controlled by
max_diff_tokens(default6000), so slightly more or less of a large diff may be included than before. - File pagination is now correct for very large pull requests. The old
implementation only fetched up to 300 changed files (10 pages of 30);
pull requests with more files silently had the rest ignored. Pagination
now follows GitHub's own
Linkheader, with no fixed cap.
overwrite_* inputs gained a third mode
overwrite_description and overwrite_title now take always, never or smart,
and overwrite_labels is new. true and false keep working as always and never.
Five behaviors differ from earlier versions:
enable_labelsno longer adds labels to a PR that already has some unlessoverwrite_labelsisalwaysorsmart. Those two modes can also remove taxonomy labels the model no longer chooses.- A description that already exists no longer stops the run: with
overwrite_description: never, title and label modes that allow it still apply. detect_breaking_changesnow always adds its note and label when it finds a breaking change, even withnevermodes orenable_labelsoff. It runs the model on every push and needsissues: write.- The
max_tokensdefault rises from2000to6000if you came from an earlierdevsetgoversion, sincesmartreviews on reasoning models could run out at the old limit. A long reply can cost more. - Structured-mode descriptions use emoji headings and callouts by default, and the
breaking-change note is now a
> [!CAUTION]callout. Setdescription_style: plainfor the earlier description format.
New, opt-in only
Everything else added here — generate_title, enable_labels,
detect_breaking_changes, exclude_patterns, and provider: anthropic (Claude
via the direct Anthropic API, with anthropic_api_key and anthropic_model) —
defaults to off/unchanged. provider defaults to openai. One related detail:
openai_api_key is no longer marked required in action.yml, since which key
is needed depends on the provider; the Action instead fails early with a clear
message if the selected provider's key is missing.
A workflow that doesn't set any of these keeps the plain-description
behavior it had before (apart from the attribution footer above). See CONFIGURATION.md for what
each one does.