Skip to content

tobalo/gogent

Repository files navigation

Gogent - Agentic Worker AI in Golang

Gogent is a distributed log analysis system that uses embedded NATS messaging and LLM-powered agents to process and analyze system logs in real-time and at the edge.

The motivation to do this was:

  1. Explore AI agents in purely Go and not use Python
  2. How this could be lightweight and usable in the Reindustrialization of America.
  3. Focus on the use-case of having error log data collection to simplify analysis, collection, and aggregation of all system errors on a manufacturing site into a DB which can then be used for analyzing patterns of errors, metadata analysis to help Operators diagnose and resolve production issues faster, ultimately increasing reindustrializtion and manufacturing productivity.

TODO: embed tools for agent common in IT and manufacturing support, such as: servicenow, jira, splunk, palantir foundry, etc.

Limitations

  • Nil pointer if agent is overloaded with messages > 20
  • Ollama on non-GPU accelerated machines and ample VRAM unable to handle the concurrent requests from Gogent

Architecture

flowchart
subgraph Manufacturing Site Network
    S[IoT Error Log Producer 1] -->|Publish| Z
    T[IoT Error Log Producer 2] -->|Publish| Z
    Y[IoT Error Log Producer N] -->|Publish| Z
    subgraph Gogent
        subgraph embedded NATS
            Z@{ shape: das, label: "agent.technical.support" }
            U@{ shape: lin-cyl, label: "JetStream Persistence" }
        end
        Z -->|Subscribe| A{Agent Sig}
        E[(Error Log DB)]
        A --> |Retain w/ policy conditions| E
    end
    subgraph Inference Providers
        A -->|Request| L[LLM or VLM API]
        L -->|Response| A
    end
end
Loading

Core Components

  • Embedded NATS Server: Handles message queuing and distribution
  • Agent Service: Processes messages using LLM
  • Multi-Provider LLM Support:
    • Ollama (default, with deepkseek-r1:1.5b)
    • OpenAI
    • Azure OpenAI
    • Azure AD
    • Cloudflare Azure
    • Gemini
    • Claude (Anthropic)
    • DeepSeek
  • JetStream: Persistent message storage
  • SQLite Database: Stores structured logs and AI analysis for historical querying

Message Flow

  1. Log messages are published to agent.technical.support subject
  2. Agent subscribes to messages and formats them for LLM processing
  3. Selected LLM provider analyzes the log content
  4. Analysis results are sent back through NATS if reply subject exists
  5. Messages are persisted in AGENT_STREAM with AGENT_CONSUMER subscription
  6. Both original logs and AI analysis are stored in SQLite database

Technical Details

Agent Configuration

type Config struct {
    APIKey       string    // Required for non-Ollama providers
    NATSUrl      string
    AgentName    string
    Instructions string
    Model        string
    Provider     string    // LLM provider selection
    DBPath       string    // Path to SQLite database
}

Default Configuration

// NATS Configuration
StreamName    = "AGENT_STREAM"
ConsumerName  = "AGENT_CONSUMER"
SubjectName   = "agent.technical.support"
NATSPort      = 4222
NATSURL       = "nats://localhost:4222"

// Agent Configuration
AgentName = "Agent Sig"
Provider  = "OLLAMA"     // Default provider
Model     = "deepseek-r1:1.5b"    // Default model

Message Structure

type LogMessage struct {
    Timestamp string
    Hostname  string
    Severity  string
    Service   string
    Message   string
    Context   map[string]interface{}
}

Database Schema

CREATE TABLE agent_logs (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    timestamp TEXT NOT NULL,
    hostname TEXT NOT NULL,
    severity TEXT NOT NULL,
    service TEXT NOT NULL,
    message TEXT NOT NULL,
    context TEXT,           -- JSON string of context map
    analysis TEXT,          -- AI-generated analysis
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Setup

Prerequisites

  • Go 1.23.4 or later
  • Git
  • SQLite3
  • Docker and Docker Compose (for containerized setup)
  • For non-Ollama providers, one of:
    • OpenAI API key
    • Azure OpenAI credentials
    • Azure AD credentials
    • Cloudflare Azure setup
    • Gemini API key
    • Claude API key
    • DeepSeek API key

Installation

  1. Clone the repository:
git clone https://github.com/tobalo/gogent.git
cd gogent
  1. Install dependencies:
go mod download
  1. Create environment file:
cp .env.example .env
  1. Configure your .env file:
# LLM Provider Configuration
PROVIDER=OLLAMA    # See .env.example for all provider options
MODEL=deepseek-r1:1.5b     # Model name for selected provider
API_KEY=your_key  # Required for non-Ollama providers

# Other configurations...

Running with Docker Compose

The easiest way to run Gogent is using Docker Compose, which sets up both Gogent and Ollama in a software-defined network:

  1. Start the services:
docker-compose up -d

This will:

  • Start Ollama service (if using Ollama provider)
  • Pull the deepseek-r1:1.5b model automatically (for Ollama)
  • Start Gogent with the configured provider
  • Set up a bridge network between services
  • Configure persistent storage for both services
  1. Monitor the logs:
docker-compose logs -f
  1. Stop the services:
docker-compose down

Running Locally

If you prefer to run without Docker:

  1. Start the agent:
go run cmd/microlith/main.go
  1. The agent will initialize with:
    • Embedded NATS server on port 4222
    • JetStream enabled for message persistence
    • Agent subscribed to agent.technical.support
    • 30-second timeout for LLM processing
    • SQLite database in data/agent.db

Sample Usage

Publishing Messages

Messages can be published using the NATS CLI:

nats pub agent.technical.support '{
    "timestamp": "2025-01-15T02:14:23.123Z",
    "hostname": "web-server-01",
    "severity": "ERROR",
    "service": "nginx",
    "message": "Failed to bind to port 80: Address already in use",
    "context": {
        "pid": 1234,
        "user": "www-data"
    }
}'

Querying Logs

You can query the stored logs using SQLite:

sqlite3 data/agent.db "SELECT timestamp, severity, message, analysis FROM agent_logs WHERE severity = 'ERROR' ORDER BY timestamp DESC LIMIT 5;"

Features

  • Real-time log processing
  • Comprehensive multi-provider LLM support
  • Edge AI capability with Ollama
  • Cloud provider support (Azure, OpenAI, etc.)
  • Distributed message handling
  • Persistent message storage via JetStream
  • Structured log storage in SQLite database
  • Historical log querying capabilities
  • Configurable agent behavior
  • Automatic message formatting for LLM processing
  • Response handling with original context
  • Docker Compose support for easy deployment

About

Agentic AI workers explicitly in Go

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published