You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

339 lines
13 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

Metadata-Version: 2.1
Name: openai
Version: 0.27.2
Summary: Python client library for the OpenAI API
Home-page: https://github.com/openai/openai-python
Author: OpenAI
Author-email: support@openai.com
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7.1
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests (>=2.20)
Requires-Dist: tqdm
Requires-Dist: aiohttp
Requires-Dist: typing-extensions ; python_version < "3.8"
Provides-Extra: datalib
Requires-Dist: numpy ; extra == 'datalib'
Requires-Dist: pandas (>=1.2.3) ; extra == 'datalib'
Requires-Dist: pandas-stubs (>=1.1.0.11) ; extra == 'datalib'
Requires-Dist: openpyxl (>=3.0.7) ; extra == 'datalib'
Provides-Extra: dev
Requires-Dist: black (~=21.6b0) ; extra == 'dev'
Requires-Dist: pytest (==6.*) ; extra == 'dev'
Requires-Dist: pytest-asyncio ; extra == 'dev'
Requires-Dist: pytest-mock ; extra == 'dev'
Provides-Extra: embeddings
Requires-Dist: scikit-learn (>=1.0.2) ; extra == 'embeddings'
Requires-Dist: tenacity (>=8.0.1) ; extra == 'embeddings'
Requires-Dist: matplotlib ; extra == 'embeddings'
Requires-Dist: plotly ; extra == 'embeddings'
Requires-Dist: numpy ; extra == 'embeddings'
Requires-Dist: scipy ; extra == 'embeddings'
Requires-Dist: pandas (>=1.2.3) ; extra == 'embeddings'
Requires-Dist: pandas-stubs (>=1.1.0.11) ; extra == 'embeddings'
Requires-Dist: openpyxl (>=3.0.7) ; extra == 'embeddings'
Provides-Extra: wandb
Requires-Dist: wandb ; extra == 'wandb'
Requires-Dist: numpy ; extra == 'wandb'
Requires-Dist: pandas (>=1.2.3) ; extra == 'wandb'
Requires-Dist: pandas-stubs (>=1.1.0.11) ; extra == 'wandb'
Requires-Dist: openpyxl (>=3.0.7) ; extra == 'wandb'
# OpenAI Python Library
The OpenAI Python library provides convenient access to the OpenAI API
from applications written in the Python language. It includes a
pre-defined set of classes for API resources that initialize
themselves dynamically from API responses which makes it compatible
with a wide range of versions of the OpenAI API.
You can find usage examples for the OpenAI Python library in our [API reference](https://beta.openai.com/docs/api-reference?lang=python) and the [OpenAI Cookbook](https://github.com/openai/openai-cookbook/).
## Installation
You don't need this source code unless you want to modify the package. If you just
want to use the package, just run:
```sh
pip install --upgrade openai
```
Install from source with:
```sh
python setup.py install
```
### Optional dependencies
Install dependencies for [`openai.embeddings_utils`](openai/embeddings_utils.py):
```sh
pip install openai[embeddings]
```
Install support for [Weights & Biases](https://wandb.me/openai-docs):
```
pip install openai[wandb]
```
Data libraries like `numpy` and `pandas` are not installed by default due to their size. Theyre needed for some functionality of this library, but generally not for talking to the API. If you encounter a `MissingDependencyError`, install them with:
```sh
pip install openai[datalib]
````
## Usage
The library needs to be configured with your account's secret key which is available on the [website](https://platform.openai.com/account/api-keys). Either set it as the `OPENAI_API_KEY` environment variable before using the library:
```bash
export OPENAI_API_KEY='sk-...'
```
Or set `openai.api_key` to its value:
```python
import openai
openai.api_key = "sk-..."
# list models
models = openai.Model.list()
# print the first model's id
print(models.data[0].id)
# create a completion
completion = openai.Completion.create(model="ada", prompt="Hello world")
# print the completion
print(completion.choices[0].text)
```
### Params
All endpoints have a `.create` method that supports a `request_timeout` param. This param takes a `Union[float, Tuple[float, float]]` and will raise an `openai.error.TimeoutError` error if the request exceeds that time in seconds (See: https://requests.readthedocs.io/en/latest/user/quickstart/#timeouts).
### Microsoft Azure Endpoints
In order to use the library with Microsoft Azure endpoints, you need to set the `api_type`, `api_base` and `api_version` in addition to the `api_key`. The `api_type` must be set to 'azure' and the others correspond to the properties of your endpoint.
In addition, the deployment name must be passed as the engine parameter.
```python
import openai
openai.api_type = "azure"
openai.api_key = "..."
openai.api_base = "https://example-endpoint.openai.azure.com"
openai.api_version = "2022-12-01"
# create a completion
completion = openai.Completion.create(engine="deployment-name", prompt="Hello world")
# print the completion
print(completion.choices[0].text)
```
Please note that for the moment, the Microsoft Azure endpoints can only be used for completion, embedding, and fine-tuning operations.
For a detailed example of how to use fine-tuning and other operations using Azure endpoints, please check out the following Jupyter notebooks:
* [Using Azure completions](https://github.com/openai/openai-cookbook/tree/main/examples/azure/completions.ipynb)
* [Using Azure fine-tuning](https://github.com/openai/openai-cookbook/tree/main/examples/azure/finetuning.ipynb)
* [Using Azure embeddings](https://github.com/openai/openai-cookbook/blob/main/examples/azure/embeddings.ipynb)
### Microsoft Azure Active Directory Authentication
In order to use Microsoft Active Directory to authenticate to your Azure endpoint, you need to set the `api_type` to "azure_ad" and pass the acquired credential token to `api_key`. The rest of the parameters need to be set as specified in the previous section.
```python
from azure.identity import DefaultAzureCredential
import openai
# Request credential
default_credential = DefaultAzureCredential()
token = default_credential.get_token("https://cognitiveservices.azure.com/.default")
# Setup parameters
openai.api_type = "azure_ad"
openai.api_key = token.token
openai.api_base = "https://example-endpoint.openai.azure.com/"
openai.api_version = "2022-12-01"
# ...
```
### Command-line interface
This library additionally provides an `openai` command-line utility
which makes it easy to interact with the API from your terminal. Run
`openai api -h` for usage.
```sh
# list models
openai api models.list
# create a completion
openai api completions.create -m ada -p "Hello world"
# create a chat completion
openai api chat_completions.create -m gpt-3.5-turbo -g user "Hello world"
# generate images via DALL·E API
openai api image.create -p "two dogs playing chess, cartoon" -n 1
```
## Example code
Examples of how to use this Python library to accomplish various tasks can be found in the [OpenAI Cookbook](https://github.com/openai/openai-cookbook/). It contains code examples for:
* Classification using fine-tuning
* Clustering
* Code search
* Customizing embeddings
* Question answering from a corpus of documents
* Recommendations
* Visualization of embeddings
* And more
Prior to July 2022, this OpenAI Python library hosted code examples in its examples folder, but since then all examples have been migrated to the [OpenAI Cookbook](https://github.com/openai/openai-cookbook/).
### Chat
Conversational models such as `gpt-3.5-turbo` can be called using the chat completions endpoint.
```python
import openai
openai.api_key = "sk-..." # supply your API key however you choose
completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello world!"}])
print(completion.choices[0].message.content)
```
### Embeddings
In the OpenAI Python library, an embedding represents a text string as a fixed-length vector of floating point numbers. Embeddings are designed to measure the similarity or relevance between text strings.
To get an embedding for a text string, you can use the embeddings method as follows in Python:
```python
import openai
openai.api_key = "sk-..." # supply your API key however you choose
# choose text to embed
text_string = "sample text"
# choose an embedding
model_id = "text-similarity-davinci-001"
# compute the embedding of the text
embedding = openai.Embedding.create(input=text_string, model=model_id)['data'][0]['embedding']
```
An example of how to call the embeddings method is shown in this [get embeddings notebook](https://github.com/openai/openai-cookbook/blob/main/examples/Get_embeddings.ipynb).
Examples of how to use embeddings are shared in the following Jupyter notebooks:
- [Classification using embeddings](https://github.com/openai/openai-cookbook/blob/main/examples/Classification_using_embeddings.ipynb)
- [Clustering using embeddings](https://github.com/openai/openai-cookbook/blob/main/examples/Clustering.ipynb)
- [Code search using embeddings](https://github.com/openai/openai-cookbook/blob/main/examples/Code_search.ipynb)
- [Semantic text search using embeddings](https://github.com/openai/openai-cookbook/blob/main/examples/Semantic_text_search_using_embeddings.ipynb)
- [User and product embeddings](https://github.com/openai/openai-cookbook/blob/main/examples/User_and_product_embeddings.ipynb)
- [Zero-shot classification using embeddings](https://github.com/openai/openai-cookbook/blob/main/examples/Zero-shot_classification_with_embeddings.ipynb)
- [Recommendation using embeddings](https://github.com/openai/openai-cookbook/blob/main/examples/Recommendation_using_embeddings.ipynb)
For more information on embeddings and the types of embeddings OpenAI offers, read the [embeddings guide](https://beta.openai.com/docs/guides/embeddings) in the OpenAI documentation.
### Fine-tuning
Fine-tuning a model on training data can both improve the results (by giving the model more examples to learn from) and reduce the cost/latency of API calls (chiefly through reducing the need to include training examples in prompts).
Examples of fine-tuning are shared in the following Jupyter notebooks:
- [Classification with fine-tuning](https://github.com/openai/openai-cookbook/blob/main/examples/Fine-tuned_classification.ipynb) (a simple notebook that shows the steps required for fine-tuning)
- Fine-tuning a model that answers questions about the 2020 Olympics
- [Step 1: Collecting data](https://github.com/openai/openai-cookbook/blob/main/examples/fine-tuned_qa/olympics-1-collect-data.ipynb)
- [Step 2: Creating a synthetic Q&A dataset](https://github.com/openai/openai-cookbook/blob/main/examples/fine-tuned_qa/olympics-2-create-qa.ipynb)
- [Step 3: Train a fine-tuning model specialized for Q&A](https://github.com/openai/openai-cookbook/blob/main/examples/fine-tuned_qa/olympics-3-train-qa.ipynb)
Sync your fine-tunes to [Weights & Biases](https://wandb.me/openai-docs) to track experiments, models, and datasets in your central dashboard with:
```bash
openai wandb sync
```
For more information on fine-tuning, read the [fine-tuning guide](https://beta.openai.com/docs/guides/fine-tuning) in the OpenAI documentation.
### Moderation
OpenAI provides a Moderation endpoint that can be used to check whether content complies with the OpenAI [content policy](https://platform.openai.com/docs/usage-policies)
```python
import openai
openai.api_key = "sk-..." # supply your API key however you choose
moderation_resp = openai.Moderation.create(input="Here is some perfectly innocuous text that follows all OpenAI content policies.")
```
See the [moderation guide](https://platform.openai.com/docs/guides/moderation) for more details.
## Image generation (DALL·E)
```python
import openai
openai.api_key = "sk-..." # supply your API key however you choose
image_resp = openai.Image.create(prompt="two dogs playing chess, oil painting", n=4, size="512x512")
```
## Audio transcription (Whisper)
```python
import openai
openai.api_key = "sk-..." # supply your API key however you choose
f = open("path/to/file.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", f)
```
## Async API
Async support is available in the API by prepending `a` to a network-bound method:
```python
import openai
openai.api_key = "sk-..." # supply your API key however you choose
async def create_completion():
completion_resp = await openai.Completion.acreate(prompt="This is a test", model="davinci")
```
To make async requests more efficient, you can pass in your own
``aiohttp.ClientSession``, but you must manually close the client session at the end
of your program/event loop:
```python
import openai
from aiohttp import ClientSession
openai.aiosession.set(ClientSession())
# At the end of your program, close the http session
await openai.aiosession.get().close()
```
See the [usage guide](https://platform.openai.com/docs/guides/images) for more details.
## Requirements
- Python 3.7.1+
In general, we want to support the versions of Python that our
customers are using. If you run into problems with any version
issues, please let us know at on our [support page](https://help.openai.com/en/).
## Credit
This library is forked from the [Stripe Python Library](https://github.com/stripe/stripe-python).