diff --git a/api/server/controllers/TokenConfigController.js b/api/server/controllers/TokenConfigController.js index 8e5db5b3e6..0014485ea8 100644 --- a/api/server/controllers/TokenConfigController.js +++ b/api/server/controllers/TokenConfigController.js @@ -30,8 +30,11 @@ async function tokenConfigController(req, res) { endpointTokenConfigs[name] = endpointConfig.tokenConfig; continue; } + /** The models-config fetch path stores under the plain endpoint name; + * chat initialization stores under the user-scoped key — accept either */ const tokenKey = getTokenConfigKey(endpointConfig, name, req.user.id); - const cached = await cache.get(tokenKey); + const cached = + (await cache.get(tokenKey)) ?? (tokenKey !== name ? await cache.get(name) : undefined); if (cached) { endpointTokenConfigs[name] = cached; } diff --git a/api/server/controllers/agents/callbacks.js b/api/server/controllers/agents/callbacks.js index 9373caa1d0..cd74631161 100644 --- a/api/server/controllers/agents/callbacks.js +++ b/api/server/controllers/agents/callbacks.js @@ -464,12 +464,19 @@ function getDefaultHandlers({ if (GraphEvents.ON_CONTEXT_USAGE) { handlers[GraphEvents.ON_CONTEXT_USAGE] = { /** - * Forward per-model-call context usage snapshots to the client. + * Forward per-model-call context usage snapshots to the client, + * honoring the same sequential-agent visibility gate as deltas. * @param {string} event - The event name. * @param {StreamEventData} data - The event data. + * @param {GraphRunnableConfig['configurable']} [metadata] The runnable metadata. */ - handle: async (event, data) => { - await emitEvent(res, streamId, { event, data }); + handle: async (event, data, metadata) => { + if ( + checkIfLastAgent(metadata?.last_agent_id, metadata?.langgraph_node) || + !metadata?.hide_sequential_outputs + ) { + await emitEvent(res, streamId, { event, data }); + } }, }; }