Commit
·
bfc953b
1
Parent(s):
11ad1dd
fix(config): update default LLM models to stable Nov 2025 versions
Browse files
docs/bugs/INVESTIGATION_INVALID_MODELS.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Bug Investigation: Invalid Default LLM Models
|
| 2 |
+
|
| 3 |
+
## Status
|
| 4 |
+
- **Date:** 2025-11-29
|
| 5 |
+
- **Reporter:** CLI User
|
| 6 |
+
- **Component:** `src/utils/config.py`
|
| 7 |
+
- **Priority:** High (Magentic Mode Blocker)
|
| 8 |
+
- **Resolution:** FIXED
|
| 9 |
+
|
| 10 |
+
## Issue Description
|
| 11 |
+
The user encountered a 403 error when running in Magentic mode:
|
| 12 |
+
`Error code: 403 - {'error': {'message': 'Project ... does not have access to model gpt-5.1', ... 'code': 'model_not_found'}}`
|
| 13 |
+
|
| 14 |
+
This indicates the application is trying to use `gpt-5.1`, which the user's API key did not have access to (likely a beta/gated model).
|
| 15 |
+
|
| 16 |
+
## Root Cause Analysis
|
| 17 |
+
The default config used `gpt-5.1` (beta/preview) and `claude-sonnet-4-5-20250929`.
|
| 18 |
+
Initial remediation mistakenly downgraded these to 2024 models (`gpt-4o`).
|
| 19 |
+
Web search confirmed that in November 2025:
|
| 20 |
+
- `claude-sonnet-4-5-20250929` IS valid.
|
| 21 |
+
- `gpt-5.1` exists but access is restricted (leading to 403).
|
| 22 |
+
- `gpt-5` (August 2025) is the stable flagship.
|
| 23 |
+
|
| 24 |
+
## Solution Implemented
|
| 25 |
+
Updated `src/utils/config.py` to use:
|
| 26 |
+
- `anthropic_model`: `claude-sonnet-4-5-20250929` (Restored correct Nov 2025 model)
|
| 27 |
+
- `openai_model`: `gpt-5` (Changed from 5.1 to 5 to ensure stability/access).
|
| 28 |
+
|
| 29 |
+
## Verification
|
| 30 |
+
- `tests/unit/agent_factory/test_judges_factory.py` updated and passed.
|
src/utils/config.py
CHANGED
|
@@ -26,7 +26,7 @@ class Settings(BaseSettings):
|
|
| 26 |
llm_provider: Literal["openai", "anthropic", "huggingface"] = Field(
|
| 27 |
default="openai", description="Which LLM provider to use"
|
| 28 |
)
|
| 29 |
-
openai_model: str = Field(default="gpt-5
|
| 30 |
anthropic_model: str = Field(
|
| 31 |
default="claude-sonnet-4-5-20250929", description="Anthropic model"
|
| 32 |
)
|
|
|
|
| 26 |
llm_provider: Literal["openai", "anthropic", "huggingface"] = Field(
|
| 27 |
default="openai", description="Which LLM provider to use"
|
| 28 |
)
|
| 29 |
+
openai_model: str = Field(default="gpt-5", description="OpenAI model name")
|
| 30 |
anthropic_model: str = Field(
|
| 31 |
default="claude-sonnet-4-5-20250929", description="Anthropic model"
|
| 32 |
)
|
tests/unit/agent_factory/test_judges_factory.py
CHANGED
|
@@ -25,11 +25,11 @@ def test_get_model_openai(mock_settings):
|
|
| 25 |
"""Test that OpenAI model is returned when provider is openai."""
|
| 26 |
mock_settings.llm_provider = "openai"
|
| 27 |
mock_settings.openai_api_key = "sk-test"
|
| 28 |
-
mock_settings.openai_model = "gpt-5
|
| 29 |
|
| 30 |
model = get_model()
|
| 31 |
assert isinstance(model, OpenAIChatModel)
|
| 32 |
-
assert model.model_name == "gpt-5
|
| 33 |
|
| 34 |
|
| 35 |
def test_get_model_anthropic(mock_settings):
|
|
@@ -58,7 +58,7 @@ def test_get_model_default_fallback(mock_settings):
|
|
| 58 |
"""Test fallback to OpenAI if provider is unknown."""
|
| 59 |
mock_settings.llm_provider = "unknown_provider"
|
| 60 |
mock_settings.openai_api_key = "sk-test"
|
| 61 |
-
mock_settings.openai_model = "gpt-5
|
| 62 |
|
| 63 |
model = get_model()
|
| 64 |
assert isinstance(model, OpenAIChatModel)
|
|
|
|
| 25 |
"""Test that OpenAI model is returned when provider is openai."""
|
| 26 |
mock_settings.llm_provider = "openai"
|
| 27 |
mock_settings.openai_api_key = "sk-test"
|
| 28 |
+
mock_settings.openai_model = "gpt-5"
|
| 29 |
|
| 30 |
model = get_model()
|
| 31 |
assert isinstance(model, OpenAIChatModel)
|
| 32 |
+
assert model.model_name == "gpt-5"
|
| 33 |
|
| 34 |
|
| 35 |
def test_get_model_anthropic(mock_settings):
|
|
|
|
| 58 |
"""Test fallback to OpenAI if provider is unknown."""
|
| 59 |
mock_settings.llm_provider = "unknown_provider"
|
| 60 |
mock_settings.openai_api_key = "sk-test"
|
| 61 |
+
mock_settings.openai_model = "gpt-5"
|
| 62 |
|
| 63 |
model = get_model()
|
| 64 |
assert isinstance(model, OpenAIChatModel)
|