Source code for sim_panel.generators.types
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Dict, Optional
from sim_panel.decisions.types import SelectionConfig, ExecutionRules
from sim_panel.outcomes.base import OutcomeConfig
from sim_panel.policies.base import PolicyConfig
[docs]
@dataclass(frozen=True)
class ExecutionConfig:
"""
Generator-side operational rules (NOT panelist constraints).
This controls how many evaluations we actually execute after parsing selection.
"""
rules: ExecutionRules = ExecutionRules()
[docs]
@dataclass(frozen=True)
class GeneratorConfig:
"""
Top-level generation config (YAML-governed in the CLI).
Generators orchestrate:
- policy exposure decisions
- panelist selection/evaluation calls
- outcome parsing/validation
- schema event construction
- optional schema validation
Notes:
- schema_version is stored per row and validated against schema registry.
- seed governs RNG for exposure decisions and deterministic event ids.
"""
schema_version: str = "0.1.0"
seed: int = 0
n_periods: int = 1
policy: PolicyConfig = field(default_factory=lambda: PolicyConfig(name="random"))
selection: SelectionConfig = field(default_factory=SelectionConfig)
execution: ExecutionConfig = field(default_factory=ExecutionConfig)
outcome: Optional[OutcomeConfig] = None # if None, outcomes/traces will be null
# validation / debugging
validate_on_finish: bool = True
max_errors: int = 50
include_panelist_features_in_events: bool = True # stored in evaluation events (even if not rendered)
include_product_features_in_events: bool = True
include_product_features_in_selection_prompt: bool = True # forwarded into decisions.SelectionConfig if desired
# deterministic id namespace
event_namespace: str = "sim_panel.v0"
# parallelism: number of concurrent decision workers (1 = sequential)
max_workers: int = 1
# prompting strategy: zero_shot | few_shot | persona | persona_cot
prompting_strategy: str = "persona"
# small metadata merged into each row
row_meta: Dict[str, Any] = field(default_factory=dict)