Mojentic.LLM.Tools.EphemeralTaskManager (Mojentic v1.2.0)

Copy Markdown View Source

Ephemeral Task Manager tools for managing a list of tasks.

This module provides tools for appending, prepending, inserting, starting, completing, and listing tasks. Tasks follow a state machine that transitions from :pending through :in_progress to :completed.

Usage

The task manager requires a shared Agent to maintain state across tool calls:

alias Mojentic.LLM.Tools.EphemeralTaskManager
alias Mojentic.LLM.Tools.EphemeralTaskManager.TaskList

# Create a shared task list agent
{:ok, agent} = Agent.start_link(fn -> TaskList.new() end)

# Create tool instances that share the agent
tools = [
  EphemeralTaskManager.AppendTask.new(agent),
  EphemeralTaskManager.PrependTask.new(agent),
  EphemeralTaskManager.InsertTaskAfter.new(agent),
  EphemeralTaskManager.StartTask.new(agent),
  EphemeralTaskManager.CompleteTask.new(agent),
  EphemeralTaskManager.ListTasks.new(agent),
  EphemeralTaskManager.ClearTasks.new(agent)
]

# Use with broker
{:ok, response} = Broker.generate(broker, messages, tools)

Example

alias Mojentic.LLM.{Broker, Message}
alias Mojentic.LLM.Gateways.Ollama
alias Mojentic.LLM.Tools.EphemeralTaskManager
alias Mojentic.LLM.Tools.EphemeralTaskManager.TaskList

# Setup
broker = Broker.new("qwen3:32b", Ollama)
{:ok, agent} = Agent.start_link(fn -> TaskList.new() end)

tools = [
  EphemeralTaskManager.AppendTask.new(agent),
  EphemeralTaskManager.StartTask.new(agent),
  EphemeralTaskManager.CompleteTask.new(agent),
  EphemeralTaskManager.ListTasks.new(agent)
]

# Use the LLM with task management tools
message = Message.user("Create 3 tasks: write tests, write docs, write code")
{:ok, response} = Broker.generate(broker, [message], tools)

Summary

Functions

Creates all task manager tools with a shared agent.

Functions

all_tools(agent)

Creates all task manager tools with a shared agent.

Returns a list of tool instances ready to be used with the broker.

Examples

alias Mojentic.LLM.Tools.EphemeralTaskManager

{:ok, agent} = Agent.start_link(fn -> TaskList.new() end)
tools = EphemeralTaskManager.all_tools(agent)