harn-modules 0.7.30

Cross-file module graph and import resolution utilities for Harn
Documentation
/** message. */
pub fn message(role, content) {
  return {role: role, content: content}
}

/** prompt_order_permutation. */
pub fn prompt_order_permutation(options = nil) {
  let seed = options?.seed ?? 0
  return {
    name: "prompt_order_permutation",
    label: "prompt_order_permutation(seed: " + to_string(seed) + ")",
    seed: seed,
  }
}

/** doubled_prompt. */
pub fn doubled_prompt() {
  return {name: "doubled_prompt", label: "doubled_prompt"}
}

/** chain_of_draft. */
pub fn chain_of_draft() {
  return {name: "chain_of_draft", label: "chain_of_draft"}
}

/** inverted_system. */
pub fn inverted_system() {
  return {name: "inverted_system", label: "inverted_system"}
}

/** custom. */
pub fn custom(label, transform, args = nil) {
  return {
    name: label,
    label: label,
    args: args ?? {},
    transform: transform,
  }
}

/** latest_string_user_message. */
pub fn latest_string_user_message(messages) {
  var idx = len(messages)
  while idx > 0 {
    idx = idx - 1
    let msg = messages[idx]
    if msg?.role == "user" && type_of(msg?.content) == "string" {
      return {index: idx, message: msg}
    }
  }
  return nil
}

/** replace_message. */
pub fn replace_message(messages, index, message) {
  var out = []
  var idx = 0
  while idx < len(messages) {
    out = out + [if idx == index { message } else { messages[idx] }]
    idx = idx + 1
  }
  return out
}

/** prepend_message. */
pub fn prepend_message(messages, msg) {
  return [msg] + messages
}

/** append_message. */
pub fn append_message(messages, msg) {
  return messages + [msg]
}