Source code for sherpa_ai.output_parsers.self_consistency

from typing import Optional, Union, Dict, Any

from pydantic import BaseModel

from sherpa_ai.output_parsers.self_consistency.abstract_objects import AbstractObject
from sherpa_ai.output_parsers.self_consistency.concretizer import (
    Concretizer,
    MaximumLikelihoodConcretizer,
)
from sherpa_ai.output_parsers.self_consistency.object_aggregator import ObjectAggregator
from sherpa_ai.output_parsers.self_consistency.config import SelfConsistencyConfig, ListConfig


def convert_list_config_from_dict(list_config: Optional[Dict[str, Dict[str, Any]]]) -> Optional[SelfConsistencyConfig]:
    """Convert dict-based list_config to SelfConsistencyConfig for compatibility.
    
    Args:
        list_config: Dict-based configuration parameter
        
    Returns:
        SelfConsistencyConfig or None if list_config is None
    """
    if list_config is None:
        return None
    
    converted_config = {}
    for field_name, field_config in list_config.items():
        converted_config[field_name] = ListConfig(
            top_k=field_config.get("top_k", 0),
            threshold=field_config.get("threshold", 2.0),
            strategy=field_config.get("strategy", "top_k")
        )
    
    return SelfConsistencyConfig(list_config=converted_config)


[docs] def run_self_consistency( objects: list[BaseModel], schema: type[BaseModel], aggregator_cls: type[ObjectAggregator] = ObjectAggregator, concretizer: Optional[Concretizer] = None, value_weight_map: dict[str, Union[dict, float]] = {}, config: Optional[SelfConsistencyConfig] = None, ) -> BaseModel: """ Run self-consistency on a list of objects using the provided schema and configuration. Args: objects (list[BaseModel]): List of objects to process. schema (type[BaseModel]): Pydantic schema for validation. aggregator_cls (type[ObjectAggregator], optional): Class to use for aggregation. Defaults to ObjectAggregator. concretizer (Optional[Concretizer], optional): Concretizer to use for final output. Defaults to MaximumLikelihoodConcretizer. value_weight_map (dict[str, Union[dict, float]], optional): Weight map for each attribute of the object. Defaults to {}. config (Optional[SelfConsistencyConfig], optional): Configuration for self-consistency processing. If None, default configuration will be used. Returns: BaseModel: The final concrete object after self-consistency processing (instance of `schema`). """ # noqa: E501 # Validate input objects against the schema for obj in objects: if not isinstance(obj, schema): raise ValueError(f"Object {obj} does not match schema {schema}") if not concretizer: concretizer = MaximumLikelihoodConcretizer(config=config) aggregator = aggregator_cls(obj_schema=schema, value_weight_map=value_weight_map) for obj in objects: aggregator.add_object(obj) # the abstraction-concretization process abstract_object = AbstractObject.from_aggregator(aggregator) concrete_obj = concretizer.concretize(abstract_object, return_dict=False) return concrete_obj
__all__ = [ "MaximumLikelihoodConcretizer", "ObjectAggregator", "AbstractObject", "run_self_consistency", "SelfConsistencyConfig", "ListConfig", ]