Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/deep_code_agent/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def _initialize_agent(args, codebase_dir: str) -> Any:
load_dotenv()

model = None
if any([args.model_name, args.api_key, args.base_url]) or args.model_provider:
if any([args.model_name, args.api_key, args.base_url]) or args.model_provider != "openai":
model = create_chat_model(
model_name=args.model_name,
model_provider=args.model_provider,
Expand Down
64 changes: 63 additions & 1 deletion tests/test_cli.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
"""Tests for CLI argument handling."""

from types import SimpleNamespace
from unittest.mock import patch

import pytest

from deep_code_agent import __version__
from deep_code_agent.cli import main
from deep_code_agent.cli import _initialize_agent, main


def test_main_prints_version_and_exits(capsys):
Expand All @@ -17,3 +18,64 @@ def test_main_prints_version_and_exits(capsys):
assert exc_info.value.code == 0
captured = capsys.readouterr()
assert captured.out.strip() == f"deep-code-agent {__version__}"


@patch("dotenv.load_dotenv")
@patch("deep_code_agent.code_agent.create_code_agent")
@patch("deep_code_agent.models.llms.langchain_chat.create_chat_model")
@patch("langgraph.checkpoint.memory.InMemorySaver")
def test_initialize_agent_skips_model_creation_for_default_provider(
mock_checkpointer,
mock_create_chat_model,
mock_create_code_agent,
_mock_load_dotenv,
):
"""Default provider should defer model creation to create_code_agent."""
args = SimpleNamespace(
model_name=None,
model_provider="openai",
api_key=None,
base_url=None,
backend_type="state",
)

_initialize_agent(args, "/tmp/project")

mock_create_chat_model.assert_not_called()
mock_create_code_agent.assert_called_once()
assert mock_create_code_agent.call_args.kwargs["model"] is None
assert mock_create_code_agent.call_args.kwargs["backend_type"] == "state"
assert mock_create_code_agent.call_args.kwargs["checkpointer"] is mock_checkpointer.return_value


@patch("dotenv.load_dotenv")
@patch("deep_code_agent.code_agent.create_code_agent")
@patch("deep_code_agent.models.llms.langchain_chat.create_chat_model")
@patch("langgraph.checkpoint.memory.InMemorySaver")
def test_initialize_agent_builds_model_for_explicit_provider(
mock_checkpointer,
mock_create_chat_model,
mock_create_code_agent,
_mock_load_dotenv,
):
"""Non-default provider should still trigger explicit model creation."""
args = SimpleNamespace(
model_name=None,
model_provider="anthropic",
api_key=None,
base_url=None,
backend_type="filesystem",
)
mock_create_chat_model.return_value = object()

_initialize_agent(args, "/tmp/project")

mock_create_chat_model.assert_called_once_with(
model_name=None,
model_provider="anthropic",
api_key=None,
base_url=None,
)
assert mock_create_code_agent.call_args.kwargs["model"] is mock_create_chat_model.return_value
assert mock_create_code_agent.call_args.kwargs["backend_type"] == "filesystem"
assert mock_create_code_agent.call_args.kwargs["checkpointer"] is mock_checkpointer.return_value
Loading