Skip to main content

A modular and multiplatform AI chatbot

Project description

Pixi AI Chatbot

CodeFactor

A small, hackable and powerful AI chatbot implementation with tool calling and image support that blends in perfectly with the users.

Features

  • Multi-Platform Support: Works with Discord and Telegram out of the box.
  • Multi-Instance Support: Run multiple instances with completely different configurations in parallel.
  • Tool Calling: Supports calling external tools and APIs from chat.
  • Advanced Logging: Colored logging, Supports logging tool calls and extra information for debugging.
  • Image Support: Can recieve, compress and cache all image formats.
  • Audio Support: Can recieve, compress and cache all audio formats.
  • Configurable: Easily modify the bot's persona and behavior.
  • Addon Support: Easily add new commands, tools, or other integrations (WIP, API is unstable and documentation is pending).
  • Dotenv Support: Securely manage API keys and tokens with environment variables.

Requirements

  • Python >= 3.11
  • aiofiles>=25.1.0
  • argparse>=1.4.0
  • dotenv>=0.9.9
  • openai>=2.8.1
  • zstandard>=0.25.0
  • discord-py>=2.6.4 (optional, for discord platform)
  • python-telegram-bot>=22.5 (optional, for telegram platform)
  • av>=16.0.0 (optional, for media caching)
  • uv (recommended, for setting up all the requirements easily in a python virtual environemnt)

Getting Started

There are many extra optional dependecy groups that you may need to install based on your own needs, for simplicity, this guide shows you how to install all modules at once.

extra dependecy group packages description status
media av>=16.0.0 installs PyAV and enables media caching and processing features optional
discord discord-py>=2.6.4 installs discord.py and enables discord bot functionality optional*
telegram python-telegram-bot>=22.5 installs python-telegram-bot and enables telegram bot functionality optional*

[*] you have to install at least one of these dependecy groups for the bot to function

You should also have your own OpenAI compatible API URL and API Key and provide that to pixi, using the command line interface and/or environment variables and you should also choose a large langauge model to use for the bot and optionally a seperate one for agentic tools, e.g. online/offline search tools, based on my testing, it works best with google/gemini-2.0-flash-001, works best with agentic models. optionally you may also choose an embedding model to process web search or offline search content, works best with BAAI/bge-m3-multi but you can use any other model.

Installation using UV (Recommended)

git clone https://github.com/amiralimollaei/pixi-bot.git
cd pixi-bot
uv sync --all-extras
# enter the venv
source .venv/bin/activate
# run using pixi-cli -p [platform] [options]

Standalone CLI Using UVX (Recommended)

# installs pixi-bot from pypi, updates it, and runs pixi-cli
uvx --from pixi-bot[discord,telegram,media] pixi-cli -p [platform] [options]

Installation using PIP

pip install pixi-bot[media,discord,telegram]
pixi-cli -p [platform] [options]

Setup Environment Variables

  • Create a .env file and set OPENAI_API_KEY to your API provider's API Key
  • Set DISCORD_BOT_TOKEN and/or TELEGRAM_BOT_TOKEN environment variables
  • Set DEEPINFRA_API_KEY environment variable and DISCORD_BOT_TOKEN
  • Optionally set TENOR_API_KEY for GIF search features powered by Tenor

Runninig The Bot

  • Discord: pixi-cli -p discord [options]
  • Telegram: pixi-cli -p telegram [options]

CLI Usage

the following message is provided by running pixi-cli --help

usage: pixi-cli [-h] --platform {discord,telegram} [--pixi-directory {discord,telegram}]
                [--log-level {debug,info,warning,error,critical}] [--api-url API_URL]
                [--auth | --no-auth] --model MODEL [--model-max-context MODEL_MAX_CONTEXT]
                [--helper-model HELPER_MODEL]
                [--helper-model-max-context HELPER_MODEL_MAX_CONTEXT]
                [--embedding-model EMBEDDING_MODEL]
                [--embedding-model-max-context EMBEDDING_MODEL_MAX_CONTEXT]
                [--embedding-model-dimension EMBEDDING_MODEL_DIMENSION]
                [--embedding-model-split-size EMBEDDING_MODEL_SPLIT_SIZE]
                [--embedding-model-min-size EMBEDDING_MODEL_MIN_SIZE]
                [--embedding-model-max-size EMBEDDING_MODEL_MAX_SIZE]
                [--embedding-model-sentence-level | --no-embedding-model-sentence-level]
                [--tool-calling | --no-tool-calling] [--tool-logging | --no-tool-logging]
                [--wiki-search | --no-wiki-search] [--gif-search | --no-gif-search]
                [--image-support | --no-image-support] [--audio-support | --no-audio-support]
                [--environment-whitelist | --no-environment-whitelist]
                [--environment-ids ENVIRONMENT_IDS [ENVIRONMENT_IDS ...]]
                [--database-names DATABASE_NAMES [DATABASE_NAMES ...]]

Run the Pixi bot, a multi-platform AI chatbot.

options:
  -h, --help            show this help message and exit
  --platform, -p {discord,telegram}
                        Platform to run the bot on.
  --pixi-directory, -pd {discord,telegram}
                        The root directory for configuration files, addons, userdata, assets and
                        cache, defaults to "~/.pixi/"
  --log-level, -l {debug,info,warning,error,critical}
                        Set the logging level.
  --api-url, -a API_URL
                        OpenAI Compatible API URL to use for the bot
  --auth, --no-auth     whether or not to authorize to the API backends
  --model, -m MODEL     Language Model to use for the main chatbot bot
  --model-max-context, -ctx MODEL_MAX_CONTEXT
                        Maximum model context size (in tokens), pixi tries to apporiximately stay
                        within this context size, Default is '16192`.
  --helper-model, -hm HELPER_MODEL
                        Language Model to use for agentic tools
  --helper-model-max-context, -hctx HELPER_MODEL_MAX_CONTEXT
                        Maximum helper model context size (in tokens), pixi tries to
                        apporiximately stay within this context size, Default is '16192`.
  --embedding-model, -em EMBEDDING_MODEL
                        Embedding Model to use for embedding tools
  --embedding-model-max-context, -ectx EMBEDDING_MODEL_MAX_CONTEXT
                        Maximum embedding model context size (in tokens), pixi tries to
                        apporiximately stay within this context size, Default is '16192`.
  --embedding-model-dimension, -ed EMBEDDING_MODEL_DIMENSION
                        Dimention to use for the embedding model, Default is '768`.
  --embedding-model-split-size, -esplit EMBEDDING_MODEL_SPLIT_SIZE
                        Split size to use for the embedding chunk tokenizer, Default is '512`.
  --embedding-model-min-size, -emin EMBEDDING_MODEL_MIN_SIZE
                        Minimum chunk size to use for the embedding chunk tokenizer, Default is
                        '256`.
  --embedding-model-max-size, -emax EMBEDDING_MODEL_MAX_SIZE
                        Maximum chunk size to use for the embedding chunk tokenizer, Default is
                        '4096`.
  --embedding-model-sentence-level, --no-embedding-model-sentence-level
                        whether or not the embedding model is a sentence level embedding model,
                        Default is 'False`.
  --tool-calling, --no-tool-calling
                        allows pixi to use built-in and/or plugin tools, tool calling can only be
                        used if the model supports them
  --tool-logging, --no-tool-logging
                        verbose logging for tool calls (enabled by default when running with
                        logging level DEBUG)
  --wiki-search, --no-wiki-search
                        allows pixi to search any mediawiki compatible Wiki
  --gif-search, --no-gif-search
                        allows pixi to search for gifs online, and send them in chat
  --image-support, --no-image-support
                        allows pixi to download and process image files
  --audio-support, --no-audio-support
                        allows pixi to download and process audio files
  --environment-whitelist, --no-environment-whitelist
                        whether or not the ids passed to environment ids are whitelisted or
                        blacklisted
  --environment-ids ENVIRONMENT_IDS [ENVIRONMENT_IDS ...]
                        add the id of the environment that the bot is or is not allowed to respond
                        in (space-separated). If not provided, the bot will respond everywhere.
  --database-names, -d DATABASE_NAMES [DATABASE_NAMES ...]
                        add the name of databases to use (space-separated).

Lisence

MIT

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

pixi_bot-1.1.2.tar.gz (46.7 kB view details)

Uploaded Source

Built Distribution

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

pixi_bot-1.1.2-py3-none-any.whl (56.4 kB view details)

Uploaded Python 3

File details

Details for the file pixi_bot-1.1.2.tar.gz.

File metadata

  • Download URL: pixi_bot-1.1.2.tar.gz
  • Upload date:
  • Size: 46.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pixi_bot-1.1.2.tar.gz
Algorithm Hash digest
SHA256 858a37ac84118071627361cc99b8a5b5bce9d0eb9f388bc4c3f8be233c05fa91
MD5 6a903ef718c772302e050607bdaa0a84
BLAKE2b-256 e29616b21ba6bd4148660cdf9f7408f9fdad440f821b7bdbe6fb63175c79982a

See more details on using hashes here.

File details

Details for the file pixi_bot-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: pixi_bot-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 56.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pixi_bot-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c5f1389926cf8b9d49def219a208b7352ffc7d082d2151be8ec0afb40afad560
MD5 ab83697c988d9a9b8e1592ca11729488
BLAKE2b-256 a0a9d9f6fccd8c5d87c210791c96d138390652018f116e89ebdf9b9bfcccd1ac

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