Pārlūkot izejas kodu

add: API server(#422)

Add an example of api server so that devs can quickly get up a bot running along with its api
Sahil Kumar Yadav 2 gadi atpakaļ
vecāks
revīzija
a86deb2675

+ 46 - 0
docs/examples/api_server.mdx

@@ -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! 🎉

+ 1 - 1
docs/mint.json

@@ -36,7 +36,7 @@
     },
     {
       "group": "Examples",
-      "pages": ["examples/full_stack"]
+      "pages": ["examples/full_stack", "examples/api_server"]
     },
     {
       "group": "Contribution Guidelines",

+ 8 - 0
examples/api_server/.dockerignore

@@ -0,0 +1,8 @@
+__pycache__/
+database
+db
+pyenv
+venv
+.env
+.git
+trash_files/

+ 8 - 0
examples/api_server/.gitignore

@@ -0,0 +1,8 @@
+__pycache__
+db
+database
+pyenv
+venv
+.env
+trash_files/
+.ideas.md

+ 11 - 0
examples/api_server/Dockerfile

@@ -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 - 0
examples/api_server/api_server.py

@@ -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 - 0
examples/api_server/docker-compose.yml

@@ -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 - 0
examples/api_server/requirements.txt

@@ -0,0 +1,2 @@
+flask==2.3.2
+embedchain==0.0.30

+ 1 - 0
examples/api_server/variables.env

@@ -0,0 +1 @@
+OPENAI_API_KEY=""