fix: propagate kimi base-url temperature overrides
Follow up salvaged PR #12668 by threading base_url through the remaining direct-call sites so kimi-k2.5 uses temperature=1.0 on api.moonshot.ai and keeps 0.6 on api.kimi.com/coding. Add focused regression tests for run_agent, trajectory_compressor, and mini_swe_runner.
This commit is contained in:
@@ -918,6 +918,26 @@ class TestBuildApiKwargs:
|
||||
assert kwargs["messages"] is messages
|
||||
assert kwargs["timeout"] == 1800.0
|
||||
|
||||
def test_public_moonshot_kimi_k2_5_forces_temperature_1(self, agent):
|
||||
agent.base_url = "https://api.moonshot.ai/v1"
|
||||
agent._base_url_lower = agent.base_url.lower()
|
||||
agent.model = "kimi-k2.5"
|
||||
messages = [{"role": "user", "content": "hi"}]
|
||||
|
||||
kwargs = agent._build_api_kwargs(messages)
|
||||
|
||||
assert kwargs["temperature"] == 1.0
|
||||
|
||||
def test_kimi_coding_endpoint_keeps_kimi_k2_5_at_0_6(self, agent):
|
||||
agent.base_url = "https://api.kimi.com/coding/v1"
|
||||
agent._base_url_lower = agent.base_url.lower()
|
||||
agent.model = "kimi-k2.5"
|
||||
messages = [{"role": "user", "content": "hi"}]
|
||||
|
||||
kwargs = agent._build_api_kwargs(messages)
|
||||
|
||||
assert kwargs["temperature"] == 0.6
|
||||
|
||||
def test_provider_preferences_injected(self, agent):
|
||||
agent.base_url = "https://openrouter.ai/api/v1"
|
||||
agent.providers_allowed = ["Anthropic"]
|
||||
|
||||
@@ -26,3 +26,30 @@ def test_run_task_forces_kimi_fixed_temperature():
|
||||
|
||||
assert result["completed"] is True
|
||||
assert client.chat.completions.create.call_args.kwargs["temperature"] == 0.6
|
||||
|
||||
|
||||
def test_run_task_public_moonshot_kimi_k2_5_forces_temperature_1():
|
||||
with patch("openai.OpenAI") as mock_openai:
|
||||
client = MagicMock()
|
||||
client.base_url = "https://api.moonshot.ai/v1"
|
||||
client.chat.completions.create.return_value = SimpleNamespace(
|
||||
choices=[SimpleNamespace(message=SimpleNamespace(content="done", tool_calls=[]))]
|
||||
)
|
||||
mock_openai.return_value = client
|
||||
|
||||
from mini_swe_runner import MiniSWERunner
|
||||
|
||||
runner = MiniSWERunner(
|
||||
model="kimi-k2.5",
|
||||
base_url="https://api.moonshot.ai/v1",
|
||||
api_key="test-key",
|
||||
env_type="local",
|
||||
max_iterations=1,
|
||||
)
|
||||
runner._create_env = MagicMock()
|
||||
runner._cleanup_env = MagicMock()
|
||||
|
||||
result = runner.run_task("2+2")
|
||||
|
||||
assert result["completed"] is True
|
||||
assert client.chat.completions.create.call_args.kwargs["temperature"] == 1.0
|
||||
|
||||
@@ -54,6 +54,30 @@ def test_generate_summary_custom_client_forces_kimi_temperature():
|
||||
assert compressor.client.chat.completions.create.call_args.kwargs["temperature"] == 0.6
|
||||
|
||||
|
||||
def test_generate_summary_public_moonshot_kimi_k2_5_forces_temperature_1():
|
||||
config = CompressionConfig(
|
||||
summarization_model="kimi-k2.5",
|
||||
base_url="https://api.moonshot.ai/v1",
|
||||
temperature=0.3,
|
||||
summary_target_tokens=100,
|
||||
max_retries=1,
|
||||
)
|
||||
compressor = TrajectoryCompressor.__new__(TrajectoryCompressor)
|
||||
compressor.config = config
|
||||
compressor.logger = MagicMock()
|
||||
compressor._use_call_llm = False
|
||||
compressor.client = MagicMock()
|
||||
compressor.client.chat.completions.create.return_value = SimpleNamespace(
|
||||
choices=[SimpleNamespace(message=SimpleNamespace(content="[CONTEXT SUMMARY]: summary"))]
|
||||
)
|
||||
|
||||
metrics = TrajectoryMetrics()
|
||||
result = compressor._generate_summary("tool output", metrics)
|
||||
|
||||
assert result.startswith("[CONTEXT SUMMARY]:")
|
||||
assert compressor.client.chat.completions.create.call_args.kwargs["temperature"] == 1.0
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# CompressionConfig
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
@@ -141,3 +141,31 @@ async def test_generate_summary_async_custom_client_forces_kimi_temperature():
|
||||
|
||||
assert result.startswith("[CONTEXT SUMMARY]:")
|
||||
assert async_client.chat.completions.create.call_args.kwargs["temperature"] == 0.6
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_generate_summary_async_public_moonshot_kimi_k2_5_forces_temperature_1():
|
||||
from trajectory_compressor import CompressionConfig, TrajectoryCompressor, TrajectoryMetrics
|
||||
|
||||
config = CompressionConfig(
|
||||
summarization_model="kimi-k2.5",
|
||||
base_url="https://api.moonshot.ai/v1",
|
||||
temperature=0.3,
|
||||
summary_target_tokens=100,
|
||||
max_retries=1,
|
||||
)
|
||||
compressor = TrajectoryCompressor.__new__(TrajectoryCompressor)
|
||||
compressor.config = config
|
||||
compressor.logger = MagicMock()
|
||||
compressor._use_call_llm = False
|
||||
async_client = MagicMock()
|
||||
async_client.chat.completions.create = MagicMock(return_value=SimpleNamespace(
|
||||
choices=[SimpleNamespace(message=SimpleNamespace(content="[CONTEXT SUMMARY]: summary"))]
|
||||
))
|
||||
compressor._get_async_client = MagicMock(return_value=async_client)
|
||||
|
||||
metrics = TrajectoryMetrics()
|
||||
result = await compressor._generate_summary_async("tool output", metrics)
|
||||
|
||||
assert result.startswith("[CONTEXT SUMMARY]:")
|
||||
assert async_client.chat.completions.create.call_args.kwargs["temperature"] == 1.0
|
||||
|
||||
Reference in New Issue
Block a user