# OpenWebUI Bot Integration This project integrates the [Open WebUI bot](https://github.com/open-webui/bot) to provide AI responses in OpenWebUI channels. ## Overview The bot connects to OpenWebUI via WebSocket and listens for messages in channels. When a message mentions the AI (using trigger words like `@ai`), the bot processes the message and sends a response back to the channel. ## Integration with AI Service The bot is integrated with the AI service and starts automatically when the service starts (if `BOT_ENABLED=true` in the `.env` file). You don't need to run the bot separately unless you want to test it independently. ## Configuration The bot is configured using the following environment variables in the `.env` file: ``` # OpenWebUI configuration OPENWEBUI_URL=http://your-openwebui-url:8080 OPENWEBUI_API_KEY=your-openwebui-api-key # Model configuration DEFAULT_MODEL=llama3.1 # Bot configuration BOT_ENABLED=true # Set to 'true' to enable the bot, 'false' to disable it BOT_SYSTEM_PROMPT="You are a helpful AI assistant." # System prompt for the bot BOT_TEMPERATURE=0.7 # Temperature for response generation (0.0 to 1.0) BOT_MAX_TOKENS=2048 # Maximum number of tokens to generate BOT_TOP_P=0.9 # Top-p sampling parameter (0.0 to 1.0) BOT_TRIGGERS=@ai,@bot,@assistant,@chatbot # Comma-separated list of triggers that will make the bot respond BOT_RESPOND_TO_ALL=false # Set to 'true' to make the bot respond to all messages, 'false' to only respond to mentions ``` These settings control how the bot behaves: - `BOT_SYSTEM_PROMPT`: The system prompt that sets the bot's personality and behavior - `BOT_TEMPERATURE`: Controls the randomness of the responses (higher values = more random) - `BOT_MAX_TOKENS`: Maximum length of the generated responses - `BOT_TOP_P`: Controls the diversity of the responses (higher values = more diverse) - `BOT_TRIGGERS`: Words that will trigger the bot to respond (e.g., `@ai`) - `BOT_RESPOND_TO_ALL`: If true, the bot will respond to all messages, not just those with triggers ## Bot API Endpoints The AI service provides the following endpoints to manage the bot: - `GET /bot/status`: Get the status and configuration of the bot - `POST /bot/start`: Start the bot with optional configuration parameters: - `model_id`: ID of the model to use (e.g., "llama3.1") - `system_prompt`: System prompt for the bot - `temperature`: Temperature for response generation (0.0 to 1.0) - `max_tokens`: Maximum number of tokens to generate - `top_p`: Top-p sampling parameter (0.0 to 1.0) - `respond_to_all`: Whether to respond to all messages (true/false) - `POST /bot/stop`: Stop the bot if it's running You can also check the bot status and configuration in the configuration endpoint: - `GET /config`: Get the current configuration, including detailed bot status and settings ### Examples Start the bot with default settings: ```bash curl -X POST http://localhost:5252/bot/start ``` Start the bot with custom settings: ```bash curl -X POST http://localhost:5252/bot/start \ -H "Content-Type: application/json" \ -d '{ "model_id": "gemma3", "system_prompt": "You are a friendly and helpful AI assistant.", "temperature": 0.8, "max_tokens": 1024, "top_p": 0.95, "respond_to_all": false }' ``` Get the bot status: ```bash curl http://localhost:5252/bot/status ``` Stop the bot: ```bash curl -X POST http://localhost:5252/bot/stop ``` ## Running the Bot Separately If you want to run the bot separately from the AI service, you can use the provided scripts: ### 1. Using the Original AI Example ```bash ./run_openwebui_bot.py ``` This runs the original AI example from the Open WebUI bot repository. ### 2. Using Our Custom AI Bot ```bash ./run_custom_bot.py ``` This runs our custom AI bot implementation, which includes additional features like: - Responding only to messages that mention the bot (using trigger words like `@ai`) - Adding a robot emoji (🤖) to responses - Better error handling - Longer timeout for API calls ## How It Works The bot uses WebSockets to maintain a persistent connection to OpenWebUI and receive real-time events. When a message is received in a channel, the bot checks if it mentions the AI. If it does, the bot processes the message and sends a response back to the channel. The bot uses the OpenAI-compatible API provided by OpenWebUI to generate responses to messages. ## Troubleshooting If the bot is not responding to messages, check the following: 1. Make sure the OpenWebUI URL and API key are correct in the `.env` file 2. Verify that the bot is connected to OpenWebUI by checking the logs 3. Make sure you're using one of the trigger words in your messages (e.g., `@ai`) 4. Check that the model ID is correct and available in your OpenWebUI instance ## Differences from Webhook Approach This bot uses WebSockets to connect to OpenWebUI, which is different from the webhook approach used in the previous implementation. The main differences are: 1. **WebSockets**: The bot maintains a persistent connection to OpenWebUI and receives real-time events. 2. **Webhooks**: The previous implementation used webhooks, where OpenWebUI sends HTTP requests to your service when messages are posted in channels. The WebSocket approach is more efficient for real-time communication and doesn't require your service to be publicly accessible.