AI::Gator

Ailigator: your AI Generic Assistant with a Tool-Oriented REPL

NAME

AI::Gator - Ailigator -- your AI Generic Assistant with a Tool-Oriented REPL

SYNOPSIS

Put this into $HOME/.config/ai-gator/tools/weather.raku:

#| Get real time weather for a given city
our sub get_weather(
   Str :$city! #= The city to get the weather for
) {
   "The weather in $city is sunny.";
}

Then start the AI Gator REPL:

$ ai-gator

You: Is it raining in Toledo?
[tool] get_weather city Toledo
[tool] get_weather done
Gator: No, it is not raining in Toledo. The weather is sunny.
You: What about Philadelphia or San Francisco?
[tool] get_weather city Philadelphia
[tool] get_weather done
[tool] get_weather city San Francisco
[tool] get_weather done
Gator: It is sunny in both Philadelphia and San Francisco.

For other options, run:

$ ai-gator -h

This module can also be used programmatically:

use AI::Gator;

my AI::Gator $gator = AI::Gator::Gemini.new: model => 'gemini-2.0-flash';
my AI::Gator::Session $session = AI::Gator::Session::Gemini.new;

$session.add-message: "Hello, Gator!";

react whenever $gator.chat($session) -> $chunk {
  print $chunk;
}

# Hello! How can I help you today?

To use tools programmatically, here is an example:

use AI::Gator;

#| Get real time weather for a given city
sub get_weather(
   Str :$city! #= The city to get the weather for
) {
   "The weather in $city is sunny.";
}

my AI::Gator $gator = AI::Gator::Gemini.new:
  model => 'gemini-2.0-flash',
  :quiet,
  tools => @( &get_weather, );

my AI::Gator::Session $session = AI::Gator::Session::Gemini.new;

$session.add-message: "Hello ailigator!";
react whenever $gator.chat($session) { .print }
# Hello! How can I help you today? 🐊

my $tool-promise = start $gator.tool-builder($session);
$session.add-message: "What is the weather in Paris?";
react whenever $gator.chat($session) { .print }
await $tool-promise;

$gator.do-tool-calls: $session;

react whenever $gator.chat($session) { .print }
# The weather in Paris is sunny.

DESCRIPTION

AI::Gator is an AI assistant oriented towards using tools and a REPL interface.

Features:

  • streaming responses

  • tool definitions in Raku

  • tool calls

  • session storage

  • Gemini, OpenAI, and OpenRouter support

  • REPL interface with history

Tools are defined as Raku functions and converted into an OpenAI or Gemini specification using declarator pod and other native Raku features.

All sessions are stored in the sessions/ directory, and the REPL stores the history in a .history file, readline-style.

COMMAND LINE OPTIONS

ai-gator resume-last will resume the last session, if it exists.

ai-gator resume session-id will resume the specified session.

ai-gator sessions will list all sessions.

Also in the REPL:

`\history` will show user + assistant commands

`\history all` will show all commands, including tool calls

`\history mine` will show just the user commands

`\inspect` will enter an interactive ui that shows all previous prompts and responses

CONFIGURATION

The home directory for AI::Gator is ~/.config/ai-gator (or XDG_CONFIG_HOME/ai-gator or AI_GATOR_HOME).

In this directory, the following files and directories are used:

  • config.toml: configuration file

  • tools/: directory with files containing tools

  • sessions/: directory with session files (created by the REPL)

  • .history: file with readline history (also created by the REPL)

CONFIGURATION FILE

Sample configuration to use Gemini:

model = "gemini-2.0-flash"
adapter = 'Gemini'

Sample configuration to use OpenAI:

model = "gpt-4o"
base-uri = "https://api.openai.com/v1"

Sample configuration to use OpenRouter:

model = "mistralai/devstral-2512:free"
adapter = 'OpenRouter'

ENVIRONMENT

  • AI_GATOR_HOME: home directory for AI::Gator (default: $HOME/.config/ai-gator)

  • AI_GATOR_DEBUG: if set, enables debug logging

  • GEMINI_API_KEY: API key for Gemini (if using Gemini)

  • OPENAI_API_KEY: API key for OpenAI (if using OpenAI)

  • OPENROUTER_API_KEY: API key for OpenRouter (if using OpenRouter)

NOTES

This is all pretty rough and experimental. Expect the api to change. Patches welcome!

AUTHOR

Brian Duggan

AI::Gator v0.0.14

Ailigator: your AI Generic Assistant with a Tool-Oriented REPL

Authors

  • Brian Duggan

License

MIT

Dependencies

Log::Async:ver<0.0.14>HTTP::TinyJSON::FastTerminal::ANSITerminal::UIReadlineTOMLIO::Socket::SSL

Test Dependencies

Provides

  • AI::Gator
  • AI::Gator::Session
  • AI::Gator::ToolBuilder
  • AI::Gator::Tools
  • ai-gator

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.