Ollama Agent
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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| ollama_agent-0.1.4.tar.gz | 19.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.