mirror of
https://github.com/open-webui/bot
synced 2025-05-12 08:31:22 +00:00
refac
This commit is contained in:
parent
e0efa290d6
commit
7f356751bb
13
README.md
13
README.md
@ -7,6 +7,19 @@ This repository provides an experimental boilerplate for building bots compatibl
|
|||||||
- **Extensible Framework**: Designed as a foundation for further development, with plans to enhance APIs, developer tooling, and usability.
|
- **Extensible Framework**: Designed as a foundation for further development, with plans to enhance APIs, developer tooling, and usability.
|
||||||
- **Asynchronous Communication**: Leverages Open WebUI Channels for event-driven workflows.
|
- **Asynchronous Communication**: Leverages Open WebUI Channels for event-driven workflows.
|
||||||
|
|
||||||
|
## 🛠️ Getting Started with Examples
|
||||||
|
This repository includes an `/examples` folder containing runnable example bots that demonstrate basic functionality.
|
||||||
|
|
||||||
|
To run an example, execute the corresponding module using the `-m` flag in Python. For example, to run the `ollama` example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python -m examples.ollama
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Note**: Ensure that your current working directory (PWD) is the root of this repository when running examples, as this is required for proper execution.
|
||||||
|
|
||||||
|
Replace `ollama` in the command above with the specific example you’d like to execute from the `/examples` folder.
|
||||||
|
|
||||||
## 🚧 Disclaimer
|
## 🚧 Disclaimer
|
||||||
This project is an early-stage proof of concept. **APIs will break** and existing functionality may change as Open WebUI evolves to include native bot support. This repository is not production-ready and primarily serves experimental and exploratory purposes.
|
This project is an early-stage proof of concept. **APIs will break** and existing functionality may change as Open WebUI evolves to include native bot support. This repository is not production-ready and primarily serves experimental and exploratory purposes.
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ import os
|
|||||||
try:
|
try:
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
load_dotenv("../.env")
|
load_dotenv()
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print("dotenv not installed, skipping...")
|
print("dotenv not installed, skipping...")
|
||||||
|
|
61
main.py
Normal file
61
main.py
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import asyncio
|
||||||
|
import socketio
|
||||||
|
from env import WEBUI_URL, TOKEN
|
||||||
|
from utils import send_message, send_typing
|
||||||
|
|
||||||
|
# Create an asynchronous Socket.IO client instance
|
||||||
|
sio = socketio.AsyncClient(logger=False, engineio_logger=False)
|
||||||
|
|
||||||
|
|
||||||
|
# Event handlers
|
||||||
|
@sio.event
|
||||||
|
async def connect():
|
||||||
|
print("Connected!")
|
||||||
|
|
||||||
|
|
||||||
|
@sio.event
|
||||||
|
async def disconnect():
|
||||||
|
print("Disconnected from the server!")
|
||||||
|
|
||||||
|
|
||||||
|
# Define a function to handle channel events
|
||||||
|
def events(user_id):
|
||||||
|
@sio.on("channel-events")
|
||||||
|
async def channel_events(data):
|
||||||
|
if data["user"]["id"] == user_id:
|
||||||
|
# Ignore events from the bot itself
|
||||||
|
return
|
||||||
|
|
||||||
|
if data["data"]["type"] == "message":
|
||||||
|
print(f'{data["user"]["name"]}: {data["data"]["data"]["content"]}')
|
||||||
|
await send_typing(sio, data["channel_id"])
|
||||||
|
await asyncio.sleep(1) # Simulate a delay
|
||||||
|
await send_message(data["channel_id"], "Pong!")
|
||||||
|
|
||||||
|
|
||||||
|
# Define an async function for the main workflow
|
||||||
|
async def main():
|
||||||
|
try:
|
||||||
|
print(f"Connecting to {WEBUI_URL}...")
|
||||||
|
await sio.connect(
|
||||||
|
WEBUI_URL, socketio_path="/ws/socket.io", transports=["websocket"]
|
||||||
|
)
|
||||||
|
print("Connection established!")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Failed to connect: {e}")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Callback function for user-join
|
||||||
|
async def join_callback(data):
|
||||||
|
events(data["id"]) # Attach the event handlers dynamically
|
||||||
|
|
||||||
|
# Authenticate with the server
|
||||||
|
await sio.emit("user-join", {"auth": {"token": TOKEN}}, callback=join_callback)
|
||||||
|
|
||||||
|
# Wait indefinitely to keep the connection open
|
||||||
|
await sio.wait()
|
||||||
|
|
||||||
|
|
||||||
|
# Actually run the async `main` function using `asyncio`
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(main())
|
Loading…
Reference in New Issue
Block a user