Skip to main content

A lightweight AI agent library powered by Ollama with built-in tools and custom tool support

Project description

Ollama Agent

PyPI version Python Versions CI License: MIT Downloads

A lightweight AI agent library powered by Ollama with built-in tools and custom tool support.

For example project, visit ollama-agent-cli

Features

  • Simple API - Get started with just a few lines of code
  • 10 Built-in Tools - Web search, calculator, weather, system info, and more
  • Custom Tools - Easy registration via decorators or functions
  • Configurable - Environment variables or constructor parameters
  • Safe by Default - Optional user approval for dangerous operations
  • Conversation Memory - Maintains context across queries

Installation

pip install ollama-agent

Prerequisites

  • Python 3.10+
  • Ollama installed and running
  • A model pulled (e.g., ollama pull llama3.2)

Quick Start

from ollama_agent import OllamaAgent

# Create an agent
agent = OllamaAgent()

# Run a query
response = agent.run("What's the current time?")
print(response)

# Conversation history is maintained
response = agent.run("And what's the weather in New York?")
print(response)

# Reset when needed
agent.reset()

Custom Tools

Using Decorators

from ollama_agent import OllamaAgent, register_tool

@register_tool("greet", description="Greet someone by name. Input: name")
def greet(name: str) -> str:
    return f"Hello, {name}!"

agent = OllamaAgent()
response = agent.run("Greet Alice")

Using Function Registration

from ollama_agent import register_tool_func

def my_tool(input_str: str) -> str:
    return f"Processed: {input_str}"

register_tool_func(
    name="my_tool",
    func=my_tool,
    description="Process input text"
)

Instance-specific Tools

agent = OllamaAgent()

agent.add_tool(
    name="uppercase",
    func=lambda text: text.upper(),
    description="Convert text to uppercase"
)

response = agent.run("Convert 'hello' to uppercase")
agent.remove_tool("uppercase")

Configuration

Constructor Parameters

agent = OllamaAgent(
    model="llama3.2",                    # Ollama model name
    base_url="http://localhost:11434",   # Ollama API URL
    temperature=0.7,                     # Model temperature (0-1)
    max_iterations=10,                   # Max tool calls per query
    approval_callback=my_callback,       # Optional approval function
)

Environment Variables

OLLAMA_MODEL=llama3.2
OLLAMA_BASE_URL=http://localhost:11434
TEMPERATURE=0.7
MAX_ITERATIONS=10
MAX_SEARCH_RESULTS=5
REQUIRE_APPROVAL_COMMANDS=true
REQUIRE_APPROVAL_FILES=false

Approval Callback

Require user approval for dangerous operations:

def approval_callback(tool_name: str, tool_input: str) -> bool:
    print(f"Tool: {tool_name}, Input: {tool_input}")
    return input("Allow? (y/n): ").lower() == "y"

agent = OllamaAgent(approval_callback=approval_callback)

Built-in Tools

Tool Description
web_search Search the web using DuckDuckGo
get_current_time Get current date and time
run_command Run shell commands (requires approval)
system_info Get CPU, memory, disk, uptime info
weather Get current weather
calculator Evaluate math expressions
read_file Read file contents
list_directory List directory contents
wikipedia Search Wikipedia
ip_info Get public IP and location

API Reference

OllamaAgent

class OllamaAgent:
    def __init__(
        self,
        model: str = None,
        base_url: str = None,
        temperature: float = None,
        max_iterations: int = None,
        approval_callback: Callable[[str, str], bool] = None,
        tools: dict = None,
        config: Config = None,
    ): ...

    def run(self, query: str, verbose: bool = False) -> str: ...
    def reset(self) -> None: ...
    def add_tool(self, name, func, description, requires_approval=None) -> None: ...
    def remove_tool(self, name: str) -> None: ...
    def get_history(self) -> list[dict]: ...

    @property
    def tools(self) -> dict: ...
    @property
    def model(self) -> str: ...

Tool Functions

# Decorator registration
@register_tool(name: str, description: str, requires_approval: str = None)
def my_tool(input: str) -> str: ...

# Function registration
register_tool_func(name, func, description, requires_approval=None)

# Management
unregister_tool(name: str)
get_tool(name: str) -> dict
get_all_tools() -> dict
list_tools() -> list[str]

Development

# Clone the repo
git clone https://github.com/aashish-thapa/ollama-agent.git
cd ollama-agent

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run linting
ruff check src/

License

MIT License - see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ollama_agent-0.1.3.tar.gz (19.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ollama_agent-0.1.3-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

File details

Details for the file ollama_agent-0.1.3.tar.gz.

File metadata

  • Download URL: ollama_agent-0.1.3.tar.gz
  • Upload date:
  • Size: 19.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for ollama_agent-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f9c4dafb5d88616d83bd0962c6586511bf061be5be928ce8250582a2e9351989
MD5 9d2454ffb048da53f6343ec936873563
BLAKE2b-256 046db3094d585710037e4d8afbda99431d9d0d7b7e63429487a62379226c875e

See more details on using hashes here.

File details

Details for the file ollama_agent-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: ollama_agent-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 14.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for ollama_agent-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e1af3e7dd9b8451b90512ecf1c386c3c954bef89ad4d0a516e9ee26688530813
MD5 9d7b76a6760ca1456e5af943bdbf5db6
BLAKE2b-256 1131d21dc90c48d403ecad2693bc11fd283105909c538ee23f295551e843f860

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page