cevheri's picture
chore: remove unused files
1c97791
---
title: OpenAI compatible Chatbot API
emoji: 🀯
colorFrom: pink
colorTo: yellow
sdk: docker
pinned: false
short_description: OpenAI compatible Chatbot API
---
# OpenAI Compatible Chatbot API Template
## Overview
A FastAPI based OpenAI compatible Secure and Scalable Chatbot API with Visualization.
OpenAPI/Swagger Standard Compliant. Python best-practices. API, Service, Repository Pattern.
## πŸ”— Links
* [Github URL - https://github.com/lokumai/openai-openapi-template](https://github.com/lokumai/openai-openapi-template)
* [HF SPACE URL - https://huggingface.co/spaces/lokumai/openai-openapi-template](https://huggingface.co/spaces/lokumai/openai-openapi-template)
* [SwaggerUI - http://127.0.0.1:7860/docs](http://127.0.0.1:7860/docs)
* [Redoc - http://127.0.0.1:7860/docs](http://127.0.0.1:7860/redoc)
* [OpenAPI - http://127.0.0.1:7860/docs](http://127.0.0.1:7860/openapi.json)
* [Gradio UI - http://127.0.0.1:7860/ui](http://127.0.0.1:7860/ui)
## πŸš€ Features
- OpenAI compatible API
- /v1/chat/completions
- Complete mock implementation with DATABASE_TYPE environment variable
- Secure API key generation with HMAC signatures and API key authentication
- In-memory storage for chat history and plots for mock implementation
- MongoDB storage for chat history and plots for production
- Support for all major OpenAI API endpoints
- Gradio UI for testing the chatbot
## πŸ“‹ Endpoints
- POST - `/chat/completions` create a new chat completion - when user starts a new chat
- GET - `/chat/completions/{completion_id}` get a stored chat completion with all messages and plots by completion_id - when user clicks on a chat on the list
- GET - `/chat/completions/{completion_id}/messages/{message_id}/plots` get the plots/graph-data/figure-json in a stored chat completion by completion_id and message_id
- GET - `/conversation` get all conversations
- GET - `/conversation/{completion_id}` get a conversation by completion_id
## πŸ› οΈ Installation
1. Clone the repository:
```bash
git clone https://github.com/lokumai/openai-openapi-template.git
```
2. Create a .env file in the root directory and add the following variables:
```bash
cp .env.example .env
```
* Set your own values for the variables in the .env file.
3. Install dependencies:
```bash
uv sync
```
4. Start MongoDB:
```bash
docker compose -f docker/mongodb-docker-compose.yaml up -d
```
5. Run API and Gradio UI on your local machine:
```bash
./run.sh
# or
uv run uvicorn main:app --host 0.0.0.0 --port 7860 --reload
```
## Usage
### πŸ”‘ API Key Generation
```bash
./scripts/generate_api_key.sh <username> <secret_key>
```
* This will generate a API_KEY and save it to the api_key.txt file.
```plaintext
API Key generated:
Username: template
API Key: sk-template-token
API Key saved to api_key.txt
```
## πŸ”’ Security Configuration
There are various security configurations that can be set in the .env file for development and production environments.
- `SECURITY_ENABLED=True` or `False`, If security is enabled, the API will require an API_KEY to be provided in the request header.
- `SECURITY_DEFAULT_USERNAME=admin`, If security is disabled, the API will not require an API_KEY to be provided in the request header and will use this for current user.
- `SECURITY_SECRET_KEY=your-secret-key-here`, This is the secret key for the API_KEY generation. It is used to generate and verify the API_KEY for the user.
- `API_KEY`, If you want to use the Gradio UI, you can set the API_KEY in the .env file. GradioUI will use the API_KEY to make requests to the API. Especially `POST/chat/completions` endpoint.
### πŸ”‘ API Key Authentication
```bash
curl -X POST "http://localhost:7860/v1/chat/completions" \
-H "Authorization: Bearer sk-template-token" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "Hello!"}]}'
```
## πŸ’Ύ Embedded MongoDB for local machine development
* `database_type` environment variable is set to `embedded`, the API will use embedded MongoDB for local machine development. Default is `mongodb`.
* `mongodb_host` environment variable is set to `localhost`, the API will use localhost for MongoDB. Default is `localhost`.
* `mongodb_port` environment variable is set to `27017`, the API will use 27017 for MongoDB. Default is `27017`.
* `mongodb_database` environment variable is set to `openai_openapi_template`, the API will use openai_openapi_template for MongoDB. Default is `openai_openapi_template`.
## 🀝 Contributing Attention Please!!!
When you make changes to the code, please run the following commands to ensure the code is running on your local machine and formatted and linted correctly.
* Fork the repository
```bash
git clone https://github.com/yourname/openai-openapi-template.git
```
* cd to the project directory
```bash
cd openai-openapi-template
```
* Create a new branch
```bash
git checkout -b feature/new-feature
# or
git checkout -b bug/fix-issue
# or
git checkout -b hotfix/critical-fix
```
* Make your changes and commit them
```bash
git status
git add .
git commit -m "Add new feature"
```
* Push your changes to the branch
```bash
git push origin feature/new-feature
```
* Merge from main branch to your branch
```bash
git fetch origin main
git merge origin/main
```
* Validate the code is running on your local machine
```bash
uv run uvicorn app:app --reload
```
* Format and lint the code
```bash
ruff check --fix
```
```bash
ruff format
```
* Everything is working, create a pull request
```bash
git push origin feature/new-feature
```
* Create a pull request
```bash
gh pr create --base main --head feature/new-feature --title "Add new feature" --body "This PR adds a new feature to the project"
```