Skip to main content

Lucius Assistant

PyPI version

Lucius Assistant is an agentic AI assistant built on top of the Llama language model, designed to provide intelligent assistance through a robust function calling system. It offers seamless integration of chat capabilities with file operations and memory management.

Features

  • Intelligent Model Selection: Automatically selects the most suitable Llama model (3.1, 3.2, or others) with preference for 8b parameter versions
  • File Operations:
    • Directory listing with safety checks
    • File reading and writing with path validation
    • File and folder copying with automatic directory creation
  • Memory System:
    • Store and retrieve text memories with UUID-based identification
    • Contextual memory search with relevance scoring
    • Memory management (add, remove, search)
  • Event-Driven Architecture:
    • Real-time streaming text processing
    • Separate handling of chat and function calls
    • Automated response generation
  • Safety Features:
    • Path validation to prevent directory traversal
    • Relative path enforcement
    • Graceful error handling
    • Automatic parent directory creation

Installation

pip install luciusassistant

Requirements

Usage

Basic Usage

from luciusassistant import LuciusAssistant, get_builtin_function_calls

# Initialize Lucius with built-in functions
lucius = LuciusAssistant()
# Contains a built-in function to list the current directory and read files
lucius.set_function_calls(get_builtin_function_calls())


def print_response(mode: int, delta: str, text: str):
    if mode == 0:
        print("[Lucius]:")
    elif mode == 1:
        print(delta, end="", flush=True)
    elif mode == 2:
        print("")


lucius.engine.stream_event.on(print_response)

# Chat with Lucius
response = lucius.chat("Hello, can you take a look at the current project?")

File Operations

from luciusassistant import LuciusAssistant, get_builtin_function_calls

# Initialize with built-in functions
lucius = LuciusAssistant()
lucius.set_function_calls(get_builtin_function_calls())

# List directory contents
lucius.chat("List the contents of the current directory")

# Read a file
lucius.chat("Read the contents of config.json")

# Write to a file
lucius.chat("Create a new file named example.txt with 'Hello World' content")

Memory System

from luciusassistant import LuciusAssistant, get_builtin_function_calls

# Initialize with built-in functions
lucius = LuciusAssistant()
lucius.set_function_calls(get_builtin_function_calls()) # Contains a built-in function to store and retrieve memories

# Store a memory
lucius.chat("Remember this phone number for support: 1-800-SUPPORT")

# Long conversation later...

# Search memories
lucius.chat("Find any stored support contact information")

# Lucius finds the support phone number memory

# Remove a memory
lucius.chat("Remove that memory")

Creating Custom Functions

You can extend Lucius's capabilities by creating custom functions:

from luciusassistant import LuciusAssistant, FunctionCall, get_builtin_function_calls

# Create a custom function
class WeatherFunctionCall(FunctionCall):
    def __init__(self):
        super().__init__(
            name="get_weather",
            parameters={
                "city": "Name of the city",
                "country": "Country code (e.g., US, UK)"
            },
            description="Get the current weather for a specified city"
        )

    def invoke(self, city: str, country: str = "US"):
        try:
            # Implement your weather API call here
            return f"Weather information for {city}, {country}"
        except Exception as e:
            return f"Failed to get weather: {str(e)}"

# Initialize Lucius with both built-in and custom functions
lucius = LuciusAssistant()
function_calls = get_builtin_function_calls()
function_calls.append(WeatherFunctionCall())
lucius.set_function_calls(function_calls) # Very impotant you call this function at the start because this will clear the conversation history

# Use the custom function
lucius.chat("What's the weather like in San Francisco?")

Events System

Lucius provides three main events you can subscribe to for monitoring the conversation and function calls:

from luciusassistant import LuciusAssistant, get_builtin_function_calls

# Initialize Lucius with built-in functions
lucius = LuciusAssistant()
lucius.set_function_calls(get_builtin_function_calls())


def handle_chat_text(mode: int, delta: str, text: str, switch: bool):
    # mode: 0=stream start, 1=during stream, 2=stream end
    # delta: new text generated in this iteration
    # text: total accumulated text so far
    # switch: True only when switching from chat to function call mode
    print(f"Chat text: mode={mode}, delta={delta}, text={text}, switch={switch}")


def handle_function_calls(mode: int, delta: str, text: str, switch: bool):
    # mode: 0=stream start, 1=during stream, 2=stream end
    # delta: new text generated in this iteration
    # text: total accumulated text so far
    # switch: True only when switching from chat to function call mode
    print(f"Function calls: mode={mode}, delta={delta}, text={text}, switch={switch}")


def handle_automated_response(automated_response: str):
    # automated_response: the response generated by the automated function
    print(f"Automated response: {automated_response}")


# Subscribe to the events
lucius.chat_text_event.on(handle_chat_text)                     # Triggered for each iteration normal text is generated
lucius.function_calls_text_event.on(handle_function_calls)      # Triggered for each iteration of function call text is generated
lucius.automated_response_event.on(handle_automated_response)   # Triggered when function calls are executed and results are returned

# Example chat that will trigger events
lucius.chat("Hello, can you take a look at the current project?")

The events system allows you to:

  • Monitor the streaming text generation in real-time
  • Track when function calls are being made
  • Handle function results as they come in
  • Build custom logging or response handling systems
  • Create interactive UIs that update in real-time

Each event provides different information:

  1. chat_text_event: Streams the normal conversation text
  2. function_calls_text_event: Streams function call XML format
  3. automated_response_event: Provides function execution results

The mode parameter in handlers indicates:

  • 0: Stream start
  • 1: During stream
  • 2: Stream end

The switch parameter indicates when Lucius switches between chat and function call modes.

Architecture

Lucius Assistant is built with a modular architecture:

  1. Core Engine: Based on chatollama, utilizing Llama models for text generation
  2. Function Call System: XML-like format for structured function invocation
  3. Event System: Handles streaming, function results, and response generation
  4. Memory Management: In-memory storage with UUID-based retrieval
  5. Safety Layer: Input validation and path safety checks

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Built on top of the Llama language model
  • Uses chatollama for core functionality

Download files

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

Source Distribution

luciusassistant-0.4.tar.gz (15.0 kB view details)

Uploaded Source

Built Distribution

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

luciusassistant-0.4-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

Details for the file luciusassistant-0.4.tar.gz.

File metadata

  • Download URL: luciusassistant-0.4.tar.gz
  • Upload date:
  • Size: 15.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for luciusassistant-0.4.tar.gz
Algorithm Hash digest
SHA256 63f4129afc68ecf0377d49ed12421498a09b31e45b7b9639253bcb63cc2217a4
MD5 05f3e1c65946373e50260f85fa928054
BLAKE2b-256 837e1a82fe5a9cc0bc6246c5fd3f6a346d381f7696990d7ebb40d0cc8da2a4b9

See more details on using hashes here.

File details

Details for the file luciusassistant-0.4-py3-none-any.whl.

File metadata

  • Download URL: luciusassistant-0.4-py3-none-any.whl
  • Upload date:
  • Size: 13.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for luciusassistant-0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 ae0787ce068f1bd26694b9139abd4deef2bdf80edd71574bdb96343204673899
MD5 100404b1f92318511c6ff17211f31b71
BLAKE2b-256 bb4df50aff7eec6b4778ea0ebbfd7e089f68343573edfb4b9c01919cdfa23678

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.4 This release

2 files

0.3

2 files

0.2

2 files

0.1

2 files

Supported by

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