Pure MoonBit LLM client library
Dependencies
pub(open) trait Provider {
fn stream(Self, Array[Message], Array[ToolDef], StreamHandler) -> Unit
fn name(Self) -> String
}pub(all) enum AgentEvent {
Stream(StreamEvent)
ToolExecute(name~ : String, input~ : Json)
ToolResult(name~ : String, result~ : String, is_error~ : Bool)
StepComplete(step~ : Int)
Done(reason~ : String)
}fn BoxedProvider::stream(self : BoxedProvider, messages : Array[Message], tools : Array[ToolDef], handler : StreamHandler) -> Unitpub(all) struct CollectResult {
text : String
tool_calls : Array[ToolCall]
finish_reason : FinishReason
usage : Usage?
}pub(all) enum ContentBlock {
Text(String)
ToolUse(id~ : String, name~ : String, input~ : Json)
ToolResult(tool_use_id~ : String, content~ : String, is_error~ : Bool)
}pub(all) struct JsonChatResponse {
content : String
tool_calls : Array[JsonChatToolCall]
reasoning_content : String?
}fn JsonChatResponse::new(content : String, tool_calls : Array[JsonChatToolCall], reasoning_content : String?) -> JsonChatResponsepub(all) struct ProviderConfig {
api_key : String
model : String
max_tokens : Int
system_prompt : String
base_url : String
timeout_sec : Int
max_retries : Int
retry_delay_ms : Int
}fn ProviderConfig::new(api_key : String, model : String, base_url : String, max_tokens? : Int, system_prompt? : String, timeout_sec? : Int, max_retries? : Int, retry_delay_ms? : Int) -> ProviderConfigpub(all) struct SkillEntry {
name : String
path : String
source : String
content : String
}pub(all) struct SkillInfo {
name : String
path : String
source : String
available : Bool
}pub struct SkillsLoader {
workspace_skills : Map[String, SkillEntry]
builtin_skills : Map[String, SkillEntry]
}fn SkillsLoader::build_skills_summary(self : SkillsLoader, bins? : Map[String, Bool], env? : Map[String, String]) -> Stringfn SkillsLoader::get_always_skills(self : SkillsLoader, bins? : Map[String, Bool], env? : Map[String, String]) -> Array[String]fn SkillsLoader::list_skills(self : SkillsLoader, filter_unavailable? : Bool, bins? : Map[String, Bool], env? : Map[String, String]) -> Array[SkillInfo]fn SkillsLoader::load_skills_for_context(self : SkillsLoader, skill_names : Array[String]) -> Stringfn SkillsLoader::register_builtin_skill(self : SkillsLoader, name : String, content : String, path? : String) -> Unitfn SkillsLoader::register_workspace_skill(self : SkillsLoader, name : String, content : String, path? : String) -> Unitpub(all) enum StopCondition {
MaxSteps(Int)
OnFinish
}pub(all) enum StreamEvent {
TextDelta(String)
ToolCallStart(id~ : String, name~ : String)
ToolCallDelta(id~ : String, input_delta~ : String)
ToolCallEnd(id~ : String, name~ : String, input~ : Json)
MessageStart
MessageEnd(finish_reason~ : FinishReason, usage~ : Usage?)
Error(String)
}impl Show for StreamEventfn run_agent(provider : BoxedProvider, registry : ToolRegistry, messages : Array[Message], stop : StopCondition, on_event : (AgentEvent) -> Unit) -> Unitfn run_agent_cancellable(provider : BoxedProvider, registry : ToolRegistry, messages : Array[Message], stop : StopCondition, should_cancel : () -> Bool, on_event : (AgentEvent) -> Unit) -> Unitfn strip_skill_frontmatter(content : String) -> StringPure MoonBit LLM client library
Dependencies