promotional bannermobile promotional banner

NexusAI

Async AI bridge for Paper via PlaceholderAPI — unique pools, TTL cache, prewarm
Back to Files

NexusAI 1.1.1

File nameNexusAI-1.1.1.jar
Uploader
NearestStepNearestStep
Uploaded
Oct 5, 2026
Downloads
9
Size
3.7 MB
File ID
9066930
Type
R
Release
Supported game versions
  • 26.2
  • 26.1.2
  • 26.1.1
  • 26.1
  • 1.21.11
  • 1.21.10
  • 1.21.9
  • 1.21.8
  • 1.21.7
  • 1.21.6
  • 1.21.5
  • 1.21.4
  • 1.21.3
  • 1.21.1
  • 1.21
  • 1.20.6

What's new

Bugfix release: gpt-5 request parameters, /nai talk fallback after HTTP 429, masking of tool names and dialogue summaries and base URL handling. Everyone on 1.1.0 should update; there are no new config keys and config.yml stays at config-version: 2.

Upgrading

  • Replace NexusAI-1.1.0.jar with NexusAI-1.1.1.jar and restart.
  • No config changes: 1.1.1 adds no keys, so there is nothing to append or edit, and config-version stays 2.
  • To roll back: stop the server, put NexusAI-1.1.0.jar back and start it. config.yml can stay as it is.

gpt-5 models

  • Fix: OpenAI gpt-5 models (gpt-5, gpt-5-mini, gpt-5.1, and the same names with a provider prefix) are treated as reasoning models. The request sends max_completion_tokens instead of max_tokens and omits temperature, the same way o1 / o3 / o4 already did. A max-tokens below 2048, including 0 or a negative value, is sent as 2048.
  • gpt-oss, deepseek-r1, qwq and other reasoner names still send max_tokens. A non-reasoning request body is unchanged from 1.1.0.

Talk fallback

  • After HTTP 429 pauses the queue provider, /nai talk uses fallback-model when that model is on a different provider that is not paused. If the fallback is on the same provider, is also paused or is not set, the player still sees talk.busy.
  • A connection error, a timeout and HTTP 500 do not send talk to fallback-model.
  • A successful fallback reply does not clear the queue cooldown and does not start the request-gate pause, so a later placeholder can still be answered by the same fallback model. Placeholders stay on fallback text while the request gate itself is paused.
  • Fix: a reply that is empty only after colour codes or markup are removed, and a rejected reply, no longer cool the fallback down; the next line tries it again, as on the queue path. Missing, null or whitespace-only content is a transport error: the player sees talk.busy, and that fallback or queue row cools down for limits.provider-pause-seconds.
  • Fix: HTTP 401 on the fallback walks that provider's key ring in the same turn. The console line for a failed fallback names the fallback's HTTP status, with the key masked.
  • Fix: /nai reload applies a new http.max-in-flight and http.queue-size to /nai talk.

Tool calls and masking

  • Fix: a tool_calls list is used only when the turn offered tools. Otherwise the text goes through the same filters as any other reply, so a section sign, a boundary marker or an echoed key is not shown or stored.
  • Text returned next to a real tool call goes through those filters before it can reach the player or dialogue memory. A boundary marker next to a real tool call rejects the whole reply, and the action does not run.
  • Fix: a tool name is masked in actions.log and the server log, and an unknown tool name is not repeated in the follow-up note. A stored dialogue summary is masked the same way before it is written to dialogue-memory.yml or sent again.

Base URL

  • Fix: a base URL whose path already contains /chat/completions is not given a second copy. Matching ignores letter case (/Chat/Completions) and keeps a longer path (/chat/completions/extra). A query string is still moved to the end, as in 1.1.0.
  • A fragment stays on the URL (/v1#frag becomes /v1/chat/completions#frag). HTTP does not send the fragment, so a log of the request line will not show it.

Known issues

  • The player-input boundary and the reply filter reduce prompt-injection risk. They do not eliminate it.
  • An HTTP 429 on one model pauses its whole provider. Put fallback-model on a different provider so /nai talk can still answer.
  • A dialogue summary written by a version before 1.1.1 can keep a raw key in dialogue-memory.yml until the next summary for that player and character; requests that use it are masked. To clear it now, stop the server and delete dialogue-memory.yml (or its summary: lines). Only dialogue memory is lost.
  • The other known issues listed for 1.1.0 are unchanged.

Compatibility

  • Paper and Purpur 1.20.6–26.2; Folia is not supported; Java 21 or newer
  • PlaceholderAPI 2.11.6+ (soft-depend)
  • Tested with PlaceholderAPI 2.12.3 on Paper 1.20.6-151, 1.21.1-133, 1.21.4-232, 1.21.8-60 and 26.2-129, and on Purpur 1.20.6-2233 and 26.2-2633 (Java 21 on 1.20.6–1.21.8, Java 25 on 26.2). Load scenarios S1–S5 were run again against this build with JFR; the numbers are in docs/LOADTEST.md.
  • Paper and Purpur 26.3, Spigot and CraftBukkit are not supported.

Download

NexusAI-1.1.1.jar, SHA-256 78382527ef67cfe0365135711953ddd1f7ae68676673a1fdeae79b301cdef99f

Full history: CHANGELOG.md

This mod has no additional files