File size: 2,282 Bytes
c63bc31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
"""Tests for configuration loading and validation."""

import json

import pytest

from cortex_ai.config import CortexConfig, EngineConfig, ServerConfig, DEFAULT_MODEL_ID


def test_defaults():
    cfg = CortexConfig()
    assert cfg.model_id == DEFAULT_MODEL_ID
    assert cfg.engine.thinking_mode == "thinking"
    assert cfg.engine.reasoning_effort == "high"
    assert cfg.server.requires_auth is False


def test_invalid_thinking_mode_is_rejected():
    with pytest.raises(ValueError, match="thinking_mode"):
        EngineConfig(thinking_mode="turbo")


def test_invalid_reasoning_effort_is_rejected():
    with pytest.raises(ValueError, match="reasoning_effort"):
        EngineConfig(reasoning_effort="extreme")


def test_invalid_max_tool_rounds_is_rejected():
    with pytest.raises(ValueError, match="max_tool_rounds"):
        EngineConfig(max_tool_rounds=0)


def test_round_trip_through_dict():
    cfg = CortexConfig(
        model_id="exemple/modele",
        engine=EngineConfig(thinking_mode="chat", max_tool_rounds=3),
        enabled_tools=["calculate"],
    )
    restored = CortexConfig.from_dict(cfg.to_dict())
    assert restored.model_id == "exemple/modele"
    assert restored.engine.thinking_mode == "chat"
    assert restored.engine.max_tool_rounds == 3
    assert restored.enabled_tools == ["calculate"]


def test_save_and_load_a_file(tmp_path):
    path = tmp_path / "cortex.json"
    cfg = CortexConfig(model_id="exemple/enregistre")
    cfg.save(path)
    assert json.loads(path.read_text())["model_id"] == "exemple/enregistre"
    assert CortexConfig.load(path).model_id == "exemple/enregistre"


def test_env_overrides(monkeypatch):
    monkeypatch.setenv("CORTEX_MODEL_ID", "exemple/depuis-env")
    monkeypatch.setenv("CORTEX_PORT", "9001")
    monkeypatch.setenv("CORTEX_THINKING_MODE", "chat")
    monkeypatch.setenv("CORTEX_TOOLS", "calculate, text_stats")
    cfg = CortexConfig.from_env()
    assert cfg.model_id == "exemple/depuis-env"
    assert cfg.server.port == 9001
    assert cfg.engine.thinking_mode == "chat"
    assert cfg.enabled_tools == ["calculate", "text_stats"]


def test_api_key_makes_auth_required():
    assert ServerConfig(api_key="abc").requires_auth is True
    assert ServerConfig(api_key="").requires_auth is False