Summary
In the bundled chat UI, the auto-generated conversation title is wrong. Instead of a short title, it comes back as a full agent answer — or, when the agent uses on-behalf-of (OBO) tools, as a refusal like "that capability isn't available right now." The title does not match the conversation.
This affects all agent-* templates, since they all clone the same UI (e2e-chatbot-app-next) and all set API_PROXY.
Why it happens
The UI is designed to generate titles with a separate, lightweight foundation model. In e2e-chatbot-app-next/packages/ai-sdk-providers/src/providers-server.ts:392-401:
if (API_PROXY) { return provider.responses(id); } // returns first
if (id === 'title-model' || id === 'artifact-model') { // intended title path
return provider.chatCompletions('databricks-meta-llama-3-3-70b-instruct');
}
Every agent template sets API_PROXY to point the UI at the deployed agent's /invocations (see e.g. agent-openai-advanced/app.yaml and scripts/start_app.py). So the if (API_PROXY) branch always wins and the dedicated title-model / artifact-model route is dead code. Title requests are therefore routed to the agent like any other turn.
Result
The title request runs the full agent with all of its tools/MCP instead of a small title model. Worse, the title call carries no user/OBO token, so any OBO tool call fails — and the agent returns a "that capability isn't available" refusal (or a full tool-using answer) as the title.
Note on fixing
A simple reorder of the two branches is not sufficient: formatUrl: ({ baseUrl, path }) => API_PROXY ?? \${baseUrl}${path}` (providers-server.ts:252) rewrites the URL for every method on that provider, so chatCompletions('…llama…')would still be sent toAPI_PROXY` and hit the agent. The title/artifact path needs to bypass the proxy and call a foundation-model endpoint directly (which also assumes the deployed UI can reach that endpoint with the right token/scope, and that the hardcoded model name exists in the workspace).
Summary
In the bundled chat UI, the auto-generated conversation title is wrong. Instead of a short title, it comes back as a full agent answer — or, when the agent uses on-behalf-of (OBO) tools, as a refusal like "that capability isn't available right now." The title does not match the conversation.
This affects all
agent-*templates, since they all clone the same UI (e2e-chatbot-app-next) and all setAPI_PROXY.Why it happens
The UI is designed to generate titles with a separate, lightweight foundation model. In
e2e-chatbot-app-next/packages/ai-sdk-providers/src/providers-server.ts:392-401:Every agent template sets
API_PROXYto point the UI at the deployed agent's/invocations(see e.g.agent-openai-advanced/app.yamlandscripts/start_app.py). So theif (API_PROXY)branch always wins and the dedicatedtitle-model/artifact-modelroute is dead code. Title requests are therefore routed to the agent like any other turn.Result
The title request runs the full agent with all of its tools/MCP instead of a small title model. Worse, the title call carries no user/OBO token, so any OBO tool call fails — and the agent returns a "that capability isn't available" refusal (or a full tool-using answer) as the title.
Note on fixing
A simple reorder of the two branches is not sufficient:
formatUrl: ({ baseUrl, path }) => API_PROXY ?? \${baseUrl}${path}`(providers-server.ts:252) rewrites the URL for every method on that provider, sochatCompletions('…llama…')would still be sent toAPI_PROXY` and hit the agent. The title/artifact path needs to bypass the proxy and call a foundation-model endpoint directly (which also assumes the deployed UI can reach that endpoint with the right token/scope, and that the hardcoded model name exists in the workspace).