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.4.tar.gz (19.7 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.4-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ollama_agent-0.1.4.tar.gz
  • Upload date:
  • Size: 19.7 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.4.tar.gz
Algorithm Hash digest
SHA256 d3d8a84eb6bd30971de15ca70fb43e4ecd32181cc64b31a2af2ebbc7cfde070e
MD5 946a72d356931a56588da07290d5b254
BLAKE2b-256 d7475e713ad9d3c8c6ade509ecfd9986a56bcfe411748d06739bebd7ede002ae

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ollama_agent-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 15.0 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 05c3dfe931ea15bb3ff6707696174c7423a0c0085d6adabd4d7416ac6957bd73
MD5 32036e1c3060146a8ed8aa1ba4e84351
BLAKE2b-256 07a81820a1d8b62b672d9c27c7586fd4d7b1add80ce216875f12a4bbe82de555

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