/ChatGPT-API-server

API server for ChatGPT

Primary LanguageGoMIT LicenseMIT

ChatGPT API Server

Release Go Binaries

Quickstart

Setup

  1. Install Go
  2. go install github.com/ChatGPT-Hackers/ChatGPT-API-server@latest

If the latest commit fails, try using one of the release binaries

Build

  1. git clone https://github.com/ChatGPT-Hackers/ChatGPT-API-server/
  2. cd ChatGPT-API-server
  3. go install .

Usage

ChatGPT-API-server <port> <API_KEY>

The admin key can be anything you want. It's just for authenticating yourself.

Connect agents

Take note of your IP address or domain name. This could be localhost or a remote IP address. The default port is 8080

Check out our firefox agent. More versions in the works.

There is also a Python based client by @ahmetkca (WIP)

Usage

Quickstart

(After connecting agents)

 $ curl "http://localhost:8080/api/ask" -X POST --header 'Authorization: <API_KEY>' -d '{"content": "Hello world", "conversation_id": "<optional>", "parent_id": "<optional>"}'

Note: if you want to use conversation_id, you also need to use parent_id!

Routes

	router.GET("/client/register", handlers.Client_register) // Used by agent
	router.POST("/api/ask", handlers.API_ask) // For making ChatGPT requests
	router.GET("/api/connections", handlers.API_getConnections) // For debugging
	router.POST("/admin/users/add", handlers.Admin_userAdd) // Adds an API token
	router.POST("/admin/users/delete", handlers.Admin_userDel) // Invalidates a token (based on user_id)
	router.GET("/admin/users", handlers.Admin_usersGet) // Get all users

Parameters for each route

/client/register (GET)

N/A. Used for websocket

/api/ask (POST)

Headers: Authorization: <USER_TOKEN>

The user token can be set by the admin via /admin/users/add. You can also use the api key as the token. Both work by default

Data:

{
  "content": "Hello world",
  "conversation_id": "<optional>",
  "parent_id": "<optional>"
}

Do not enter conversation or parent id if not available. If you want to use either of these, you need to specify both! i.e. request.parent_id=response.response_id and request.conversation_id=response.conversation_id

Response:

{
  "id": "",
  "response_id": "<UUID>",
  "conversation_id": "<UUID>",
  "content": "<string>",
  "error": ""
}

/api/connections (GET)

Headers: None

Data: None

Response:

{
  "connections": [
    {
      "Ws": {},
      "Id": "<UUID>",
      "Heartbeat": "<Time string>",
      "LastMessageTime": "<Time string>"
    }
  ]
}

/admin/users/add (POST)

Headers: None

Data:

{
  "admin_key": "<string>"
}

Response:

{
  "user_id": "<UUID>",
  "token": "<UUID>"
}

/admin/users/delete (POST)

Headers: None

Data:

{
  "admin_key": "<string>",
  "user_id": "<UUID>"
}

Response:

{ "message": "User deleted" }

/admin/users (GET)

Parameters: ?admin_key=<string>

Example usage: curl "http://localhost:8080/admin/users?admin_key=some_random_key"

Response:

{
  "users": [
    {
      "user_id": "<UUID>",
      "token": "<UUID>"
    },
    {
      "user_id": "<UUID>",
      "token": "<UUID>"
    },
    {
      "user_id": "<UUID>",
      "token": "<UUID>"
    },
    {
      "user_id": "<UUID>",
      "token": "<UUID>"
    },
    ...
  ]
}

Docker

open docker-compose.yml and add your own custom api-key in <API_KEY> section

version: "3"

services:
  chatgpt-api-server:
    build: .
    ports:
      - "8080:8080"
    command: ["ChatGPT-API-server", "8080", "<API_KEY>", "-listen", "0.0.0.0"]

then run:

docker-compose up or docker-compose up -d (if you want a persistent instance)