Skip to main content

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.

Metadata

Release files for ollama-agent 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ollama-agent 0.1.4
File Size Uploaded Provenance
ollama_agent-0.1.4.tar.gz 19.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for ollama-agent 0.1.4
File Interpreter ABI Platform
ollama_agent-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 34.7 kB

Release files / ollama_agent-0.1.4.tar.gz

Download URL ollama_agent-0.1.4.tar.gz
Size 19.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d3d8a84eb6bd30971de15ca70fb43e4ecd32181cc64b31a2af2ebbc7cfde070e
BLAKE2b-256 checksum
How to use checksums
d7475e713ad9d3c8c6ade509ecfd9986a56bcfe411748d06739bebd7ede002ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Release files / ollama_agent-0.1.4-py3-none-any.whl

Download URL ollama_agent-0.1.4-py3-none-any.whl
Size 15.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
05c3dfe931ea15bb3ff6707696174c7423a0c0085d6adabd4d7416ac6957bd73
BLAKE2b-256 checksum
How to use checksums
07a81820a1d8b62b672d9c27c7586fd4d7b1add80ce216875f12a4bbe82de555
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Security for ollama-agent 0.1.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page