Spaces:
Runtime error
Runtime error
| # CTP Slack Bot | |
| ## _Modus Operandi_ in a Nutshell | |
| * Intelligently responds to Slack messages based on a repository of data. | |
| * Periodically checks for new content to add to its repository. | |
| ## Tech Stack | |
| * Hugging Face Spaces for hosting and serverless API | |
| * Google Drive for reference data (i.e., the material to be incorporated into the bot’s knowledge base) | |
| * MongoDB for data persistence | |
| * Docker for containerization | |
| * Python | |
| * FastAPI for serving HTTP requests | |
| * httpx for making HTTP requests | |
| * APScheduler for running periodic tasks in the background | |
| * See `pyproject.toml` for additional Python packages. | |
| ## General Project Structure | |
| * `src/` | |
| * `ctp_slack_bot/` | |
| * `api/`: FastAPI application structure | |
| * `routes.py`: API endpoint definitions | |
| * `core/`: fundamental components like configuration (using pydantic), logging setup (loguru), and custom exceptions | |
| * `db/`: database connection | |
| * `repositories/`: repository pattern implementation | |
| * `models/`: Pydantic models for data validation and serialization | |
| * `services/`: business logic | |
| * `tasks/`: background scheduled jobs | |
| * `utils/`: reusable utilities | |
| * `tests/`: unit tests | |
| * `scripts/`: utility scripts for development, deployment, etc. | |
| * `run-dev.sh`: script to run the application locally | |
| * `notebooks/`: Jupyter notebooks for exploration and model development | |
| * `.env`: local environment variables for development purposes (to be created for local use only from `.env.template`) | |
| * `Dockerfile`: Docker container build definition | |
| ## How to Run the Application | |
| ### Normally | |
| Just run the Docker image. 😉 | |
| Build it with: | |
| ```sh | |
| docker build . -t ctp-slack-bot | |
| ``` | |
| Run it with: | |
| ```sh | |
| docker run --env-file=.env -p 8000:8000 --name my-ctp-slack-bot-instance ctp-slack-bot | |
| ``` | |
| ### For Development | |
| Development usually requires rapid iteration. That means a change in the code ought to be reflected as soon as possible in the behavior of the application. | |
| First, make sure you are set up with a Python virtual environment created by the Python `venv` module and that it’s activated. Then install dependencies from `pyproject.toml` within the environment using: | |
| ```sh | |
| pip3 install -e . | |
| ``` | |
| Make a copy of `.env.template` as `.env` and define the environment variables. (You can also define them by other means, but this has the least friction.) This file should not be committed and is excluded by `.gitignore`! | |
| If `localhost` port `8000` is free, running the following will make the application available on that port: | |
| ```sh | |
| scripts/run-dev.sh | |
| ``` | |
| You can check that it’s reachable by visiting [http://localhost:8000/health](http://localhost:8000/health). | |
| ```text | |
| $ curl http://localhost:8000/health | |
| {"status":"healthy"} | |
| ``` | |
| In debug mode (`DEBUG=true`), [http://localhost:8000/env](http://localhost:8000/env) will pretty-print the non-sensitive environment variables as JSON. | |
| Uvicorn will restart the application automatically when any source files are changed. | |