NAME
    Hailo - A pluggable Markov engine analogous to MegaHAL

SYNOPSIS
     use strict;
     use warnings;
     use Hailo;

     my $hailo = Hailo->new(
         # Or Pg, or Perl ...
         storage_class  => 'SQLite',
         brain_resource => 'brain.db'
     );

     while (<>) {
         $hailo->learn($_);
         print $hailo->reply($_), "\n";
     }

DESCRIPTION
    Hailo is a fast and lightweight markov engine intended to replace
    AI::MegaHAL. It has a lightweight Moose-based core with pluggable
    storage and tokenizer backends.

    It is similar to MegaHAL in functionality, the main difference being
    (with the default storage/tokenizer backends) better scalability,
    drastically less memory usage, and an improved tokenizer.

    With this distribution, you can create, modify, and query Hailo brains.
    To use Hailo in event-driven POE applications, you can use the
    POE::Component::Hailo wrapper. One example is
    POE::Component::IRC::Plugin::Hailo, which implements an IRC chat bot.

  Etymology
    *Hailo* is a portmanteau of *HAL* (as in MegaHAL) and failo
    <http://identi.ca/failo>.

ATTRIBUTES
  "brain_resource"
    The name of the resource (file name, database name) to use as storage.
    There is no default.

  "order"
    The Markov order (chain length) you want to use for an empty brain. The
    default is 5.

  "storage_class"
    The storage backend to use. Default: 'SQLite'.

    This gives you an idea of approximately how the backends compare in
    speed:

                     s/iter CHI::File CHI::BerkeleyDB PostgreSQL MySQL CHI::Memory SQLite Perl Perl::Flat
     CHI::File         15.1        --            -51%       -72%  -75%        -82%   -91% -95%       -95%
     CHI::BerkeleyDB   7.43      103%              --       -42%  -49%        -64%   -81% -90%       -91%
     PostgreSQL        4.30      252%             73%         --  -11%        -37%   -67% -83%       -84%
     MySQL             3.83      295%             94%        12%    --        -29%   -63% -81%       -82%
     CHI::Memory       2.70      460%            176%        59%   42%          --   -48% -73%       -75%
     SQLite            1.41      972%            427%       205%  171%         91%     -- -48%       -52%
     Perl             0.735     1957%            911%       485%  420%        267%    92%   --        -7%
     Perl::Flat       0.683     2114%            988%       529%  460%        295%   106%   8%         --

    To run your own test try running utils/hailo-benchmark in the Hailo
    distribution.

  "tokenizer_class"
    The tokenizer to use. Default: 'Words';

  "ui_class"
    The UI to use. Default: 'ReadLine';

  "storage_args"
  "tokenizer_args"
  "ui_args"
    A "HashRef" of arguments storage/tokenizer/engine/ui backends. See the
    documentation for the backends for what sort of arguments they accept.

  "token_separator"
    Storage backends may choose to store the tokens of an expression as a
    single string. If so, they will be joined them together with a
    separator. By default, this is "\t".

METHODS
  "new"
    This is the constructor. It accepts the attributes specified in
    "ATTRIBUTES".

  "run"
    Run the application according to the command line arguments.

  "learn"
    Takes a line of UTF-8 encoded text as input and learns from it.

  "train"
    Takes a filename and calls "learn" on all its lines. The file is assumed
    to be UTF-8 encoded.

  "reply"
    Takes an optional line of text and generates a reply that might be
    relevant.

  "learn_reply"
    Takes a line of text, learns from it, and generates a reply that might
    be relevant.

  "save"
    Tells the underlying storage backend to save its state.

CAVEATS
    All occurences of "token_separator" will be stripped from your input
    before it is processed, so make sure it's set to something that is
    unlikely to appear in it.

SUPPORT
    You can join the IRC channel *#hailo* on FreeNode if you have questions.

AUTHORS
    Hinrik Örn Sigurðsson, hinrik.sig@gmail.com

    Ævar Arnfjörð Bjarmason <avar@cpan.org>

LICENSE AND COPYRIGHT
    Copyright 2010 Hinrik Örn Sigurðsson and Ævar Arnfjörð Bjarmason
    <avar@cpan.org>

    This program is free software, you can redistribute it and/or modify it
    under the same terms as Perl itself.

