add: API server(#422)
Add an example of api server so that devs can quickly get up a bot running along with its api
This commit is contained in:
committed by
GitHub
parent
d51c508b40
commit
a86deb2675
46
docs/examples/api_server.mdx
Normal file
46
docs/examples/api_server.mdx
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
title: '🌍 API Server'
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🐳 Docker Setup
|
||||||
|
|
||||||
|
- Open variables.env, and edit it to add your 🔑 `OPENAI_API_KEY`.
|
||||||
|
- To setup your api server using docker, run the following command inside this folder using your terminal.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up --build
|
||||||
|
```
|
||||||
|
|
||||||
|
📝 Note: The build command might take a while to install all the packages depending on your system resources.
|
||||||
|
|
||||||
|
### 🚀 Usage Instructions
|
||||||
|
|
||||||
|
- Your api server is running on [http://localhost:5000/](http://localhost:5000/)
|
||||||
|
- To use the api server, make an api call to the endpoints `/add` and `/query` using the json formats discussed below.
|
||||||
|
- To add data sources to the bot:
|
||||||
|
```json
|
||||||
|
// Request
|
||||||
|
{
|
||||||
|
"data_type": "your_data_type_here",
|
||||||
|
"url_or_text": "your_url_or_text_here"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Response
|
||||||
|
{
|
||||||
|
"data": "Added data_type: url_or_text"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- To ask questions from the bot:
|
||||||
|
```json
|
||||||
|
// Request
|
||||||
|
{
|
||||||
|
"question": "your_question_here"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Response
|
||||||
|
{
|
||||||
|
"data": "your_answer_here"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
🎉 Happy Chatting! 🎉
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group": "Examples",
|
"group": "Examples",
|
||||||
"pages": ["examples/full_stack"]
|
"pages": ["examples/full_stack", "examples/api_server"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group": "Contribution Guidelines",
|
"group": "Contribution Guidelines",
|
||||||
|
|||||||
8
examples/api_server/.dockerignore
Normal file
8
examples/api_server/.dockerignore
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
__pycache__/
|
||||||
|
database
|
||||||
|
db
|
||||||
|
pyenv
|
||||||
|
venv
|
||||||
|
.env
|
||||||
|
.git
|
||||||
|
trash_files/
|
||||||
8
examples/api_server/.gitignore
vendored
Normal file
8
examples/api_server/.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
__pycache__
|
||||||
|
db
|
||||||
|
database
|
||||||
|
pyenv
|
||||||
|
venv
|
||||||
|
.env
|
||||||
|
trash_files/
|
||||||
|
.ideas.md
|
||||||
11
examples/api_server/Dockerfile
Normal file
11
examples/api_server/Dockerfile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
FROM python:3.11 AS backend
|
||||||
|
|
||||||
|
WORKDIR /usr/src/api
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip install -r requirements.txt
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
EXPOSE 5000
|
||||||
|
|
||||||
|
CMD ["python", "api_server.py"]
|
||||||
42
examples/api_server/api_server.py
Normal file
42
examples/api_server/api_server.py
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
from flask import Flask, jsonify, request
|
||||||
|
|
||||||
|
from embedchain import App
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def initialize_chat_bot():
|
||||||
|
global chat_bot
|
||||||
|
chat_bot = App()
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/add", methods=["POST"])
|
||||||
|
def add():
|
||||||
|
data = request.get_json()
|
||||||
|
data_type = data.get("data_type")
|
||||||
|
url_or_text = data.get("url_or_text")
|
||||||
|
if data_type and url_or_text:
|
||||||
|
try:
|
||||||
|
chat_bot.add(data_type, url_or_text)
|
||||||
|
return jsonify({"data": f"Added {data_type}: {url_or_text}"}), 200
|
||||||
|
except Exception:
|
||||||
|
return jsonify({"error": f"Failed to add {data_type}: {url_or_text}"}), 500
|
||||||
|
return jsonify({"error": "Invalid request. Please provide 'data_type' and 'url_or_text' in JSON format."}), 400
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/query", methods=["POST"])
|
||||||
|
def query():
|
||||||
|
data = request.get_json()
|
||||||
|
question = data.get("question")
|
||||||
|
if question:
|
||||||
|
try:
|
||||||
|
response = chat_bot.chat(question)
|
||||||
|
return jsonify({"data": response}), 200
|
||||||
|
except Exception:
|
||||||
|
return jsonify({"error": "An error occurred. Please try again!"}), 500
|
||||||
|
return jsonify({"error": "Invalid request. Please provide 'question' in JSON format."}), 400
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
initialize_chat_bot()
|
||||||
|
app.run(host="0.0.0.0", port=5000, debug=False)
|
||||||
13
examples/api_server/docker-compose.yml
Normal file
13
examples/api_server/docker-compose.yml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
backend:
|
||||||
|
container_name: embedchain_api
|
||||||
|
restart: unless-stopped
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
env_file:
|
||||||
|
- variables.env
|
||||||
|
ports:
|
||||||
|
- "5000:5000"
|
||||||
2
examples/api_server/requirements.txt
Normal file
2
examples/api_server/requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
flask==2.3.2
|
||||||
|
embedchain==0.0.30
|
||||||
1
examples/api_server/variables.env
Normal file
1
examples/api_server/variables.env
Normal file
@@ -0,0 +1 @@
|
|||||||
|
OPENAI_API_KEY=""
|
||||||
Reference in New Issue
Block a user