from __future__ import annotations import json from pathlib import Path from investibook.core.agent_provider import SharedAgentProviderConfig BEDROCK_ARN = ( "arn:aws:bedrock:us-east-1:841162690310:" "application-inference-profile/2r34a06w99bz" ) def _provider_payload() -> dict: return { "model": "chat/claude-standard", "provider": { "chat": { "npm": "@ai-sdk/amazon-bedrock", "options": {"region": "us-east-1"}, "models": { "claude-standard": { "id": BEDROCK_ARN, "name": "Claude Standard", "limit": {"context": 200000, "output": 16384}, "cost": { "input": 3, "output": 15, "cache_read": 0.3, "cache_write": 3.75, }, "variants": {"high": {}}, }, "claude-pro": { "id": BEDROCK_ARN, "name": "Claude Pro", "variants": {"max": {}}, }, }, } }, } def test_shared_selector_is_adapted_for_pi() -> None: config = SharedAgentProviderConfig(_provider_payload()) assert ( config.selector_for_runtime("chat/claude-standard/high", "opencode") == "chat/claude-standard/high" ) assert config.selector_for_runtime("chat/claude-standard/high", "pi") == ( f"amazon-bedrock/{BEDROCK_ARN}:high" ) assert config.pi_environment("chat/claude-standard/high") == { "AWS_REGION": "us-east-1", "AWS_DEFAULT_REGION": "us-east-1", } def test_pi_models_payload_deduplicates_runtime_aliases() -> None: config = SharedAgentProviderConfig(_provider_payload()) payload = config.pi_models_payload() models = payload["providers"]["amazon-bedrock"]["models"] assert len(models) == 1 assert models[0] == { "id": BEDROCK_ARN, "name": "Claude Standard", "api": "bedrock-converse-stream", "reasoning": True, "input": ["text", "image"], "contextWindow": 200000, "maxTokens": 16384, "cost": { "input": 3.0, "output": 15.0, "cacheRead": 0.3, "cacheWrite": 3.75, }, } def test_write_pi_core_config_uses_shared_provider_config(tmp_path: Path) -> None: config = SharedAgentProviderConfig(_provider_payload()) models_file = config.write_pi_core_config(tmp_path / "pi-core") assert models_file is not None payload = json.loads(models_file.read_text(encoding="utf-8")) model = payload["providers"]["amazon-bedrock"]["models"][0] assert model["id"] == BEDROCK_ARN assert model["api"] == "bedrock-converse-stream"