Skip to content

Commit 10321f8

Browse files
authored
Merge pull request #190 from ansari-project/update-ansari-claude-to-sonnet-4-5
Update AnsariClaude to use Sonnet 4.5
2 parents 32d98ca + 4521409 commit 10321f8

File tree

2 files changed

+97
-1
lines changed

2 files changed

+97
-1
lines changed

src/ansari/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def get_resource_path(filename):
195195
AYAH_SYSTEM_PROMPT_FILE_NAME: str = Field(default="system_msg_ayah")
196196
PROMPT_PATH: str = Field(default=str(get_resource_path("prompts")))
197197
AGENT: str = Field(default="AnsariClaude")
198-
ANTHROPIC_MODEL: str = Field(default="claude-sonnet-4-20250514")
198+
ANTHROPIC_MODEL: str = Field(default="claude-sonnet-4-5")
199199
LOGGING_LEVEL: str = Field(default="INFO")
200200
DEV_MODE: bool = Field(default=False)
201201

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
"""Unit tests for AnsariClaude model version verification."""
2+
3+
import pytest
4+
from unittest.mock import MagicMock, patch
5+
6+
7+
@pytest.fixture
8+
def mock_settings():
9+
"""Mock settings for testing."""
10+
settings = MagicMock()
11+
settings.ANTHROPIC_API_KEY = MagicMock()
12+
settings.ANTHROPIC_API_KEY.get_secret_value.return_value = "test-api-key"
13+
settings.ANTHROPIC_MODEL = "claude-sonnet-4-5"
14+
settings.KALEMAT_API_KEY = MagicMock()
15+
settings.KALEMAT_API_KEY.get_secret_value.return_value = "test-kalemat-key"
16+
settings.VECTARA_API_KEY = MagicMock()
17+
settings.VECTARA_API_KEY.get_secret_value.return_value = "test-vectara-key"
18+
settings.MAWSUAH_VECTARA_CORPUS_KEY = "test-corpus-key"
19+
settings.TAFSIR_VECTARA_CORPUS_KEY = "test-tafsir-key"
20+
settings.USUL_API_TOKEN = MagicMock()
21+
settings.USUL_API_TOKEN.get_secret_value.return_value = "test-usul-token"
22+
settings.MODEL = "test-model"
23+
settings.PROMPT_PATH = "/test/prompts"
24+
settings.SYSTEM_PROMPT_FILE_NAME = "system_msg_default"
25+
settings.AYAH_SYSTEM_PROMPT_FILE_NAME = "system_msg_ayah"
26+
settings.MAX_FAILURES = 3
27+
return settings
28+
29+
30+
class TestAnsariClaudeModelVersion:
31+
"""Test AnsariClaude model version configuration."""
32+
33+
def test_model_version_is_sonnet_4_5(self, mock_settings):
34+
"""Test that AnsariClaude uses Sonnet 4.5 model."""
35+
with patch("anthropic.Anthropic"), patch("ansari.agents.ansari.PromptMgr") as mock_prompt_mgr:
36+
# Mock the prompt manager
37+
mock_prompt = MagicMock()
38+
mock_prompt.render.return_value = "Test system prompt"
39+
mock_prompt_mgr.return_value.bind.return_value = mock_prompt
40+
41+
from src.ansari.agents.ansari_claude import AnsariClaude
42+
43+
# Initialize AnsariClaude
44+
ansari = AnsariClaude(mock_settings)
45+
46+
# Verify the model version is Sonnet 4.5
47+
assert ansari.settings.ANTHROPIC_MODEL == "claude-sonnet-4-5"
48+
49+
def test_model_sent_to_api(self, mock_settings):
50+
"""Test that the correct model version is sent to the Anthropic API."""
51+
with patch("anthropic.Anthropic") as mock_anthropic, patch("ansari.agents.ansari.PromptMgr") as mock_prompt_mgr:
52+
# Mock the prompt manager
53+
mock_prompt = MagicMock()
54+
mock_prompt.render.return_value = "Test system prompt"
55+
mock_prompt_mgr.return_value.bind.return_value = mock_prompt
56+
57+
# Mock the Anthropic client
58+
mock_client = MagicMock()
59+
mock_anthropic.return_value = mock_client
60+
61+
# Mock the response stream
62+
mock_response = MagicMock()
63+
mock_response.__iter__ = MagicMock(return_value=iter([]))
64+
mock_client.messages.create.return_value = mock_response
65+
66+
from src.ansari.agents.ansari_claude import AnsariClaude
67+
68+
# Initialize AnsariClaude
69+
ansari = AnsariClaude(mock_settings)
70+
71+
# Add a message to history
72+
ansari.message_history = [{"role": "user", "content": "test question"}]
73+
74+
# Call process_one_round to trigger API call
75+
list(ansari.process_one_round())
76+
77+
# Verify the correct model was sent to the API
78+
mock_client.messages.create.assert_called_once()
79+
call_args = mock_client.messages.create.call_args
80+
assert call_args[1]["model"] == "claude-sonnet-4-5"
81+
82+
def test_default_config_uses_sonnet_4_5(self):
83+
"""Test that the default configuration in Settings uses Sonnet 4.5."""
84+
from src.ansari.config import Settings
85+
86+
# Create settings with defaults (no overrides)
87+
settings = Settings(
88+
OPENAI_API_KEY="test-key",
89+
ANTHROPIC_API_KEY="test-key",
90+
KALEMAT_API_KEY="test-key",
91+
VECTARA_API_KEY="test-key",
92+
QURAN_DOT_COM_API_KEY="test-key",
93+
)
94+
95+
# Verify the default model is Sonnet 4.5
96+
assert settings.ANTHROPIC_MODEL == "claude-sonnet-4-5"

0 commit comments

Comments
 (0)