rlm_moonbit

moon add mizchi/rlm_moonbit@0.1.0
Download zip
Author
Version
0.1.0
License
MIT
Last updated
6 months ago
Downloads
20

Dependencies

README

#rlm_moonbit

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