Skip to main content

Kondoo 🦙

Kondoo is not just a chatbot; it is a framework for building autonomous digital minds. Its name is inspired by the word “condominium,” a system of independent dwellings that share the same structure. Similarly, Kondoo allows multiple bots to operate independently, each with its own personality and knowledge base, but sharing the same robust, containerized framework.

This project was born with a “self-hosted first” philosophy, giving you complete control over your data and the models you use, from a local tinyllama to cloud APIs such as Gemini.

Kondoo: Your knowledge, your rules, your assistants.


🚀 Key Features

  • Framework Agnostic: Not tied to a specific provider. Use an ANSWER_LLM_PROVIDER to choose your answer engine (Gemini, OpenAI, Ollama) and a KNOWLEDGE_PROVIDER for your embeddings (Ollama, local, OpenAI).
  • Containerized by Design: Built on Podman and compose, ensuring maximum portability and clean, repeatable deployment.
  • Self-Hosted First: Designed to run 100% locally, using Ollama for both embeddings and response generation, giving you full control and privacy.
  • Extensible: The src/ structure makes it an installable Python package, ready to be imported into larger projects.
  • Decoupled Identity: Separates the bot's identity (persona.yaml) from its behavioral rules (behavior.txt), allowing for scalable management of multiple bots with standardized service quality.

🏛️ Project Structure

Kondoo is structured as a Python framework, separating reusable code from implementation examples:

  • src/kondoo/: The source code for the kondoo framework (installable via pip).
  • example/example_bot/: A complete and functional example bot that shows how to use the framework. This is your starting point.
  • pyproject.toml: Defines the project and all its dependencies.
  • .env.example: A universal template with all available environment variables.

⚡ Quickstart Guide

Try Kondoo in 5 minutes using the sample bot.

1. Prerequisites

  • Podman and podman-compose.
  • Python 3.9+
  • Your own Ollama service (local or remote) or an API Key (e.g., Google Gemini).
  • SynapsIA to create the knowledge base.

2. Clone the Repository

git clone https://github.com/sysadminctl-services/kondoo.git
cd kondoo

3. Set Up the Example Bot

Copy the configuration template to the example bot directory:

cp .env.example example/example_bot/.env

Edit the .env file and fill in the variables. For a 100% local test with Ollama:

# example/example_bot/.env
ANSWER_LLM_PROVIDER=ollama_compatible
KNOWLEDGE_PROVIDER=ollama

LLM_MODEL_NAME="tinyllama"
LLM_BASE_URL="http://host.containers.internal:11434/v1"

EMBEDDING_MODEL_NAME="mxbai-embed-large"
OLLAMA_BASE_URL="http://host.containers.internal:11434"

BOT_PERSONA_FILE=/app/persona.yaml
BOT_BEHAVIOR_FILE=/app/behavior.txt

4. Create the Knowledge Base

Create the directories for the documents and the knowledge base:

cd example/example_bot
mkdir -p docs knowledge
  1. Define Identity: Edit persona.yaml to define the bot's name and role.

  2. Define Behavior: Edit behavior.txt to set the interaction rules.

  3. Create Documents: Add your source files to the docs/ folder.

echo "Kondoo is a RAG chatbot framework created by sysadminctl.services." > docs/info.txt
  1. Ingest Knowledge: Use the installed synapsia command:
synapsia --docs ./docs/ --knowledge ./knowledge/

5. Launch the Container

Return to the bot directory and run podman-compose:

# While in example/example_bot/
podman-compose up --build

6. Test the Bot

Open a new terminal and send a query using curl:

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"query": "What is Kondoo?"}' \
  http://localhost:5000/query

You should receive a JSON response generated by your local tinyllama.

7. Production Deployment

For production environments, the container uses Gunicorn as the WSGI server. This ensures better performance and stability under load compared to the Flask development server. 114:

7. Chat Mode (History)

To maintain a conversation history, add a session_id to your request:

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"query": "My name is Luis", "session_id": "user-123"}' \
  http://localhost:5000/query

The bot will remember context for that specific session ID (stored in RAM, resets on restart).

⚙️ Configuration (.env)

All configuration variables are documented in the .env.example file. Variables are loaded from .env in your bot's directory (e.g., example/example_bot/.env).

1. Provider Selection

These variables act as "switches" to choose which services to use.

  • ANSWER_LLM_PROVIDER: Choose your response (LLM) engine.
    • gemini: (Cloud) Google Gemini (requires LLM_API_KEY).
    • openai: (Cloud) OpenAI (requires LLM_API_KEY).
    • ollama_compatible: (Self-Hosted) Any OpenAI-compatible API, like Ollama (requires LLM_BASE_URL and LLM_MODEL_NAME).
  • KNOWLEDGE_PROVIDER: Choose your embeddings (knowledge) engine.
    • ollama: (Self-Hosted) Use an Ollama service (requires OLLAMA_BASE_URL and EMBEDDING_MODEL_NAME).
    • local: (Local) Use a HuggingFace model on the CPU/GPU (requires EMBEDDING_MODEL_NAME).
    • openai: (Cloud) Use OpenAI's embeddings API (requires LLM_API_KEY).

2. Provider-Specific Settings

These are the "control knobs" required by the providers you selected above.

Answer Engine (LLM) Settings

  • LLM_API_KEY:
    • Required by: gemini, openai.
    • Description: Your secret API key for the chosen cloud service.
  • LLM_MODEL_NAME:
    • Required by: gemini, openai, ollama_compatible.
    • Description: The specific model name to use for generating answers.
    • Examples: models/gemini-1.5-flash, gpt-4o, tinyllama.
  • LLM_BASE_URL:
    • Required by: ollama_compatible.
    • Description: The full base URL of your self-hosted LLM's OpenAI-compatible API.
    • Example (Ollama): http://host.containers.internal:11434/v1

Knowledge (Embedding) Settings

  • EMBEDDING_MODEL_NAME:
    • Required by: ollama, local, openai.
    • Description: The specific model name to use for embeddings.
    • Examples: mxbai-embed-large, nomic-embed-text.
  • OLLAMA_BASE_URL:
    • Required by: ollama (provider).
    • Description: The base URL of your Ollama service (the non-/v1 endpoint).
    • Example: http://host.containers.internal:11434


3. Fine Tuning

Customize the bot's creativity and retrieval precision.

  • LLM_TEMPERATURE:
    • Description: Controls the randomness of the model. 0.0 is deterministic (good for data extraction), 1.0 is creative.
    • Default: 0.1
  • RAG_TOP_K:
    • Description: Number of text chunks to retrieve from the knowledge base for each query.
    • Default: 2

4. Bot Configuration

These variables control the bot's identity and data paths.

  • BOT_PERSONA_FILE:
    • Description: Path to the YAML file defining the specific identity (Name, Role, Tone).
    • Default: /app/persona.yaml.
  • BOT_BEHAVIOR_FILE:
    • Description: Path to the TXT or Markdown file defining global interaction rules.
    • Default: /app/behavior.txt.
  • KNOWLEDGE_DIR:
    • Description: The path where the bot will load its knowledge base from.
    • Default: /app/knowledge.

⚖️ License

This project is licensed under the MIT License. See the LICENSE file for more details.

Metadata

Release files for kondoo 0.1.11

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

Source distribution (sdist)

Source distribution for kondoo 0.1.11
File Size Uploaded
kondoo-0.1.11.tar.gz 13.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for kondoo 0.1.11
File Interpreter ABI Platform
kondoo-0.1.11-py3-none-any.whl Python 3 none any Details

Total release size: 23.1 kB

Release files / kondoo-0.1.11.tar.gz

Download URL kondoo-0.1.11.tar.gz
Size 13.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b16c0ecdf960df1c9995bd229607eb3f43f398e68fb27f379a30d919686e5d62
BLAKE2b-256 checksum
How to use checksums
5fd9a4052e296e4003ce82ff024990d7297e7c5c81c5f39565c439a65eb7f678
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 20, 2025.

Transparency log

Release files / kondoo-0.1.11-py3-none-any.whl

Download URL kondoo-0.1.11-py3-none-any.whl
Size 10.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
39f20c3677df8824d826174df21536ed94b873c76bda3b69fd38ab88d09dcea8
BLAKE2b-256 checksum
How to use checksums
1165f18a3f703563691487d9ecce13ef5e212d3694d086bf5d514debea655b93
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 20, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.11 This release

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.2

2 release files

0.1.0

2 release files

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