A Stack for managing OpenAI API access using Serverless Framework against AWS. This is useful for exposing your custom OpenAI API usage to the public or run experiments.
- JWT Authentication (multi-user support)
- Usage counting and segregation for each JWT user (In Progress)
- Improved Answers Endpoint (
/better_answers
) - File uploads via S3
- Queued file uploads (Planned)
- NodeJS LTS
- yarn
- pyenv
- Pipenv
- make
- Docker (for building dependencies during deployment)
# install serverless dependencies
yarn install
# install python dependencies
pipenv install
Please check .env.example
. Copy to .env
and add the OpenAI API Key.
Run make create-jwt
to create the JWK for signing. Put that in to .env
.
Run make sign-jwt user="<username>"
to get a signed JWT for requests.
make local args="--stage dev"
First make sure we have the right AWS profile set up, it is best to inject keys via AWS_PROFILE
env var. (Put into .env
is fine).
make deploy
For example, with /better_answers
:
curl --request POST \
--url http://localhost:3000/dev/better_answers \
--header 'Authorization: jwt <jwt_token>' \
--header 'Content-Type: application/json' \
--data '{
"file": "file-xxxx",
"question": "Can I update my User ID?",
"temperature": 0,
"search_model": "babbage",
"model": "davinci-instruct-beta-v3",
"examples_context": "In 2017, U.S. life expectancy was 78.6 years.",
"examples": [["What is human life expectancy in the United States?","78 years."]],
"max_tokens": 32,
"max_rerank": 50,
"z_threshold": 1,
"stop": ["\n", "===", "<|endoftext|>"]
}'
TODO