{"record":{"id":"05c5550f91d8282a","repo":"langchain-ai/deepagents","slug":"claude-model-model-name-uses-the-anthropic-mes","errorCode":null,"errorMessage":"Claude model '{model_name}' uses the Anthropic Messages API on Vertex AI. Use 'google_anthropic_vertex:{model_name}' instead of 'google_vertexai:{model_name}'.","messagePattern":"Claude model '(.+?)' uses the Anthropic Messages API on Vertex AI\\. Use 'google_anthropic_vertex:(.+?)' instead of 'google_vertexai:(.+?)'\\.","errorType":"validation","errorClass":"ModelConfigError","httpStatus":null,"severity":"error","filePath":"libs/code/deepagents_code/config.py","lineNumber":5756,"sourceCode":"        else:\n            msg = (\n                f\"Invalid model spec '{model_spec}': model name is required \"\n                \"(e.g., 'anthropic:claude-sonnet-4-5' or 'claude-sonnet-4-5')\"\n            )\n            raise ModelConfigError(msg)\n    else:\n        # Bare model name — auto-detect provider or let init_chat_model infer\n        model_name = model_spec\n        provider = inferred_provider or \"\"\n\n    if provider == \"google_vertexai\" and model_name.lower().startswith(\"claude-\"):\n        msg = (\n            f\"Claude model '{model_name}' uses the Anthropic Messages API on \"\n            \"Vertex AI. Use \"\n            f\"'google_anthropic_vertex:{model_name}' instead of \"\n            f\"'google_vertexai:{model_name}'.\"\n        )\n        raise ModelConfigError(msg)\n\n    resolved_spec = f\"{provider}:{model_name}\" if provider else model_spec\n    # The authoritative policy gate, and its position is load-bearing: it runs\n    # after provider inference (so a bare name is matched in canonical form)\n    # but before credential bridging, provider profiles, and provider imports.\n    # A blocked spec must not copy stored keys onto env vars or run a provider\n    # `pre_init` hook. `test_rejects_before_credential_side_effects` pins this.\n    config.require_model_allowed(resolved_spec)\n\n    # Stored API keys (added via `/auth`) take effect by being copied onto\n    # the env var name LangChain reads. Apply before the credential check so\n    # `has_provider_credentials` and the downstream SDK see the same value.\n    if provider:\n        # Flag a key/endpoint resolved from different env tiers *before*\n        # `apply_stored_credentials` bridges stored values onto plain env vars,\n        # so the check sees the user's raw env intent rather than post-bridge\n        # state. Diagnostic only -- never alters resolution.\n        warn_on_split_credential_source(provider)","sourceCodeStart":5738,"sourceCodeEnd":5774,"githubUrl":"https://github.com/langchain-ai/deepagents/blob/a1af029e6e73cb17c36bff823d227747b28e91e1/libs/code/deepagents_code/config.py#L5738-L5774","documentation":"Raised when a Claude model is requested via the `google_vertexai` provider. Claude on Vertex AI uses the Anthropic Messages API, which requires the `google_anthropic_vertex` provider, not the Vertex AI Gemini provider.","triggerScenarios":"`create_model('google_vertexai:claude-...')` or a bare 'claude-*' name auto-resolved to google_vertexai (e.g. when Vertex credentials are present), with the model name starting with 'claude-'.","commonSituations":"Users on GCP assuming all Vertex AI models use google_vertexai; auto-detection picking google_vertexai because GOOGLE_APPLICATION_CREDENTIALS/Vertex creds are configured while the intended backend is Claude on Vertex.","solutions":["Use the 'google_anthropic_vertex:claude-...' provider prefix explicitly.","If you meant a Gemini model, correct the model name (it should not start with 'claude-').","Install/configure the Anthropic-on-Vertex integration (langchain-google-vertexai with the anthropic_vertex route) and its credentials."],"exampleFix":"// before\nmodel = create_model(\"google_vertexai:claude-sonnet-4-5\")\n// after\nmodel = create_model(\"google_anthropic_vertex:claude-sonnet-4-5\")","handlingStrategy":"validation","validationCode":"def route_provider(provider: str, model: str) -> str:\n    if provider == \"google_vertexai\" and model.lower().startswith(\"claude-\"):\n        return \"google_anthropic_vertex\"\n    return provider\n# spec = f\"{route_provider(p, m)}:{m}\"","typeGuard":null,"tryCatchPattern":"try:\n    result = create_model(spec)\nexcept ModelConfigError as e:\n    if \"google_anthropic_vertex\" in str(e):\n        spec = spec.replace(\"google_vertexai:\", \"google_anthropic_vertex:\", 1)\n        result = create_model(spec)","preventionTips":["Remember Claude-on-Vertex uses the google_anthropic_vertex provider, not google_vertexai","Be explicit with the provider prefix when Vertex credentials would otherwise trigger auto-detection","Keep Gemini model ids (gemini-*) under google_vertexai and Claude ids under google_anthropic_vertex"],"tags":["model-config","provider-routing","gcp","vertex-ai"],"backgroundTag":"wrong-provider-for-model","analyzedSha":"a1af029e6e73cb17c36bff823d227747b28e91e1","analyzedAt":"2026-08-29T11:43:24.718Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}