Source code for sim_panel.panelists.factory
from __future__ import annotations
from typing import List, Optional
from sim_panel.backends import Backend
from .panelist import Panelist, EvalSettings, SelectSettings
from .records import PersonaRecord
[docs]
def build_panelists(
records: List[PersonaRecord],
*,
backend: Optional[Backend] = None,
variant: str = "default",
eval_settings: Optional[EvalSettings] = None,
select_settings: Optional[SelectSettings] = None,
) -> List[Panelist]:
"""
Build runtime Panelist objects from PersonaRecord rows.
Parameters
----------
records:
PersonaRecord list (typically loaded from personas.jsonl).
backend:
Optional Backend instance. Required if you intend to call Panelist.evaluate().
variant:
Which persona_text_variant to use (default: "default").
eval_settings:
YAML-governed default evaluation settings applied to each Panelist.
If None, Panelist will use its internal defaults.
select_settings:
YAML-governed default selection settings applied to each Panelist.
If None, Panelist will use its internal defaults.
"""
panelists: List[Panelist] = []
for r in records:
if r.persona_text_variant != variant:
continue
if r.persona_text is None or not r.persona_text.strip():
raise ValueError(
f"persona_text missing for persona_id={r.persona_id} variant={variant}"
)
panelists.append(
Panelist(
panelist_id=r.persona_id,
persona_text=r.persona_text,
attributes=dict(r.attributes) if r.attributes is not None else None,
backend=backend,
eval_settings=eval_settings,
select_settings=select_settings,
)
)
return panelists