Quickstart

from evoproc.ga_scaffold_structured import ProcedureGA, GAConfig
from evoproc_procedures.models import Procedure
from evoproc_procedures.prompts import create_procedure_prompt
from evoproc_procedures.validators import validate_procedure_structured
from evoproc_procedures.runners import run_steps_stateful_minimal
from evoproc_procedures.schemas import get_schema
from evoproc_procedures.query_backends.ollama import query, repair_fn_ollama

ga = ProcedureGA(
    model="gemma3:latest",
    create_proc_fn=create_procedure_prompt,
    query_fn=query,
    schema_json_fn=lambda: Procedure.model_json_schema(),
    validate_fn=validate_procedure_structured,
    repair_fn=repair_fn_ollama,
    cfg=GAConfig(population_size=6, max_generations=3, seed=42),
)

question = "Natalia sold clips to 48 friends in April, then half as many in May. How many altogether?"
best, _ = ga.run(
    task_description=question,
    final_answer_schema=get_schema("gsm"),
    eval_fn=lambda state, proc: 1.0,        # plug your scorer
    run_steps_fn=lambda proc, q, s, m, p=False: run_steps_stateful_minimal(proc, q, s, m, query_fn=query),
)