Add architecture package and application skeleton
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
from ai_orchestrator.config import (
|
||||
ExecutionConfig,
|
||||
ModelsConfig,
|
||||
ModelSlotConfig,
|
||||
PolicyConfig,
|
||||
PolicyMode,
|
||||
ProjectConfig,
|
||||
ProjectMetadata,
|
||||
)
|
||||
from ai_orchestrator.domain.enums import PolicyDecisionType, RiskLevel
|
||||
from ai_orchestrator.domain.models import ActionDescriptor
|
||||
from ai_orchestrator.infrastructure.policy import StaticProjectPolicyEvaluator
|
||||
|
||||
|
||||
def test_policy_evaluator_returns_confirm_for_configured_resource() -> None:
|
||||
project = ProjectConfig(
|
||||
project=ProjectMetadata(id="default", name="Default"),
|
||||
models=ModelsConfig(
|
||||
weak=ModelSlotConfig(provider="local", model="weak"),
|
||||
strong=ModelSlotConfig(provider="local", model="strong"),
|
||||
vision=ModelSlotConfig(provider="disabled"),
|
||||
embedding=ModelSlotConfig(provider="local", model="embed"),
|
||||
),
|
||||
execution=ExecutionConfig(),
|
||||
policy=PolicyConfig(),
|
||||
)
|
||||
evaluator = StaticProjectPolicyEvaluator(projects={"default": project})
|
||||
|
||||
decision = evaluator.evaluate(
|
||||
ActionDescriptor(
|
||||
resource="filesystem",
|
||||
risk_level=RiskLevel.WRITE,
|
||||
action_name="file.write",
|
||||
preview_available=True,
|
||||
),
|
||||
"default",
|
||||
)
|
||||
|
||||
assert decision.decision == PolicyDecisionType.CONFIRM
|
||||
assert decision.requires_confirmation is True
|
||||
|
||||
|
||||
def test_policy_evaluator_returns_disabled_by_config() -> None:
|
||||
project = ProjectConfig(
|
||||
project=ProjectMetadata(id="default", name="Default"),
|
||||
models=ModelsConfig(
|
||||
weak=ModelSlotConfig(provider="local", model="weak"),
|
||||
strong=ModelSlotConfig(provider="local", model="strong"),
|
||||
vision=ModelSlotConfig(provider="disabled"),
|
||||
embedding=ModelSlotConfig(provider="local", model="embed"),
|
||||
),
|
||||
execution=ExecutionConfig(),
|
||||
policy=PolicyConfig(
|
||||
default_mode=PolicyMode.CONFIRM,
|
||||
resources={
|
||||
"filesystem": PolicyMode.CONFIRM,
|
||||
"shell": PolicyMode.CONFIRM,
|
||||
"sql": PolicyMode.CONFIRM,
|
||||
"mcp": PolicyMode.CONFIRM,
|
||||
"external_models": PolicyMode.DISABLED,
|
||||
"desktop": PolicyMode.CONFIRM,
|
||||
"browser": PolicyMode.CONFIRM,
|
||||
"network": PolicyMode.CONFIRM,
|
||||
"cost": PolicyMode.CONFIRM,
|
||||
"system": PolicyMode.CONFIRM,
|
||||
},
|
||||
),
|
||||
)
|
||||
evaluator = StaticProjectPolicyEvaluator(projects={"default": project})
|
||||
|
||||
decision = evaluator.evaluate(
|
||||
ActionDescriptor(
|
||||
resource="external_models",
|
||||
risk_level=RiskLevel.COST,
|
||||
action_name="model.external",
|
||||
),
|
||||
"default",
|
||||
)
|
||||
|
||||
assert decision.decision == PolicyDecisionType.DISABLED_BY_CONFIG
|
||||
Reference in New Issue
Block a user