README

#AI Package

The ai package provides message types and utilities for representing AI conversations and responses.

#Core Types

#Message

Represents a message in the conversation with the AI model.

///|
pub enum Message {
User(String)
System(String)
Assistant(String, tool_calls~ : Array[ToolCall])
Tool(String, tool_call_id~ : String)
} derive(ToJson, Eq, Show)

Variants:
  • User: A message from the user
  • System: System prompt/instructions
  • Assistant: Response from the AI, optionally with tool calls
  • Tool: Result from a tool execution

#ToolCall

Represents a tool/function call request from the AI.

///|
pub struct ToolCall {
id : String
name : String
arguments : String?
} derive(ToJson, Eq, Show)

#Usage

Token usage statistics from the API.

///|
pub struct Usage {
input_tokens : Int
output_tokens : Int
total_tokens : Int
cache_read_tokens : Int?
} derive(Eq, Show)

#Key APIs

#Message Constructors

pub fn user_message(content~ : String) -> Message
pub fn system_message(content~ : String) -> Message
pub fn assistant_message(content~ : String, tool_calls? : Array[ToolCall]) -> Message
pub fn tool_message(content~ : String, tool_call_id~ : String) -> Message

#Tool Call Constructor

pub fn tool_call(id~ : String, name~ : String, arguments? : String) -> ToolCall

#Usage Constructor

pub fn usage(
input_tokens~ : Int,
output_tokens~ : Int,
total_tokens? : Int,
cache_read_tokens? : Int,
) -> Usage

#OpenAI Conversion

The package provides bidirectional conversion with OpenAI types:

// Convert to OpenAI format
pub fn Message::to_openai(Self) -> @openai.ChatCompletionMessageParam

// Convert from OpenAI format
pub fn Message::from_openai(@openai.ChatCompletionMessageParam) -> Self
pub fn Message::from_openai_response(@openai.ChatCompletionMessage) -> Self

// ToolCall conversion
pub fn ToolCall::to_openai(Self) -> @openai.ChatCompletionMessageToolCall
pub fn ToolCall::from_openai_tool_call(@openai.ChatCompletionMessageToolCall) -> Self

// Usage conversion
pub fn Usage::from_openai(@openai.CompletionUsage) -> Self
pub fn Usage::to_openai(Self) -> @openai.CompletionUsage

#Usage Example

// Create messages for a conversation

///|
let system = @ai.system_message(content="You are a helpful assistant.")

///|
let user = @ai.user_message(content="What is 2+2?")

///|
let assistant = @ai.assistant_message(content="2+2 equals 4.")

// Create a tool call

///|
let tc = @ai.tool_call(
id="call_123",
name="calculate",
arguments=Some("{\"expression\": \"2+2\"}"),
)

// Create assistant message with tool calls

///|
let assistant_with_tools = @ai.assistant_message(content="", tool_calls=[tc])

// Create tool response

///|
let tool_response = @ai.tool_message(tool_call_id="call_123", content="4")

#Dependencies

  • openai: OpenAI API types for conversion

#
Message

pub enum Message {
User(String)
System(String)
Assistant(String, tool_calls~ : Array[ToolCall])
Tool(String, tool_call_id~ : String)
} derive(Eq, ToJson,
Debug
)

#
Message::content

fn Message::content(self : Message) -> String

#
Message::from_openai

Convert an OpenAI ChatCompletionMessageParam to an @ai.Message.

#
Message::from_openai_response

Convert an OpenAI ChatCompletionMessage (response message) to an @ai.Message.

#
Message::to_openai

Convert an @ai.Message to an OpenAI ChatCompletionMessageParam.

#
ToolCall

pub struct ToolCall {
id : String
name : String
arguments : String?
} derive(Eq, ToJson,
Debug
)

#
ToolCall::from_openai_tool_call

Convert an OpenAI ChatCompletionMessageToolCall to an @ai.ToolCall.

#
ToolCall::to_openai

Convert an @ai.ToolCall to an OpenAI ChatCompletionMessageToolCall.

#
Usage

pub struct Usage {
input_tokens : Int
output_tokens : Int
total_tokens : Int
cache_read_tokens : Int?
} derive(Eq,
Debug
)

#
Usage::from_openai

Convert an OpenAI CompletionUsage to an @ai.Usage.

#
Usage::to_openai

Convert an @ai.Usage to an OpenAI CompletionUsage.

#
assistant_message

fn assistant_message(content~ : String, tool_calls? : Array[ToolCall]) -> Message

#
system_message

fn system_message(content~ : String) -> Message

#
tool_call

fn tool_call(id~ : String, name~ : String, arguments? : String) -> ToolCall

#
tool_message

fn tool_message(content~ : String, tool_call_id~ : String) -> Message

#
usage

fn usage(input_tokens~ : Int, output_tokens~ : Int, total_tokens? : Int, cache_read_tokens? : Int) -> Usage

#
user_message

fn user_message(content~ : String) -> Message