Sign in

    rlm

    Download zip
    Author
    Version
    0.1.0
    License
    MIT
    Last updated
    8 months ago
    Downloads
    41

    Dependencies

    #rlm

    MoonBit port of rlm semantics (improvement loop + RLM runtime + planner/eval utility layer).

    #Scope

    • run_improvement_loop: single-round candidate evaluation
    • run_long_improvement_loop: iterative baseline update loop
    • run_program: plan(single / long_run)に基づく実行ハーネス
    • select_untried_candidates: tried-id filtering helper
    • create_metric_symbol: 外部評価関数を call_symbol 互換へ変換する helper
    • build_policy_from_metric_symbols: symbol spec から policy を合成
    • collect_metric_snapshot_by_symbols: symbol spec から snapshot を収集
    • run_rlm: prompt本文を履歴外に置く最小RLMループ(DSL実行 + budget + trace)
    • run_rlm_from_json: JSON文字列 DSL を coercion して実行(先頭 JSON 抽出付き)
    • run_rlm_with_provider: mizchi/llm Provider で JSON DSL ループを駆動
    • run_rlm_with_openai: mizchi/llm/openai を使って OpenAI 互換 API で実行
    • create_plan_with_provider: planner LLM 出力(JSON)を plan へ coercion
    • run_planned_rlm_with_provider(s): planner + executor provider で plan 実行
    • run_planned_rlm_with_openai: OpenAI で planner/executor をまとめて実行
    • coerce_planner_plan_from_json: JSON plan を MoonBit plan 型へ coercion
    • compile_plan_to_rlm_options: plan/profile/budget patch から実行 options を生成
    • run_planned_rlm: plan mode(single/long_run) で実行
    • score_answer: exact/contains 評価
    • parse_eval_jsonl: JSONL ケースをパース
    • parse_rlm_profile / build_profile_rlm_options: profile ユーティリティ

    The MoonBit port keeps the same acceptance/constraint semantics as the TypeScript implementation.

    #Files

    • src/types.mbt: semantic data model
    • src/improvement.mbt: score + accept/reject semantics
    • src/long_run.mbt: long-run iterative loop
    • src/harness.mbt: candidate selection helper
    • src/program.mbt: single/long_run統合ハーネス
    • src/planner_types.mbt: planner data model
    • src/planner.mbt: plan coercion / compile / dispatch
    • src/rlm_types.mbt: RLM runtime data model / DSL / options
    • src/rlm_run.mbt: RLM runtime loop and DSL executor
    • src/openai_adapter.mbt: mizchi/llm / OpenAI adapter
    • src/eval_types.mbt: eval data model
    • src/eval_jsonl.mbt: JSONL parser
    • src/eval_profile.mbt: profile parser / option builder
    • src/eval_scoring.mbt: answer scoring
    • src/rlm_wbtest.mbt: RLM DSL/budget/doc/json-runner tests
    • src/public_api.mbt: public constructors and accessors

    #Commands

    moon -C moonbit check moon -C moonbit test moon -C moonbit fmt moon -C moonbit info

    #OpenAI Adapter Example

    let out = run_rlm_with_openai(
    "TOKEN=NEBULA-42",
    "sk-...",
    openai_options=default_rlm_openai_options(model="gpt-4.1-mini"),
    )

    let out = run_planned_rlm_with_openai(
    "CSVのscoreを最小化する候補を反復評価して",
    "name,score\nalice,3\nbob,5",
    "sk-...",
    )

    ConstraintMetricSymbol

    pub struct ConstraintMetricSymbol[T, S] {
    key : String
    comparator : MetricComparator
    value : Double
    source : ConstraintSource
    read : (ImprovementCandidate[T], Int, S) -> Result[Double, String]
    }

    ConstraintSource

    pub enum ConstraintSource {
    Absolute
    Delta
    Ratio
    DeltaRatio
    }

    ConstraintSource::absolute

    ConstraintSource::delta

    ConstraintSource::delta_ratio

    fn ConstraintSource::delta_ratio() -> ConstraintSource

    ConstraintSource::ratio

    EvalBudgetPatch

    pub struct EvalBudgetPatch {
    max_steps : Int?
    max_sub_calls : Int?
    max_depth : Int?
    max_prompt_read_chars : Int?
    }

    EvalCase

    pub struct EvalCase {
    id : String
    prompt : String
    query : String
    expected : String
    metric : EvalMetric
    tags : Array[String]
    budget : EvalBudgetPatch?
    }

    EvalMetric

    pub enum EvalMetric {
    Exact
    Contains
    }

    ImprovementCandidate

    pub struct ImprovementCandidate[T] {
    id : String
    input : T
    }

    ImprovementCandidate::id

    fn[T] ImprovementCandidate::id(self : ImprovementCandidate[T]) -> String

    ImprovementCandidate::input

    fn[T] ImprovementCandidate::input(self : ImprovementCandidate[T]) -> T

    ImprovementConstraint

    pub struct ImprovementConstraint {
    key : String
    comparator : MetricComparator
    value : Double
    source : ConstraintSource
    }

    ImprovementContext

    pub struct ImprovementContext[T] {
    baseline : MetricSnapshot
    baseline_score : Double
    accepted : Array[ImprovementResult[T]]
    index : Int
    }

    ImprovementObjective

    pub struct ImprovementObjective {
    key : String
    direction : MetricDirection
    weight : Double
    }

    ImprovementPolicy

    pub struct ImprovementPolicy {
    objectives : Array[ImprovementObjective]
    constraints : Array[ImprovementConstraint]
    min_score_delta : Double
    }

    ImprovementReport

    pub struct ImprovementReport[T] {
    policy : ImprovementPolicy
    baseline : MetricSnapshot
    baseline_score : Double
    results : Array[ImprovementResult[T]]
    best_accepted : ImprovementResult[T]?
    }

    ImprovementReport::best_accepted

    fn[T] ImprovementReport::best_accepted(self : ImprovementReport[T]) -> ImprovementResult[T]?

    ImprovementReport::results

    ImprovementResult

    pub struct ImprovementResult[T] {
    candidate : ImprovementCandidate[T]
    accepted : Bool
    reasons : Array[String]
    snapshot : MetricSnapshot?
    score : Double?
    score_delta : Double?
    error : String?
    }

    ImprovementResult::is_accepted

    fn[T] ImprovementResult::is_accepted(self : ImprovementResult[T]) -> Bool

    ImprovementResult::reasons

    fn[T] ImprovementResult::reasons(self : ImprovementResult[T]) -> Array[String]

    ImprovementResult::score

    fn[T] ImprovementResult::score(self : ImprovementResult[T]) -> Double?

    ImprovementResult::snapshot

    fn[T] ImprovementResult::snapshot(self : ImprovementResult[T]) -> MetricSnapshot?

    LongRunImprovementReport

    pub struct LongRunImprovementReport[T, S] {
    rounds : Array[ImprovementReport[T]]
    accepted_history : Array[ImprovementResult[T]]
    final_baseline : MetricSnapshot
    final_baseline_score : Double
    final_state : S
    }

    LongRunImprovementReport::accepted_history_length

    fn[T, S] LongRunImprovementReport::accepted_history_length(self : LongRunImprovementReport[T, S]) -> Int

    LongRunImprovementReport::final_baseline

    fn[T, S] LongRunImprovementReport::final_baseline(self : LongRunImprovementReport[T, S]) -> MetricSnapshot

    LongRunIterationContext

    pub struct LongRunIterationContext[T, S] {
    iteration : Int
    state : S
    baseline : MetricSnapshot
    baseline_score : Double
    rounds : Array[ImprovementReport[T]]
    accepted_history : Array[ImprovementResult[T]]
    }

    LongRunIterationContext::iteration

    fn[T, S] LongRunIterationContext::iteration(self : LongRunIterationContext[T, S]) -> Int

    MetricComparator

    pub enum MetricComparator {
    Lt
    Lte
    Gt
    Gte
    Eq
    }

    MetricComparator::eq

    MetricComparator::gt

    MetricComparator::gte

    MetricComparator::lt

    MetricComparator::lte

    MetricDirection

    pub enum MetricDirection {
    Maximize
    Minimize
    }

    MetricDirection::maximize

    MetricDirection::minimize

    MetricSnapshot

    pub struct MetricSnapshot {
    metrics : Map[String, Double]
    gates : Map[String, Bool]
    }

    MetricSnapshot::gate

    fn MetricSnapshot::gate(self : MetricSnapshot, key : String) -> Bool?

    MetricSnapshot::metric

    fn MetricSnapshot::metric(self : MetricSnapshot, key : String) -> Double?

    ObjectiveMetricSymbol

    pub struct ObjectiveMetricSymbol[T, S] {
    key : String
    direction : MetricDirection
    weight : Double
    read : (ImprovementCandidate[T], Int, S) -> Result[Double, String]
    }

    PlannedLongRunHooks

    pub struct PlannedLongRunHooks[T, S] {
    baseline : MetricSnapshot
    initial_state : S
    max_iterations : Int?
    stop_when_no_accept : Bool?
    generate_candidates : (LongRunIterationContext[T, S], RLMPlannerPlan) -> Array[ImprovementCandidate[T]]
    evaluate : (ImprovementCandidate[T], LongRunIterationContext[T, S], RLMPlannerPlan) -> Result[MetricSnapshot, String]
    on_accepted : (ImprovementResult[T], S) -> S?
    }

    PlannedRLMResult

    pub enum PlannedRLMResult[T, S] {
    SingleResult(RLMPlannerPlan, RLMResultPack)
    LongRunResult(RLMPlannerPlan, LongRunImprovementReport[T, S])
    }

    PlannerConstraintSpec

    pub struct PlannerConstraintSpec {
    key : String
    comparator : MetricComparator
    value : Double
    source : ConstraintSource
    }

    PlannerLongRunSpec

    pub struct PlannerLongRunSpec {
    objectives : Array[PlannerObjectiveSpec]
    constraints : Array[PlannerConstraintSpec]
    max_iterations : Int?
    stop_when_no_accept : Bool?
    min_score_delta : Double?
    }

    PlannerObjectiveSpec

    pub struct PlannerObjectiveSpec {
    key : String
    direction : MetricDirection
    weight : Double
    }

    ProgramMode

    pub enum ProgramMode {
    Single
    LongRun
    }

    ProgramMode::long_run

    fn ProgramMode::long_run() -> ProgramMode

    ProgramMode::single

    fn ProgramMode::single() -> ProgramMode

    ProgramPlan

    pub struct ProgramPlan {
    mode : ProgramMode
    candidate_limit : Int
    max_iterations : Int
    stop_when_no_accept : Bool
    }

    ProgramResult

    pub struct ProgramResult[T, S] {
    plan : ProgramPlan
    run : ProgramRun[T, S]
    logs : Array[String]
    }

    ProgramResult::is_long_run

    fn[T, S] ProgramResult::is_long_run(self : ProgramResult[T, S]) -> Bool

    ProgramResult::is_single

    fn[T, S] ProgramResult::is_single(self : ProgramResult[T, S]) -> Bool

    ProgramResult::logs

    fn[T, S] ProgramResult::logs(self : ProgramResult[T, S]) -> Array[String]

    ProgramResult::long_run

    fn[T, S] ProgramResult::long_run(self : ProgramResult[T, S]) -> LongRunImprovementReport[T, S]?

    ProgramResult::plan

    fn[T, S] ProgramResult::plan(self : ProgramResult[T, S]) -> ProgramPlan

    ProgramResult::single

    fn[T, S] ProgramResult::single(self : ProgramResult[T, S]) -> ImprovementReport[T]?

    ProgramRun

    pub enum ProgramRun[T, S] {
    SingleRun(ImprovementReport[T])
    LongRunRun(LongRunImprovementReport[T, S])
    }

    RLMBudgetPatch

    pub struct RLMBudgetPatch {
    max_steps : Int?
    max_sub_calls : Int?
    max_depth : Int?
    max_prompt_read_chars : Int?
    }

    RLMBudgetState

    pub struct RLMBudgetState {
    max_steps : Int
    max_sub_calls : Int
    max_depth : Int
    max_prompt_read_chars : Int
    steps_used : Int
    sub_calls_used : Int
    depth : Int
    prompt_read_chars_used : Int
    }

    RLMChatMessage

    pub struct RLMChatMessage {
    role : RLMRole
    content : String
    }

    RLMDSL

    pub enum RLMDSL {
    PromptMeta
    DocParse(String?, String?, String)
    DocSelectSection(String, String, String)
    DocTableSum(String, Json, String)
    DocSelectRows(String, Json, String?, Json?, String)
    DocProjectColumns(String, Array[Json], String, String?, Bool?)
    SlicePrompt(Int, Int, String)
    Find(String, Int, String)
    ChunkNewlines(Int, String)
    ChunkTokens(Int, Int?, String)
    SumCsvColumn(Int, String?, String)
    PickWord(Int?, String)
    CallSymbol(String, String, Json?, Json?)
    SubMap(String, String, String, Int?, Int?)
    ReduceJoin(String, String, String)
    Set(String, Json)
    Finalize(String)
    }

    RLMExternalSymbolCall

    pub struct RLMExternalSymbolCall {
    symbol : String
    prompt : String
    prompt_id : String
    depth : Int
    args : Json?
    input : Json?
    }

    RLMOpenAIOptions

    pub struct RLMOpenAIOptions {
    model : String
    max_tokens : Int
    system_prompt : String
    timeout_sec : Int
    max_retries : Int
    }

    RLMPlannerPlan

    pub struct RLMPlannerPlan {
    kind : String
    version : Int
    mode : ProgramMode
    task : String
    profile : RLMProfile?
    budget : RLMBudgetPatch?
    require_prompt_read_before_finalize : Bool?
    symbols : Array[String]
    long_run : PlannerLongRunSpec?
    }

    RLMProfile

    pub enum RLMProfile {
    Pure
    Hybrid
    }

    RLMPromptMeta

    pub struct RLMPromptMeta {
    prompt_id : String
    length : Int
    preview_head : String
    }

    RLMReplExecTrace

    pub struct RLMReplExecTrace {
    step : Int
    op : String
    stdout : String
    stdout_meta : RLMStdoutMeta
    }

    RLMResultPack

    pub struct RLMResultPack {
    final_output : String
    trace : Array[RLMTraceEvent]
    budget : RLMBudgetState
    }

    RLMResultPack::budget

    RLMResultPack::final_output

    fn RLMResultPack::final_output(self : RLMResultPack) -> String

    RLMResultPack::trace

    RLMRole

    pub enum RLMRole {
    System
    User
    Assistant
    }

    RLMRootStepTrace

    pub struct RLMRootStepTrace {
    step : Int
    prompt_meta : RLMPromptMeta
    stdout_meta : RLMStdoutMeta
    }

    RLMRunOptions

    pub struct RLMRunOptions {
    budget : RLMBudgetState
    meta_preview_chars : Int
    task : String?
    require_prompt_read_before_finalize : Bool
    sub_runner : (String) -> Result[String, String]?
    symbol_runner : (RLMExternalSymbolCall) -> Result[Json, String]?
    }

    RLMStdoutMeta

    pub struct RLMStdoutMeta {
    length : Int
    preview : String
    keys : Array[String]
    }

    RLMSubCallTrace

    pub struct RLMSubCallTrace {
    depth : Int
    query : String
    result_meta : RLMStdoutMeta
    cached : Bool
    }

    RLMTraceEvent

    pub enum RLMTraceEvent {
    RootStep(RLMRootStepTrace)
    ReplExec(RLMReplExecTrace)
    SubCall(RLMSubCallTrace)
    }

    RoundSummary

    pub struct RoundSummary {
    result_ids : Array[String]
    accepted_count : Int
    }

    build_policy_from_metric_symbols

    fn[T, S] build_policy_from_metric_symbols(objectives : Array[ObjectiveMetricSymbol[T, S]], constraints? : Array[ConstraintMetricSymbol[T, S]], min_score_delta? : Double) -> ImprovementPolicy

    build_profile_rlm_options

    fn build_profile_rlm_options(profile : RLMProfile) -> RLMRunOptions

    candidate

    fn[T] candidate(id : String, input : T) -> ImprovementCandidate[T]

    coerce_planner_plan_from_json

    fn coerce_planner_plan_from_json(raw : Json, fallback_task : String, available_symbols : Array[String]) -> RLMPlannerPlan

    collect_metric_snapshot_by_symbols

    fn[T, S] collect_metric_snapshot_by_symbols(candidate : ImprovementCandidate[T], iteration : Int, state : S, objectives : Array[ObjectiveMetricSymbol[T, S]], constraints? : Array[ConstraintMetricSymbol[T, S]]) -> Result[MetricSnapshot, String]

    compile_plan_to_rlm_options

    fn compile_plan_to_rlm_options(plan : RLMPlannerPlan, base? : RLMRunOptions?) -> RLMRunOptions

    constraint

    fn constraint(key : String, comparator : MetricComparator, value : Double, source? : ConstraintSource) -> ImprovementConstraint

    constraint_metric_symbol

    fn[T, S] constraint_metric_symbol(key : String, comparator : MetricComparator, value : Double, read : (ImprovementCandidate[T], Int, S) -> Result[Double, String], source? : ConstraintSource) -> ConstraintMetricSymbol[T, S]

    create_metric_symbol

    fn[T, TMetrics] create_metric_symbol(baseline_input : T, coerce_candidate : (Json) -> Result[T, String], evaluate_candidate : (T) -> Result[TMetrics, String], pick_metric : (TMetrics, String) -> Result[Double, String], cache : Map[String, TMetrics], cache_key : (T) -> String) -> ((RLMExternalSymbolCall) -> Result[Json, String])

    create_plan_with_provider

    fn create_plan_with_provider(input : String, prompt : String, provider : &
    Provider
    , available_symbols? : Array[String], planner_system_prompt? : String) -> RLMPlannerPlan

    default_planner_system_prompt

    fn default_planner_system_prompt() -> String

    default_rlm_budget

    fn default_rlm_budget(max_steps? : Int, max_sub_calls? : Int, max_depth? : Int, max_prompt_read_chars? : Int, depth? : Int) -> RLMBudgetState

    default_rlm_openai_options

    fn default_rlm_openai_options(model? : String, max_tokens? : Int, system_prompt? : String, timeout_sec? : Int, max_retries? : Int) -> RLMOpenAIOptions

    default_rlm_options

    fn default_rlm_options(budget? : RLMBudgetState, meta_preview_chars? : Int, task? : String?, require_prompt_read_before_finalize? : Bool, sub_runner? : (String) -> Result[String, String]?, symbol_runner? : (RLMExternalSymbolCall) -> Result[Json, String]?) -> RLMRunOptions

    dsl_call_symbol

    fn dsl_call_symbol(symbol : String, out : String, args? : Json?, input? : Json?) -> RLMDSL

    dsl_chunk_newlines

    fn dsl_chunk_newlines(max_lines : Int, out : String) -> RLMDSL

    dsl_chunk_tokens

    fn dsl_chunk_tokens(max_tokens : Int, overlap? : Int?, out? : String) -> RLMDSL

    dsl_doc_parse

    fn dsl_doc_parse(format? : String?, delimiter? : String?, out? : String) -> RLMDSL

    dsl_doc_project_columns

    fn dsl_doc_project_columns(in_key : String, columns : Array[Json], out : String, separator? : String?, include_header? : Bool?) -> RLMDSL

    dsl_doc_select_rows

    fn dsl_doc_select_rows(in_key : String, column : Json, comparator? : String?, value? : Json?, out? : String) -> RLMDSL

    dsl_doc_select_section

    fn dsl_doc_select_section(in_key : String, title : String, out : String) -> RLMDSL

    dsl_doc_table_sum

    fn dsl_doc_table_sum(in_key : String, column : Json, out : String) -> RLMDSL

    dsl_finalize

    fn dsl_finalize(from : String) -> RLMDSL

    dsl_find

    fn dsl_find(needle : String, from? : Int, out? : String) -> RLMDSL

    dsl_pick_word

    fn dsl_pick_word(index? : Int?, out? : String) -> RLMDSL

    dsl_prompt_meta

    fn dsl_prompt_meta() -> RLMDSL

    dsl_reduce_join

    fn dsl_reduce_join(in_key : String, sep : String, out : String) -> RLMDSL

    dsl_set

    fn dsl_set(path : String, value : Json) -> RLMDSL

    dsl_set_string

    fn dsl_set_string(path : String, value : String) -> RLMDSL

    dsl_slice_prompt

    fn dsl_slice_prompt(start : Int, end : Int, out : String) -> RLMDSL

    dsl_sub_map

    fn dsl_sub_map(in_key : String, query_template : String, out : String, limit? : Int?, concurrency? : Int?) -> RLMDSL

    dsl_sum_csv_column

    fn dsl_sum_csv_column(column : Int, delimiter? : String?, out? : String) -> RLMDSL

    objective

    fn objective(key : String, direction : MetricDirection, weight? : Double) -> ImprovementObjective

    objective_metric_symbol

    fn[T, S] objective_metric_symbol(key : String, direction : MetricDirection, read : (ImprovementCandidate[T], Int, S) -> Result[Double, String], weight? : Double) -> ObjectiveMetricSymbol[T, S]

    parse_eval_jsonl

    fn parse_eval_jsonl(input : String) -> Result[Array[EvalCase], String]

    parse_rlm_profile

    fn parse_rlm_profile(input : String?) -> Result[RLMProfile, String]

    planned_long_run_hooks

    fn[T, S] planned_long_run_hooks(baseline : MetricSnapshot, initial_state : S, generate_candidates : (LongRunIterationContext[T, S], RLMPlannerPlan) -> Array[ImprovementCandidate[T]], evaluate : (ImprovementCandidate[T], LongRunIterationContext[T, S], RLMPlannerPlan) -> Result[MetricSnapshot, String], max_iterations? : Int?, stop_when_no_accept? : Bool?, on_accepted? : (ImprovementResult[T], S) -> S?) -> PlannedLongRunHooks[T, S]

    planner_budget_patch

    fn planner_budget_patch(max_steps? : Int?, max_sub_calls? : Int?, max_depth? : Int?, max_prompt_read_chars? : Int?) -> RLMBudgetPatch

    planner_constraint_spec

    fn planner_constraint_spec(key : String, comparator : MetricComparator, value : Double, source? : ConstraintSource) -> PlannerConstraintSpec

    planner_long_run_spec

    fn planner_long_run_spec(objectives : Array[PlannerObjectiveSpec], constraints? : Array[PlannerConstraintSpec], max_iterations? : Int?, stop_when_no_accept? : Bool?, min_score_delta? : Double?) -> PlannerLongRunSpec

    planner_objective_spec

    fn planner_objective_spec(key : String, direction : MetricDirection, weight? : Double) -> PlannerObjectiveSpec

    planner_plan

    fn planner_plan(mode : ProgramMode, task : String, profile? : RLMProfile?, budget? : RLMBudgetPatch?, require_prompt_read_before_finalize? : Bool?, symbols? : Array[String], long_run? : PlannerLongRunSpec?) -> RLMPlannerPlan

    policy

    fn policy(objectives : Array[ImprovementObjective], constraints? : Array[ImprovementConstraint], min_score_delta? : Double) -> ImprovementPolicy

    program_plan

    fn program_plan(mode : ProgramMode, candidate_limit : Int, max_iterations : Int, stop_when_no_accept? : Bool) -> ProgramPlan

    round_summary

    fn round_summary(result_ids : Array[String], accepted_count : Int) -> RoundSummary

    run_improvement_loop

    fn[T] run_improvement_loop(baseline : MetricSnapshot, policy : ImprovementPolicy, candidates : Array[ImprovementCandidate[T]], evaluate : (ImprovementCandidate[T], ImprovementContext[T]) -> Result[MetricSnapshot, String], update_baseline_on_accept? : Bool) -> ImprovementReport[T]

    run_long_improvement_loop

    fn[T, S] run_long_improvement_loop(baseline : MetricSnapshot, policy : ImprovementPolicy, initial_state : S, max_iterations : Int, stop_when_no_accept : Bool, generate_candidates : (LongRunIterationContext[T, S]) -> Array[ImprovementCandidate[T]], evaluate : (ImprovementCandidate[T], LongRunIterationContext[T, S]) -> Result[MetricSnapshot, String], on_accepted : (ImprovementResult[T], S) -> S) -> LongRunImprovementReport[T, S]

    run_planned_rlm

    fn[T, S] run_planned_rlm(prompt : String, complete : (Array[RLMChatMessage], Int) -> RLMDSL, plan : RLMPlannerPlan, runtime_options? : RLMRunOptions?, long_run? : PlannedLongRunHooks[T, S]?) -> Result[PlannedRLMResult[T, S], String]

    run_planned_rlm_with_openai

    fn[T, S] run_planned_rlm_with_openai(input : String, prompt : String, api_key : String, available_symbols? : Array[String], runtime_options? : RLMRunOptions?, long_run? : PlannedLongRunHooks[T, S]?, planner_system_prompt? : String, planner_openai_options? : RLMOpenAIOptions, executor_openai_options? : RLMOpenAIOptions?) -> Result[PlannedRLMResult[T, S], String]

    run_planned_rlm_with_provider

    fn[T, S] run_planned_rlm_with_provider(input : String, prompt : String, provider : &
    Provider
    , available_symbols? : Array[String], runtime_options? : RLMRunOptions?, long_run? : PlannedLongRunHooks[T, S]?, planner_system_prompt? : String) -> Result[PlannedRLMResult[T, S], String]

    run_planned_rlm_with_providers

    fn[T, S] run_planned_rlm_with_providers(input : String, prompt : String, planner_provider : &
    Provider
    , executor_provider : &
    Provider
    , available_symbols? : Array[String], runtime_options? : RLMRunOptions?, long_run? : PlannedLongRunHooks[T, S]?, planner_system_prompt? : String) -> Result[PlannedRLMResult[T, S], String]

    run_program

    fn[TPool, T, S] run_program(plan : ProgramPlan, baseline : MetricSnapshot, policy : ImprovementPolicy, pool : Array[TPool], initial_state : S, to_candidate : (TPool) -> ImprovementCandidate[T], evaluate : (ImprovementCandidate[T], LongRunIterationContext[T, S]) -> Result[MetricSnapshot, String], on_accepted : (ImprovementResult[T], S) -> S, format_metrics : (Map[String, Double]) -> String) -> ProgramResult[T, S]

    run_rlm

    fn run_rlm(prompt : String, complete : (Array[RLMChatMessage], Int) -> RLMDSL, options? : RLMRunOptions) -> Result[RLMResultPack, String]

    run_rlm_from_json

    fn run_rlm_from_json(prompt : String, complete_text : (Array[RLMChatMessage], Int) -> String, options? : RLMRunOptions) -> Result[RLMResultPack, String]

    run_rlm_with_openai

    fn run_rlm_with_openai(prompt : String, api_key : String, rlm_options? : RLMRunOptions, openai_options? : RLMOpenAIOptions) -> Result[RLMResultPack, String]

    run_rlm_with_provider

    fn run_rlm_with_provider(prompt : String, provider : &
    Provider
    , options? : RLMRunOptions) -> Result[RLMResultPack, String]

    score_answer

    fn score_answer(expected : String, answer : String, metric : EvalMetric) -> Bool

    score_snapshot

    fn score_snapshot(snapshot : MetricSnapshot, policy : ImprovementPolicy) -> Double

    select_untried_candidates

    fn[T, U] select_untried_candidates(pool : Array[T], rounds : Array[RoundSummary], candidate_limit : Int, to_candidate : (T) -> ImprovementCandidate[U]) -> Array[ImprovementCandidate[U]]

    snapshot

    fn snapshot(metrics : Map[String, Double], gates? : Map[String, Bool]) -> MetricSnapshot