"""Seed persona integration tests for session.py model resolution.""" from __future__ import annotations from pathlib import Path import pytest from langchain_openai import ChatOpenAI from my_deepagent.config import load_config from my_deepagent.enums import Backend from my_deepagent.persona import load_personas_from_dir from my_deepagent.session import resolve_model_instance PERSONAS_DIR = Path(__file__).parent.parent.parent / "docs" / "schemas" / "personas" @pytest.fixture def seed_personas() -> list: # type: ignore[type-arg] return load_personas_from_dir(PERSONAS_DIR) def test_resolve_model_instance_seed_personas(seed_personas: list) -> None: # type: ignore[type-arg] """resolve_model_instance should return ChatOpenAI for openrouter personas, str otherwise.""" config = load_config(openrouter_api_key="sk-or-dummy") for persona in seed_personas: instance = resolve_model_instance(persona, config) if persona.backend == Backend.OPENROUTER: assert isinstance(instance, ChatOpenAI), ( f"persona {persona.name!r} with backend=openrouter should return ChatOpenAI, " f"got {type(instance)}" ) # base_url should point to openrouter assert instance.openai_api_base is not None base = instance.openai_api_base assert "openrouter" in base or base == config.openrouter_base_url else: assert isinstance(instance, str), ( f"persona {persona.name!r} with backend={persona.backend} should return str, " f"got {type(instance)}" ) def test_all_seed_personas_have_non_empty_model(seed_personas: list) -> None: # type: ignore[type-arg] for persona in seed_personas: assert persona.model, f"persona {persona.name!r} has empty model" def test_all_openrouter_seed_personas_have_openrouter_prefix(seed_personas: list) -> None: # type: ignore[type-arg] for persona in seed_personas: if persona.backend == Backend.OPENROUTER: assert persona.model.startswith("openrouter:"), ( f"persona {persona.name!r} has backend=openrouter but model={persona.model!r} " "does not start with 'openrouter:'" )