Liman
Specification

Internal Types

Internal types used in the system.

BaseNode

BaseNode is a base type for all nodes in the system: LLMNode, ToolNode, or Node. If you see this type in a specification, it means the node can be any of these types.

Edge

An Edge allows you to define a connection between nodes using a DSL condition.

when: LimanCE | FunctionRef
target: BaseNode | BaseNode[]
id: Optional[ID]
depends: Optional[ID | ID[]]
PropTypeDefault
when
LimanCE | FunctionRef
-
target
BaseNode | BaseNode[]
-
id?
EdgeID
-
depends?
EdgeID | EdgeID[]
-

EdgeID

Any string or number used to identify an edge within a node. It must be unique within the same parent node.

<edge-id> ::= <string> | <number>

LimanCE

LimanCE is a DSL CE (Condition Expression) that is used to determine whether an edge should be followed, based on the current context or state. It is typically a string that uses a simple domain-specific language (DSL) to reference variables, node outputs, or builtin functions.

Builtin Functions

These functions provide access to common operations and context information within LimanCE conditions.

  • $is_error(error_type?: string, ...)
    Checks if the current execution context contains any active error. Returns True if an error is present, False otherwise. Can optionally check for a specific error type (e.g., UnauthorizedError) or multiple error types.
  • $now()
    Returns the current UTC timestamp.
    Example: $now() > some_variable_timestamp

Example

(value == true && another_value != 1) || $is_error(UnauthorizedError);

BNF

<liman-ce> ::= <term> (("&&" | "and" | "||" | "or") <term>)*

<term> ::= <factor> (("==" | "!=" | ">" | "<" | ">=" | "<=" | "in" | "not in") <factor>)*
         | ("!" | "not") <term>
         | "(" <expression> ")"

<factor> ::= <literal> | <variable> | <function_call>

<literal> ::= <string> | <number> | "true" | "false" | "null"

<variable> ::= IDENTIFIER ("." IDENTIFIER)*

<function_call> ::= BUILTIN_IDENTIFIER "(" [<arg_list>] ")"

<arg_list> ::= <variable> ("," <variable>)*

(* --- Token Definitions --- *)
(* IDENTIFIER: A standard variable name, e.g., 'user', 'role'. *)
(* BUILTIN_IDENTIFIER: A function name prefixed with '$', e.g., '$is_error', '$now'. *)

FunctionRef

FunctionRef is a reference to a function that can be called when the edge is followed. It is typically a string that represents the path to the function, such as module.path.to.method. The function should return a boolean value indicating whether the edge should be followed.

InlinedType

Some types can be declared inline, meaning they can be defined directly within a parent node instead of as separate, standalone declarations. This is useful for simple configurations or when you want to keep related declarations together.

When a type is inlined, the system automatically generates a unique name using the pattern {parent_name}__inlined__{id}_{type_name}. The inlined object is only accessible within its parent declaration and cannot be referenced globally through the Registry.

Example

Instead of creating a separate ServiceAccount declaration, you can inline it directly within a node:

kind: LLMNode
node: StartNode
---
auth:
  service_account:
    credentials_provider: CredentialsProvider

This would create a ServiceAccount similar to:

kind: ServiceAccount
name: LLMNode:StartNode__inlined_{id}_ServiceAccount
credentials_provider: CredentialsProvider

The generated ServiceAccount exists only within the scope of the LLMNode and cannot be referenced by other nodes or accessed through the global Registry.

LanguageBundle

LanguageBundle is a string or dictionary with localization support for text. It uses language codes as keys at any depth. Any text without a language code is considered default language text. You can use {template_variable} syntax within the text.

prompts:
  system:
    en: You are a helpful assistant.
    ru: Ты полезный помощник.
  notes:
    en: |
      Notes: {notes}
    de: |
      Notizen: {notes}

This would be converted to the following if en is the fallback and default language:

prompts:
  en:
    system: You are a helpful assistant.
    notes: |
      Notes: {notes}
  ru:
    system: Ты полезный помощник.
    notes: |
      Notes: {notes}
  ru:
    system: You are a helpful assistant.
    notes: |
      Notizen: {notes}

Last updated on