AI Assistant 2.2.0 migration guide
This guide outlines the changes required to migrate AI Assistant from version 2.1.0 to 2.2.0.
Breaking change: user_id JWT claim required for rate limiting
Previously, the userId field in the client configuration (Web SDK or V2 API) was used as the identity for rate limiting. This meant a client could supply any userId on each request, making it possible to bypass rate limits.
Starting in 2.2.0, the user_id claim in the JSON Web Token (JWT) is the authoritative user identity for rate limiting. Rate limiting now requires the user_id claim to be set in the JWT.
Migration steps
- If you use rate limiting (
request_limitclaim in the JWT) — Add auser_idclaim to the JWT with the user’s identifier. Without it, the server will return a401error. - If you pass
userIdin the client configuration — If the JWT also includes auser_idclaim, the two values must match. A mismatch will return a401error. Either removeuserIdfrom the client configuration, or ensure it matches the JWTuser_idclaim. - If you don’t use rate limiting or
userId— No changes are required.
JWT before and after
Before:
{ "document_ids": ["doc-1"], "request_limit": { "requests": 100, "time_period_s": 3600 }}After:
{ "document_ids": ["doc-1"], "user_id": "user-abc-123", "request_limit": { "requests": 100, "time_period_s": 3600 }}Additional details
- The
user_idclaim must be a non-empty string. - The
user_idis stored as thread metadata for audit and ownership tracking. - See the JWT claims guide for full details on all supported claims.
Deprecated: modelOverrides and model_overrides
AI Assistant 2.2.0 deprecates the modelOverrides request field and the agent_configuration.model_overrides JWT claim. Existing requests continue to work because the server translates them into the new modelServices.models shape, but new integrations should use modelServices and agent_configuration.model_services.
Migration steps
- Replace JWT
agent_configuration.model_overrideswithagent_configuration.model_services.models. - Replace request
modelOverrideswithcontext.modelServices.models. - Don’t send both
modelOverridesandmodelServicesin the same request. Doing so returns a400error.
JWT claim before and after
Before:
{ "agent_configuration": { "model_overrides": { "default-llm": ["openai:*"] } }}After:
{ "agent_configuration": { "model_services": { "models": { "default-llm": ["openai:*"] } } }}model_services.models supports the same model allowlist patterns as model_overrides: exact models, provider wildcards such as "openai:*", and the full wildcard "*".
Request body before and after
Before:
{ "config": { "configurable": { "modelOverrides": { "default-llm": "openai:gpt-4o" } } }}After:
{ "context": { "modelServices": { "models": [ { "labels": ["default-llm"], "model": "openai:gpt-4o" } ] } }}MCP error handling change
Missing model context protocol (MCP) servers now surface as API errors instead of warnings. If you configure MCP servers, verify they’re reachable and correctly authenticated before upgrading.