OverviewFilesCommitsIssuesDocsReleasesPeers

ollama_semantic_function_calling / ollama_function_library

1229 lines · text ref:
Ollama Function Library - Detailed Specification

I'll develop a comprehensive specification for the Ollama Function Library that will enable semantic function invocation for Linux commands, web requests, and documentation tools. Let's build this step by step.
1. Project Overview
1.1 Project Name

OllamaTools
1.2 Description

A Python library that extends Ollama's capabilities by providing a collection of useful functions that can be automatically invoked based on semantic context during conversations. The library focuses on enabling local command execution, web requests, and documentation utilities with appropriate security controls.
1.3 Goals

    Enable Ollama to detect when function execution is appropriate based on user queries
    Provide a secure interface for executing Linux commands with permission controls
    Create utilities for making web requests and processing responses
    Build tools for generating and processing documentation
    Maintain a simple, extensible architecture that can grow over time

2. System Architecture
2.1 High-Level Components

OllamaTools/
├── ollamatools/
│   ├── __init__.py
│   ├── agent.py               # Main agent class that interfaces with Ollama
│   ├── config.py              # Configuration management
│   ├── security.py            # Permission system implementation
│   ├── utils/                 # Utility functions
│   │   ├── __init__.py
│   │   └── logging.py
│   ├── tools/                 # Core function modules
│   │   ├── __init__.py
│   │   ├── system_tools.py    # Linux command execution functions
│   │   ├── web_tools.py       # Web request functions
│   │   └── doc_tools.py       # Documentation utilities
│   └── exceptions.py          # Custom exceptions
├── tests/                     # Unit and integration tests
├── examples/                  # Example usage scripts
├── README.md
├── LICENSE
├── setup.py
└── requirements.txt

2.2 Dependencies

    Python 3.8+
    ollama-python >= 0.4.0 (for function calling support)
    requests (for web requests)
    beautifulsoup4 (for HTML parsing)
    pydantic (for data validation and schema generation)
    markdown (for documentation processing)
    pytest (for testing)

3. Core Modules
3.1 System Tools Module
3.1.1 Purpose

Provide a secure interface for executing Linux commands and interacting with the system.
3.1.2 Key Functions

python

def execute_command(command: str, args: Optional[List[str]] = None) -> dict:
    """
    Execute a shell command with optional arguments.
    
    This function runs the specified command with its arguments
    and returns the output. Commands requiring elevated privileges
    will always prompt for permission.
    
    Args:
        command: The command to execute (e.g., 'ls', 'cat', 'find')
        args: List of arguments to pass to the command
        
    Returns:
        dict: A dictionary containing:
            - stdout: Standard output as string
            - stderr: Standard error as string
            - exit_code: Command exit code
            - execution_time: Time taken to execute in seconds
    """

python

def read_file(path: str, max_size: Optional[int] = None) -> str:
    """
    Read the contents of a file.
    
    Args:
        path: Path to the file
        max_size: Maximum file size to read in bytes (None for no limit)
        
    Returns:
        str: Contents of the file
    """

python

def write_file(path: str, content: str, mode: str = 'w') -> bool:
    """
    Write content to a file.
    
    Args:
        path: Path to the file
        content: Content to write
        mode: Write mode ('w' for overwrite, 'a' for append)
        
    Returns:
        bool: True if successful
    """

python

def find_files(pattern: str, directory: str = '.', recursive: bool = True) -> List[str]:
    """
    Find files matching a pattern in the specified directory.
    
    Args:
        pattern: Glob pattern to match
        directory: Directory to search in
        recursive: Whether to search recursively
        
    Returns:
        List[str]: List of matching file paths
    """

3.1.3 Security Considerations

    All system commands will be checked against a configurable whitelist/blacklist
    Commands that could potentially modify the system will require explicit permission
    Sudo commands will always require permission regardless of configuration
    Execution timeout to prevent long-running commands

3.2 Web Tools Module
3.2.1 Purpose

Provide functions for making web requests and processing web content.
3.2.2 Key Functions

python

def get_webpage(url: str, params: Optional[Dict[str, str]] = None) -> dict:
    """
    Fetch a webpage using HTTP GET.
    
    Args:
        url: The URL to fetch
        params: Optional query parameters
        
    Returns:
        dict: A dictionary containing:
            - status_code: HTTP status code
            - content: Page content as string
            - headers: Response headers
            - text: Text content with HTML tags removed
    """

python

def search_web(query: str, search_engine: str = 'duckduckgo') -> List[dict]:
    """
    Search the web for a query.
    
    Args:
        query: Search query
        search_engine: Search engine to use ('duckduckgo', 'brave', etc.)
        
    Returns:
        List[dict]: List of search results, each containing:
            - title: Result title
            - url: Result URL
            - snippet: Text snippet from the result
    """

python

def get_weather(location: str, units: str = 'metric') -> dict:
    """
    Get weather information for a location from weather.gov.
    
    Args:
        location: City or location name
        units: Units for temperature ('metric' or 'imperial')
        
    Returns:
        dict: Weather information containing:
            - temperature: Current temperature
            - conditions: Weather conditions
            - forecast: List of forecast days
            - humidity: Current humidity
            - wind: Wind information
    """

python

def download_file(url: str, output_path: str) -> bool:
    """
    Download a file from a URL.
    
    Args:
        url: URL of the file to download
        output_path: Path to save the file
        
    Returns:
        bool: True if successful
    """

3.2.3 Security Considerations

    Rate limiting to prevent abuse
    URL validation to prevent malicious requests
    Timeout configuration for requests
    Option to restrict to specific domains

3.3 Documentation Tools Module
3.3.1 Purpose

Provide utilities for generating, processing, and extracting information from documentation.
3.3.2 Key Functions

python

def generate_markdown_doc(content: str, title: str, 
                         format: str = 'markdown') -> str:
    """
    Generate formatted documentation from text content.
    
    Args:
        content: The content to format
        title: Document title
        format: Output format ('markdown', 'html', etc.)
        
    Returns:
        str: Formatted documentation
    """

python

def extract_code_from_file(file_path: str, language: Optional[str] = None) -> List[dict]:
    """
    Extract code blocks from a file.
    
    Args:
        file_path: Path to the file
        language: Optional language filter
        
    Returns:
        List[dict]: List of code blocks, each containing:
            - code: Code content
            - language: Detected language
            - line_numbers: Start and end line numbers
    """

python

def summarize_document(content: str, max_length: int = 500) -> str:
    """
    Generate a summary of a document.
    
    Args:
        content: Document content
        max_length: Maximum summary length in characters
        
    Returns:
        str: Document summary
    """

python

def extract_context_from_docs(query: str, docs: List[str]) -> str:
    """
    Extract relevant context from a collection of documents based on a query.
    
    Args:
        query: Search query
        docs: List of document contents
        
    Returns:
        str: Relevant context extracted from documents
    """

4. Security Module
4.1 Purpose

Manage permissions and security for function execution.
4.2 Key Components
4.2.1 PermissionManager Class

python

class PermissionManager:
    """
    Manages permissions for executing functions.
    
    This class handles permission prompts, configuration, and security policies
    for all tools in the library.
    """
    
    def __init__(self, prompt_enabled: bool = True, 
                sudo_always_prompt: bool = True,
                command_whitelist: Optional[List[str]] = None,
                command_blacklist: Optional[List[str]] = None):
        """
        Initialize the permission manager.
        
        Args:
            prompt_enabled: Whether to prompt for permissions
            sudo_always_prompt: Whether to always prompt for sudo commands
            command_whitelist: List of allowed commands (None for all)
            command_blacklist: List of forbidden commands
        """
        
    def request_permission(self, function_name: str, 
                          args: Dict[str, Any]) -> bool:
        """
        Request permission to execute a function.
        
        Args:
            function_name: Name of the function
            args: Function arguments
            
        Returns:
            bool: True if permission granted
        """
        
    def validate_command(self, command: str, args: List[str]) -> bool:
        """
        Validate a command against security policies.
        
        Args:
            command: Command to validate
            args: Command arguments
            
        Returns:
            bool: True if command is allowed
        """

5. Agent Module
5.1 Purpose

Provide the main integration with Ollama and handle function invocation.
5.2 Key Components
5.2.1 OllamaAgent Class

python

class OllamaAgent:
    """
    Main agent class that interfaces with Ollama.
    
    This class manages the connection to Ollama, handles function registration,
    and processes responses from the model.
    """
    
    def __init__(self, model: str = "llama3.1", 
                permission_prompts: bool = True,
                host: str = "http://localhost:11434",
                sudo_always_prompt: bool = True):
        """
        Initialize the Ollama agent.
        
        Args:
            model: Ollama model to use
            permission_prompts: Whether to prompt for permissions
            host: Ollama host address
            sudo_always_prompt: Whether to always prompt for sudo commands
        """
        
    def register_tools(self):
        """
        Register all available tools with the Ollama client.
        
        This method scans the tools modules and registers all functions
        with appropriate documentation and type hints.
        """
        
    def chat(self, message: str, 
            system_prompt: Optional[str] = None) -> str:
        """
        Send a message to Ollama and handle any function calls.
        
        Args:
            message: User message
            system_prompt: Optional system prompt
            
        Returns:
            str: Response from Ollama
        """
        
    def process_function_calls(self, 
                              function_calls: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
        """
        Process function calls from Ollama.
        
        Args:
            function_calls: List of function calls from Ollama
            
        Returns:
            List[Dict[str, Any]]: Results of function calls
        """

6. Configuration Module
6.1 Purpose

Manage library configuration and settings.
6.2 Key Components
6.2.1 Configuration Class

python

class Configuration:
    """
    Configuration management for OllamaTools.
    
    This class handles loading, saving, and accessing configuration settings
    for the library.
    """
    
    def __init__(self, config_file: Optional[str] = None):
        """
        Initialize configuration.
        
        Args:
            config_file: Path to configuration file
        """
        
    def load(self):
        """
        Load configuration from file.
        """
        
    def save(self):
        """
        Save configuration to file.
        """
        
    def get(self, key: str, default: Any = None) -> Any:
        """
        Get a configuration value.
        
        Args:
            key: Configuration key
            default: Default value if key not found
            
        Returns:
            Any: Configuration value
        """
        
    def set(self, key: str, value: Any):
        """
        Set a configuration value.
        
        Args:
            key: Configuration key
            value: Configuration value
        """

7. Usage Examples
7.1 Basic Usage

python

from ollamatools import OllamaAgent

# Create agent with default settings
agent = OllamaAgent(model="llama3.1")

# Chat with automatic function invocation
response = agent.chat("What's the weather like in New York?")
print(response)

# Execute Linux command with permission prompt
response = agent.chat("List all files in the current directory sorted by size")
print(response)

# Generate documentation
response = agent.chat("Create documentation for a Python function that calculates the Fibonacci sequence")
print(response)

7.2 Custom Configuration

python

from ollamatools import OllamaAgent, Configuration

# Create custom configuration
config = Configuration()
config.set("permission_prompts", False)  # Disable permission prompts
config.set("command_whitelist", ["ls", "cat", "grep"])  # Only allow specific commands

# Create agent with custom configuration
agent = OllamaAgent(model="llama3.1", config=config)

# Chat with automatic function invocation
response = agent.chat("What are the largest files in this directory?")
print(response)

8. Implementation Plan
8.1 Phase 1: Core Framework

    Set up project structure
    Implement security module
    Implement basic agent functionality
    Add configuration management
    Write unit tests

8.2 Phase 2: System Tools

    Implement command execution functions
    Add file operations
    Set up security policies
    Test system tool integration

8.3 Phase 3: Web Tools

    Implement web request functions
    Add weather API integration
    Implement search functionality
    Test web tool integration

8.4 Phase 4: Documentation Tools

    Implement documentation generation
    Add context extraction
    Implement code extraction utilities
    Test documentation tool integration

8.5 Phase 5: Integration and Testing

    Integration testing with Ollama
    Performance optimization
    Security auditing
    Documentation and examples

9. Extensibility

The library is designed to be easily extended with new tools:

    Create a new module in the tools directory
    Implement functions with proper type hints and docstrings
    Import and register the module in __init__.py

The agent will automatically discover and register the new functions.
10. Testing Strategy
10.1 Unit Tests

    Test each function in isolation
    Mock external dependencies
    Test permission system

10.2 Integration Tests

    Test interaction with Ollama
    Test function calling flow
    Test error handling

10.3 Security Tests

    Test permission prompts
    Test command validation
    Test input sanitization

Is there any specific aspect of this specification you'd like me to expand on or modify?

can you elaborate on what you meant with a whitelist / blacklist of commands? i think we decided to omit that and just stick with prompt based with the option to turn off?

You're absolutely right - I included the whitelist/blacklist approach in the specification despite our earlier decision to go with a purely prompt-based system with the option to disable it.

Let me revise the Security Module section to properly reflect our design decision:
4. Security Module (Revised)
4.1 Purpose

Manage permissions and security for function execution using a prompt-based approach.
4.2 Key Components
4.2.1 PermissionManager Class

python

class PermissionManager:
    """
    Manages permissions for executing functions.
    
    This class handles permission prompts with configurable options to disable prompting.
    By default, it will prompt the user for permission before executing potentially
    sensitive operations, with special handling for sudo commands.
    """
    
    def __init__(self, prompt_enabled: bool = True, 
                sudo_always_prompt: bool = True):
        """
        Initialize the permission manager.
        
        Args:
            prompt_enabled: Whether to prompt for permissions (can be disabled)
            sudo_always_prompt: Whether to always prompt for sudo commands
                                (overrides prompt_enabled for sudo)
        """
        
    def request_permission(self, function_name: str, 
                          args: Dict[str, Any], 
                          is_sudo: bool = False) -> bool:
        """
        Request permission to execute a function.
        
        Prompts the user for permission if prompt_enabled is True,
        or if is_sudo is True and sudo_always_prompt is True.
        Otherwise automatically grants permission.
        
        Args:
            function_name: Name of the function
            args: Function arguments
            is_sudo: Whether the command uses sudo
            
        Returns:
            bool: True if permission granted
        """
        
    def format_permission_prompt(self, function_name: str, 
                               args: Dict[str, Any]) -> str:
        """
        Format a human-readable permission prompt.
        
        Args:
            function_name: Name of the function
            args: Function arguments
            
        Returns:
            str: Formatted permission prompt
        """

4.3 Implementation Details

    Simple On/Off Toggle:
        Users can completely disable permission prompts through a configuration setting
        When disabled, all commands except sudo will execute without prompting
    Special Handling for Sudo:
        Sudo commands always require permission by default
        This behavior can be configured but is separate from the general prompt toggle
    Informative Prompts:
        Permission prompts clearly explain what command will be executed and with what parameters
        Includes potential security implications for sensitive operations
    Permission Response Options:
        Allow: Grant permission for this single operation
        Allow for session: Grant permission for similar operations for the rest of the session
        Deny: Reject this operation
        Modify: Allow the user to modify command parameters before execution

This revised approach focuses on the prompt-based permission system we agreed upon, removing the whitelist/blacklist concept entirely. The system is designed to be secure by default but allows for flexibility by providing an option to disable prompts (except for sudo commands which can have their own setting).

Now that we’ve wrapped up the brainstorming process, can you compile our findings into a comprehensive, developer-ready specification? Include all relevant requirements, architecture choices, data handling details, error handling strategies, and a testing plan so a developer can immediately begin implementation.

OllamaTools: Function Library for Ollama LLMs
Technical Specification Document
1. Project Overview

Project Name: OllamaTools

Description: A Python library that extends Ollama with semantic function calling capabilities, enabling automatic invocation of system commands, web requests, and documentation utilities based on conversational context.

Primary Goal: Allow Ollama LLMs to execute external functions based on semantic understanding of user queries without requiring explicit enabling/disabling of tools.
2. System Requirements
2.1 Software Requirements

    Python 3.8+
    Ollama 0.4.0+ with function calling support
    Linux-based operating system (primary target)
    Optional: Windows/macOS support may be added in future releases

2.2 Dependencies

    ollama-python >= 0.4.0
    requests >= 2.28.0
    beautifulsoup4 >= 4.11.0
    pydantic >= 1.10.0
    markdown >= 3.4.0
    typing-extensions >= 4.4.0
    pytest >= 7.0.0 (for testing)

3. Architecture
3.1 System Architecture

OllamaTools is designed as a Python package that extends the functionality of the official Ollama Python client, adding semantic function detection and execution capabilities.

OllamaTools/
├── ollamatools/
│   ├── __init__.py
│   ├── agent.py                # Main agent interface
│   ├── security.py             # Permission management
│   ├── config.py               # Configuration management
│   ├── tools/                  # Function groups
│   │   ├── __init__.py
│   │   ├── system_tools.py     # Linux command execution
│   │   ├── web_tools.py        # Web requests
│   │   └── doc_tools.py        # Documentation utilities
│   └── utils/
│       ├── __init__.py
│       └── logger.py           # Logging utilities
├── tests/                      # Unit and integration tests
├── examples/                   # Example scripts
├── README.md
├── LICENSE
├── setup.py
└── requirements.txt

3.2 Core Components

    OllamaAgent: Primary interface that manages communication with Ollama and handles function detection and execution.
    PermissionManager: Handles security and permissions for executing functions, especially system commands.
    Function Libraries:
        System Tools: Execute Linux commands and file operations
        Web Tools: Make web requests and process responses
        Documentation Tools: Generate and process documentation

4. Detailed Component Specifications
4.1 OllamaAgent

The OllamaAgent class serves as the main entry point for the library. It extends the standard Ollama client with function execution capabilities.

python

class OllamaAgent:
    def __init__(
        self, 
        model: str = "llama3.1",
        host: str = "http://localhost:11434",
        permission_prompts: bool = True,
        sudo_always_prompt: bool = True
    ):
        """
        Initialize the OllamaAgent with specified configuration.
        
        Args:
            model: Name of the Ollama model to use
            host: Ollama server address
            permission_prompts: Whether to prompt for function execution permission
            sudo_always_prompt: Whether to always prompt for sudo commands
        """
        
    def chat(
        self, 
        message: str, 
        system_prompt: Optional[str] = None,
        context: Optional[List[Dict[str, str]]] = None
    ) -> str:
        """
        Send a message to Ollama, automatically detecting and executing functions.
        
        Args:
            message: User message
            system_prompt: Optional system prompt
            context: Optional conversation context
            
        Returns:
            str: Response from Ollama, potentially after executing functions
        """
        
    def register_tools(self):
        """
        Register all available tools with the Ollama client.
        """
        
    def process_function_calls(
        self, 
        function_calls: List[Dict[str, Any]]
    ) -> List[Dict[str, Any]]:
        """
        Process function calls detected by Ollama.
        
        Args:
            function_calls: List of function calls from Ollama
            
        Returns:
            List of function call results
        """

4.2 PermissionManager

The PermissionManager handles security for function execution, with a focus on a prompt-based approach.

python

class PermissionManager:
    def __init__(
        self,
        prompt_enabled: bool = True,
        sudo_always_prompt: bool = True
    ):
        """
        Initialize the permission manager.
        
        Args:
            prompt_enabled: Whether to prompt for permissions
            sudo_always_prompt: Whether to always prompt for sudo commands
        """
        
    def request_permission(
        self,
        function_name: str,
        args: Dict[str, Any],
        is_sudo: bool = False
    ) -> bool:
        """
        Request permission to execute a function.
        
        Args:
            function_name: Name of the function
            args: Function arguments
            is_sudo: Whether the command uses sudo
            
        Returns:
            bool: True if permission granted
        """
        
    def detect_sudo(self, command: str) -> bool:
        """
        Detect if a command uses sudo.
        
        Args:
            command: Command string
            
        Returns:
            bool: True if command uses sudo
        """

4.3 System Tools

System tools provide functions to execute Linux commands and perform file operations.

python

def execute_command(
    command: str,
    args: Optional[List[str]] = None,
    timeout: int = 60
) -> Dict[str, Any]:
    """
    Execute a shell command with arguments.
    
    Args:
        command: Command to execute
        args: Command arguments
        timeout: Command timeout in seconds
        
    Returns:
        dict: Result with stdout, stderr, and exit code
    """
    
def read_file(
    path: str,
    max_size: Optional[int] = None
) -> str:
    """
    Read file contents.
    
    Args:
        path: File path
        max_size: Maximum file size to read in bytes
        
    Returns:
        str: File contents
    """
    
def write_file(
    path: str,
    content: str,
    mode: str = 'w'
) -> bool:
    """
    Write content to a file.
    
    Args:
        path: File path
        content: Content to write
        mode: Write mode ('w' for write, 'a' for append)
        
    Returns:
        bool: True if successful
    """
    
def find_files(
    pattern: str,
    directory: str = '.',
    recursive: bool = True
) -> List[str]:
    """
    Find files matching a pattern.
    
    Args:
        pattern: File pattern
        directory: Search directory
        recursive: Whether to search recursively
        
    Returns:
        List[str]: Matching file paths
    """

4.4 Web Tools

Web tools provide functions for making web requests and processing responses.

python

def fetch_url(
    url: str,
    method: str = 'GET',
    params: Optional[Dict[str, str]] = None,
    headers: Optional[Dict[str, str]] = None,
    data: Optional[Dict[str, Any]] = None,
    timeout: int = 30
) -> Dict[str, Any]:
    """
    Fetch a URL with specified parameters.
    
    Args:
        url: URL to fetch
        method: HTTP method
        params: URL parameters
        headers: HTTP headers
        data: Request data
        timeout: Request timeout in seconds
        
    Returns:
        dict: Response with status, headers, and content
    """
    
def get_weather(
    location: str,
    days: int = 3,
    units: str = 'metric'
) -> Dict[str, Any]:
    """
    Get weather information for a location.
    
    Args:
        location: Location name or coordinates
        days: Number of forecast days
        units: Temperature units ('metric' or 'imperial')
        
    Returns:
        dict: Weather information
    """
    
def search_web(
    query: str,
    num_results: int = 5
) -> List[Dict[str, str]]:
    """
    Search the web for a query.
    
    Args:
        query: Search query
        num_results: Number of results to return
        
    Returns:
        List[dict]: Search results with title, URL, and snippet
    """

4.5 Documentation Tools

Documentation tools provide functions for creating and processing documentation.

python

def generate_markdown(
    content: str,
    title: str,
    format_type: str = 'markdown'
) -> str:
    """
    Generate formatted documentation.
    
    Args:
        content: Document content
        title: Document title
        format_type: Output format ('markdown' or 'html')
        
    Returns:
        str: Formatted documentation
    """
    
def extract_context(
    query: str,
    documents: List[str],
    max_length: int = 1000
) -> str:
    """
    Extract relevant context from documents based on a query.
    
    Args:
        query: Search query
        documents: List of document contents
        max_length: Maximum context length
        
    Returns:
        str: Extracted context
    """
    
def summarize_text(
    text: str,
    max_length: int = 500
) -> str:
    """
    Generate a summary of text.
    
    Args:
        text: Text to summarize
        max_length: Maximum summary length
        
    Returns:
        str: Text summary
    """

5. Security Considerations
5.1 Permission System

The permission system is designed to be secure by default while allowing flexibility.

    Prompt-Based Permissions:
        By default, prompts user for permission before executing potentially sensitive operations
        Clear, informative prompts explaining the operation and potential risks
        Option to disable prompts for non-sudo commands through configuration
    Special Handling for Sudo:
        Sudo commands always require permission by default
        This behavior can be configured but is separate from the general permission setting
    Permission Response Options:
        Allow: Grant permission for this operation
        Allow for session: Grant permission for similar operations in this session
        Deny: Reject the operation
        Modify: Allow modifying the operation before execution

5.2 Command Execution Security

    Sanitization:
        All command inputs are sanitized to prevent injection attacks
        Arguments are properly escaped and validated
    Timeouts:
        Commands have configurable timeouts to prevent hanging processes
    Resource Limits:
        Options to limit resource usage (CPU, memory) for commands

6. Error Handling
6.1 Error Types

    PermissionError: Raised when permission is denied for an operation
    CommandExecutionError: Raised when a command fails to execute
    WebRequestError: Raised when a web request fails
    TimeoutError: Raised when an operation times out
    ValidationError: Raised when input validation fails

6.2 Error Handling Strategy

    Graceful Degradation:
        When a function fails, the system attempts to continue with alternative approaches
        Clear error messages are provided to the user
    Detailed Logging:
        All errors are logged with detailed information
        Optional debug mode for extensive logging
    User Feedback:
        Informative error messages returned to the user
        Suggestions for resolving common errors

7. Testing Strategy
7.1 Unit Testing

    Component Tests:
        Tests for each individual function
        Tests for error handling and edge cases
        Mocked dependencies for isolated testing
    Security Tests:
        Tests for permission system
        Tests for command sanitization
        Tests for input validation

7.2 Integration Testing

    Function Integration:
        Tests for function detection and execution
        Tests for proper function argument passing
        Tests for result handling
    Ollama Integration:
        Tests for integration with the Ollama API
        Tests with different models and configurations

7.3 System Testing

    End-to-End Tests:
        Complete workflow tests with realistic scenarios
        Performance testing under various conditions
    Security Auditing:
        Systematic security review of command execution
        Testing of permission system effectiveness

8. Implementation Guidelines
8.1 Coding Standards

    Code Style:
        Follow PEP 8 for Python code style
        Use type hints for all functions
        Document all functions with detailed docstrings
    Error Handling:
        Use appropriate exception classes
        Provide informative error messages
        Log all errors with context
    Testing:
        Write tests for all functions
        Aim for high test coverage
        Include edge cases and error conditions

8.2 Documentation

    Code Documentation:
        Detailed docstrings for all public functions
        Module-level documentation explaining purpose and usage
        Inline comments for complex code sections
    User Documentation:
        Installation and setup guide
        API reference
        Usage examples
        Security best practices

9. Usage Examples
9.1 Basic Usage

python

from ollamatools import OllamaAgent

# Create agent with default settings
agent = OllamaAgent(model="llama3.1")

# Chat with automatic function detection
response = agent.chat("What's the weather like in San Francisco?")
print(response)

# Execute a system command
response = agent.chat("Show me the largest files in the current directory")
print(response)

# Generate documentation
response = agent.chat("Create documentation for a function that calculates prime numbers")
print(response)

9.2 Configuration

python

from ollamatools import OllamaAgent, Config

# Configure the agent
config = Config()
config.permission_prompts = False  # Disable permission prompts
config.sudo_always_prompt = True   # Still prompt for sudo commands

# Create agent with configuration
agent = OllamaAgent(model="llama3.1", config=config)

# Use configured agent
response = agent.chat("Count the number of files in /etc")
print(response)

10. Implementation Plan
10.1 Phase 1: Core Infrastructure

    Set up project structure
    Implement basic OllamaAgent
    Implement permission system
    Implement configuration management

10.2 Phase 2: System Tools

    Implement command execution
    Implement file operations
    Add security features
    Test system integration

10.3 Phase 3: Web Tools

    Implement web request functions
    Implement weather API
    Implement web search
    Test web integration

10.4 Phase 4: Documentation Tools

    Implement markdown generation
    Implement context extraction
    Implement summarization
    Test documentation integration

10.5 Phase 5: Testing and Refinement

    Comprehensive testing
    Performance optimization
    Security auditing
    Documentation completion

11. Extension Points

The library is designed to be extensible in the following ways:

    Custom Tool Addition:
        Create new tool modules by adding Python files to the tools directory
        Use docstrings and type hints for automatic registration
        Follow the existing tool pattern for consistency
    Custom Permission Handlers:
        Extend or replace the permission system with custom implementations
        Implement the PermissionManager interface
    Integration with Other Systems:
        Add adapters for other AI systems
        Extend to support additional platforms

12. Conclusion

This specification outlines the design and implementation of the OllamaTools library, a Python package that extends Ollama with semantic function calling capabilities. By following this specification, developers can create a robust, secure, and flexible library that enhances Ollama's capabilities with system command execution, web requests, and documentation utilities.

The implementation should prioritize security, ease of use, and extensibility, while maintaining compatibility with the existing Ollama ecosystem. The prompt-based permission system ensures security while allowing users to disable prompts for convenience when appropriate.


Our most intelligent model yet Learn more
Project content
fleeky bs
Created by Jason Krueger

    No knowledge added yet.

Content
No content added yet
Add images, PDFs, docs, spreadsheets, and more to summarize, analyze, and query content with Claude.