Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/janlay/openai-cloudflare

An OpenAI API proxy running with Cloudflare worker.
https://github.com/janlay/openai-cloudflare

Last synced: 3 months ago
JSON representation

An OpenAI API proxy running with Cloudflare worker.

Awesome Lists containing this project

README

        

# openai-cloudflare
An OpenAI API proxy running with Cloudflare worker.

# Features
- [x] Support all APIs provided by OpenAI
- [x] Fully compliant with the format requirements of OpenAI's API payload and key
- [x] Works with mainstream OpenAI/ChatGPT GUI apps
- [x] Streaming content
- [x] Uniq key for users
- [x] Create / delete users
- [x] Reset user's key
- [ ] User can reset the key independently
- [ ] Time-limited
- [ ] Stats for usage

# Setup
## 1. Prepare your domain name
- Please make sure that the nameservers of your domain is set to the nameservers provided by Cloudflare first. [Manual](https://developers.cloudflare.com/dns/zone-setups/full-setup/setup/)

## 2. Create a new service
1. Log in to your [Cloudflare Dashboard](https://dash.cloudflare.com/) and navigate to the Workers section.
2. Click on the "Create a Service" button.
3. Input the Service name.
4. Keep the "Select a starter" as "Default handler".
5. Click on the "Create" button

Now you have the new service created and it shows you the detail of the service.

## 3. Configure the newly created service - Trigger
1. Click "Triggers" on the tab bar.
2. Click "Add Custom Domain" button.
3. Input the domain you want to use, such as `gpt.mydomainname.com`. Don't worry, Cloudflare can automatically configure the proper DNS settings for this.
4. Click "Add Custom Domain" button to finish the Triggers setting.

Don't leave the detail page and go on.

## 4. Configure the newly created service - Environment Variables
1. Click "Settings" on the tab bar.
2. Click "Variables" from the right part.
3. In "Environment Variables", Click "Add Variable" button.
4. Input two important items. **Enable "Encrypt" because they are sensitive**.
- Key: `OPENAPI_API_KEY`, value is your own OpenAPI key.
- Key `ACCESS_TOKEN`, value is any random string like a password.
Again, both of these pieces of information are very sensitive, so it is strongly recommended to turn on the "Encrypt" option. This way, after you save them, no one will be able to see their values again.

## 5. Configure the newly created service - KV Storage
1. Expand "Workers" in right sidebar.
2. Click "KV".
3. In "Workers KV", Click "Create a namespace" button.
4. Input new name for the namespace, such as `namespace_gpt`.
5. Click "Add" button.
6. Go back to the detail page of the new created service.
7. Go to step 3 of above section, enter "Environment Variables" and scroll down the page.
8. In "KV Namespace Bindings" section, Click "Add binding" button.
9. Input `KV` (UPPERCASE) in the left, and choose new KV namespace created in step 4.
10. Click "Save and deploy" button.

## 6. Configure the newly created service - Code
1. Open the [raw code of worker.js](https://raw.githubusercontent.com/janlay/openai-cloudflare/master/worker.js).
2. Copy all of the code.
3. Go back to the detail page of the new created service.
4. Click "Quick edit" button at the top right.
5. Replace all code with content of pasteboard.
6. Click "Save and deploy".

Around one minute later, the new serivce should serve.

# Manage
Here assume your domain name is `gpt.mydomainname.com` and the Admin's password (`ACCESS_TOKEN`) is `Une9f2ijwe`

| Task | command |
| ------------- | ------------- |
| Create new user with name `janlay` | `curl https://gpt.mydomainname.com/Une9f2ijwe/register/janlay` |
| Reset user `janlay`'s key | `curl https://gpt.mydomainname.com/Une9f2ijwe/reset/janlay` |

Both of these commands output the user's Key. Please be aware that this key always starts with `sk-cfw` and may look like a valid OpenAI Key, but it can only be used for this service.

If you want to delete a user, try this:
```bash
curl -X DELETE https://gpt.mydomainname.com/Une9f2ijwe/janlay
```
It's ok if you see "OK".

# Use the service
Here assume your domain name is `gpt.mydomainname.com`.

Users can invoke a standard OpenAI API request guided by its document. The only changes would be:
- The target URL is `https://gpt.mydomainname.com/v1/chat/completions` instead of `https://api.openai.com/v1/chat/completions`
- The HTTP Header `Authorization` and its value should be `Bearer sk-cfw****`, which is generated by above command.

Have fun!

# LICENSE
This project uses the MIT license. Please see [LICENSE](https://github.com/janlay/openai-cloudflare/blob/master/LICENSE) for more information.