shreemaan-abhishek opened a new issue, #14155:
URL: https://github.com/apache/apisix/issues/14155
## Current Behavior\n\nReviewing the existing ai-prompt plugins exposed
three problems that predate pull request #14139:\n\n1. ai-prompt-template
always emits the configured Chat Completions-shaped object, regardless of the
request protocol.\n\n- On /v1/messages, a configured system message remains
inside messages, which Anthropic rejects.\n- On /model/.../converse, message
content remains a string instead of Bedrock Converse content blocks.\n- On
/v1/responses, the generated body has messages rather than input and
instructions.\n\n2. Template evaluation inherits unsafe and surprising
name-resolution behavior from the current body-transformer path.\n\n- Request
fields can shadow Lua globals used by the compiled template. For example, a
request field named table can break a template with an error about
table.concat.\n- A false request value can fall through during lookup and
render as an empty value.\n- An absent variable can resolve to a Lua global
instead of being treated as miss
ing.\n\n3. Malformed request shapes can raise Lua exceptions and return 500
responses.\n\n- A top-level JSON number or boolean reaches template_name
indexing in ai-prompt-template.\n- A non-string template_name reaches string
concatenation.\n- An Anthropic request with messages set to a string can reach
ipairs in the protocol adapter.\n\nThese behaviors exist on the base branch
without the changes from #14139. They are being tracked separately so fixes for
newly introduced regressions in that pull request do not silently expand into
an unrelated compatibility redesign.\n\n## Expected Behavior\n\n-
ai-prompt-template should either serialize its canonical template into each
explicitly supported protocol or reject unsupported protocols with a
deterministic 4xx response. Its documented protocol scope should be
explicit.\n- Template variable lookup should preserve false values, avoid
collisions with runtime globals/helpers, and produce a clear client error for
missing variables.\n- The p
rompt plugins and protocol matchers should validate top-level and nested
request shapes before indexing or iterating them. Malformed client input should
return a sanitized 4xx response rather than a Lua exception or 500.\n\n## Steps
to Reproduce\n\nProtocol output:\n\n1. Configure ai-prompt-template with a
template containing model and messages.\n2. Send template parameters through
routes using /v1/messages, /model/test/converse, and /v1/responses.\n3. Observe
that every generated body keeps the Chat Completions messages
shape.\n\nTemplate context lookup:\n\n1. Configure a message containing
Describe {{ table }}.\n2. Send a request containing a string field named
table.\n3. Observe a 503 caused by the request value shadowing the Lua table
global.\n4. Repeat with a false variable or a missing name and observe that the
rendered value does not preserve the request semantics.\n\nMalformed
input:\n\n1. Send a JSON number or boolean to an ai-prompt-template route.\n2.
Send an object whose
template_name is an object.\n3. Send an Anthropic-shaped request whose
messages value is a string through ai-prompt-decorator.\n4. Observe Lua runtime
errors and 500 responses instead of schema-style 4xx errors.\n\n## Acceptance
Criteria\n\n- Define and document the protocol scope of ai-prompt-template.\n-
Add protocol-specific output or explicit rejection tests for Anthropic
Messages, Bedrock Converse, and OpenAI Responses.\n- Define safe
variable-resolution semantics, including false and missing values and reserved
names.\n- Validate top-level JSON objects, template_name, and protocol message
containers before use.\n- Return sanitized 4xx errors for malformed client
input.\n- Preserve compatibility intentionally or document and plan any
required migration.\n\n## Environment\n\n- APISIX: current master before
#14139\n- OpenResty: 1.25.3.2 in the local reproduction environment\n-
Reproduced through source inspection and focused Lua tests; the malformed-shape
paths are directly reac
hable in the current modules.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]