refactor: separa composição OCI e inicialização do DeepAgents

This commit is contained in:
alex alves
2026-11-05 16:39:01 -03:00
parent 85fc4c4d46
commit e319b4089c
10 changed files with 508 additions and 153 deletions

View File

@@ -1,6 +1,6 @@
import pytest
from unittest.mock import AsyncMock, MagicMock
from unittest.mock import MagicMock
from voice_assistant.agent.adapter import AgentAdapter
@@ -37,24 +37,17 @@ def test_deep_agent_session_config():
def test_deep_agent_cleanup_is_idempotent():
import asyncio
from voice_assistant.agent.deep_agent import DeepAgentsAdapter
adapter = object.__new__(DeepAgentsAdapter)
adapter._model = MagicMock()
adapter._model.aclose = AsyncMock()
adapter._closed = False
async def scenario():
adapter = DeepAgentsAdapter(MagicMock(), timeout_seconds=1.0)
await adapter.aclose()
await adapter.aclose()
with pytest.raises(RuntimeError, match="closed"):
await anext(adapter.stream("session", 1, "Olá"))
asyncio.run(scenario())
adapter._model.aclose.assert_awaited_once()
assert adapter._closed is True
def test_deep_agent_stream_can_be_cancelled():
import asyncio
@@ -341,54 +334,3 @@ def test_deep_agent_checkpoint_survives_cancellation():
started = None
asyncio.run(scenario())
@pytest.mark.parametrize(
("options", "expected_auth"),
[
({}, ("INSTANCE_PRINCIPAL", "DEFAULT", "~/.oci/config")),
(
{"auth_type": "API_KEY", "auth_profile": "LOCAL", "auth_file_location": "/config/oci"},
("API_KEY", "LOCAL", "/config/oci"),
),
(
{"auth_type": "SECURITY_TOKEN", "auth_profile": "SESSION"},
("SECURITY_TOKEN", "SESSION", "~/.oci/config"),
),
({"auth_type": "RESOURCE_PRINCIPAL"}, ("RESOURCE_PRINCIPAL", "DEFAULT", "~/.oci/config")),
],
)
def test_deep_agent_factory_configures_authentication(monkeypatch, options, expected_auth):
import voice_assistant.agent.deep_agent as module
from voice_assistant.config.loader import load_provider_catalog
from voice_assistant.config.models import AppConfig
from voice_assistant.providers import create_agent_adapter
model_factory = MagicMock()
agent_factory = MagicMock()
monkeypatch.setattr(module, "ChatOCIGenAI", model_factory)
monkeypatch.setattr(module, "create_deep_agent", agent_factory)
config = AppConfig.model_validate({
"stt": {"provider": "nvidia"},
"tts": {"provider": "voxcpm"},
"agent": {
"provider": "deepagents",
"options": {
"region": "sa-vinhedo-1",
"compartment_id": "test-compartment",
"model_id": "test-model",
"temperature": 0.3,
"max_completion_tokens": 256,
"timeout_seconds": 60.0,
**options,
},
},
})
adapter = create_agent_adapter(config=config, catalog=load_provider_catalog())
model_factory.assert_called_once()
kwargs = model_factory.call_args.kwargs
assert (kwargs["auth_type"], kwargs["auth_profile"], kwargs["auth_file_location"]) == expected_auth
assert adapter._model is model_factory.return_value
assert agent_factory.call_args.kwargs["model"] is adapter._model