Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f4be8f2

Browse files
authored
Version 11.6 diff (openai#66)
* Hallacy/pickleable exceptions (openai#109) * Exceptions in python are hard to pickle. Make Exceptions pickleable * Remove debug * Added tests * nit * Change embeddings call to openai.Embedding.create (openai#110) * Change embeddings call to openai.Embedding.create * And update model names * Untweak notebook * Support encoded embeddings response (openai#111) * Support encoded embeddings response * Removed imports * Add a couple of comments * Typo * Remove CA bundle (openai#112) * Remove CA bundle * Removed some references
1 parent 7ea5dde commit f4be8f2

13 files changed

+136
-3255
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ openai.api_key = "sk-..." # supply your API key however you choose
8484
text_string = "sample text"
8585

8686
# choose an embedding
87-
model_id = "davinci-similarity"
87+
model_id = "text-similarity-davinci-001"
8888

8989
# compute the embedding of the text
90-
embedding = openai.Engine(id=model_id).embeddings(input=text_string)['data'][0]['embedding']
90+
embedding = openai.Embedding.create(input=text_string, engine=model_id)['data'][0]['embedding']
9191
```
9292

9393
An example of how to call the embeddings method is shown in the [get embeddings notebook](https://github.com/openai/openai-python/blob/main/examples/embeddings/Get_embeddings.ipynb).

examples/embeddings/Get_embeddings.ipynb

+6-5
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"source": [
2929
"import openai\n",
3030
"\n",
31-
"embedding = openai.Engine(id=\"davinci-similarity\").embeddings(input=\"Sample document text goes here\")['data'][0]['embedding']\n",
31+
"embedding = openai.Embedding.create(input=\"Sample document text goes here\", engine=\"text-similarity-davinci-001\")['data'][0]['embedding']\n",
3232
"len(embedding)"
3333
]
3434
},
@@ -50,14 +50,15 @@
5050
"from tenacity import retry, wait_random_exponential, stop_after_attempt\n",
5151
"\n",
5252
"@retry(wait=wait_random_exponential(min=1, max=20), stop=stop_after_attempt(6))\n",
53-
"def get_embedding(text, engine=\"davinci-similarity\"):\n",
53+
"def get_embedding(text, engine=\"text-similarity-davinci-001\"):\n",
54+
"\n",
5455
"\n",
5556
" # replace newlines, which can negatively affect performance.\n",
5657
" text = text.replace(\"\\n\", \" \")\n",
5758
"\n",
58-
" return openai.Engine(id=engine).embeddings(input = [text])['data'][0]['embedding']\n",
59+
" return openai.Embedding.create(input=[text], engine=engine)['data'][0]['embedding']\n",
5960
"\n",
60-
"embedding = get_embedding(\"Sample query text goes here\", engine=\"ada-search-query\")\n",
61+
"embedding = get_embedding(\"Sample query text goes here\", engine=\"text-search-ada-query-001\")\n",
6162
"print(len(embedding))"
6263
]
6364
},
@@ -75,7 +76,7 @@
7576
}
7677
],
7778
"source": [
78-
"embedding = get_embedding(\"Sample document text goes here\", engine=\"ada-search-document\")\n",
79+
"embedding = get_embedding(\"Sample document text goes here\", engine=\"text-search-ada-doc-001\")\n",
7980
"print(len(embedding))"
8081
]
8182
}

openai/__init__.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
Answer,
1010
Classification,
1111
Completion,
12+
Embedding,
1213
Engine,
1314
ErrorObject,
1415
File,
@@ -31,7 +32,7 @@
3132
proxy = None
3233
app_info = None
3334
enable_telemetry = False # Ignored; the telemetry feature was removed.
34-
ca_bundle_path = os.path.join(os.path.dirname(__file__), "data/ca-certificates.crt")
35+
ca_bundle_path = None # No longer used, feature was removed
3536
debug = False
3637
log = None # Set to either 'debug' or 'info', controls console logging
3738

@@ -40,6 +41,7 @@
4041
"Answer",
4142
"Classification",
4243
"Completion",
44+
"Embedding",
4345
"Engine",
4446
"ErrorObject",
4547
"File",

openai/api_requestor.py

-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ def _make_session() -> requests.Session:
4949
proxies = _requests_proxies_arg(openai.proxy)
5050
if proxies:
5151
s.proxies = proxies
52-
s.verify = openai.ca_bundle_path
5352
s.mount(
5453
"https://",
5554
requests.adapters.HTTPAdapter(max_retries=MAX_CONNECTION_RETRIES),

openai/api_resources/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from openai.api_resources.answer import Answer # noqa: F401
22
from openai.api_resources.classification import Classification # noqa: F401
33
from openai.api_resources.completion import Completion # noqa: F401
4+
from openai.api_resources.embedding import Embedding # noqa: F401
45
from openai.api_resources.engine import Engine # noqa: F401
56
from openai.api_resources.error_object import ErrorObject # noqa: F401
67
from openai.api_resources.file import File # noqa: F401

openai/api_resources/embedding.py

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import base64
2+
import time
3+
4+
import numpy as np
5+
6+
from openai import util
7+
from openai.api_resources.abstract import DeletableAPIResource, ListableAPIResource
8+
from openai.api_resources.abstract.engine_api_resource import EngineAPIResource
9+
from openai.error import InvalidRequestError, TryAgain
10+
11+
12+
class Embedding(EngineAPIResource, ListableAPIResource, DeletableAPIResource):
13+
engine_required = True
14+
OBJECT_NAME = "embedding"
15+
16+
@classmethod
17+
def create(cls, *args, **kwargs):
18+
"""
19+
Creates a new embedding for the provided input and parameters.
20+
21+
See https://beta.openai.com/docs/api-reference/embeddings for a list
22+
of valid parameters.
23+
"""
24+
start = time.time()
25+
timeout = kwargs.pop("timeout", None)
26+
if kwargs.get("model", None) is None and kwargs.get("engine", None) is None:
27+
raise InvalidRequestError(
28+
"Must provide an 'engine' or 'model' parameter to create an Embedding.",
29+
param="engine",
30+
)
31+
32+
user_provided_encoding_format = kwargs.get("encoding_format", None)
33+
34+
# If encoding format was not explicitly specified, we opaquely use base64 for performance
35+
if not user_provided_encoding_format:
36+
kwargs["encoding_format"] = "base64"
37+
38+
while True:
39+
try:
40+
response = super().create(*args, **kwargs)
41+
42+
# If a user specifies base64, we'll just return the encoded string.
43+
# This is only for the default case.
44+
if not user_provided_encoding_format:
45+
for data in response.data:
46+
47+
# If an engine isn't using this optimization, don't do anything
48+
if type(data["embedding"]) == str:
49+
data["embedding"] = np.frombuffer(
50+
base64.b64decode(data["embedding"]), dtype="float32"
51+
).tolist()
52+
53+
return response
54+
except TryAgain as e:
55+
if timeout is not None and time.time() > start + timeout:
56+
raise
57+
58+
util.log_info("Waiting for model to warm up", error=e)

openai/api_resources/engine.py

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import time
2+
import warnings
23

34
from openai import util
45
from openai.api_resources.abstract import ListableAPIResource, UpdateableAPIResource
@@ -29,4 +30,7 @@ def search(self, **params):
2930
return self.request("post", self.instance_url() + "/search", params)
3031

3132
def embeddings(self, **params):
33+
warnings.warn(
34+
"Engine.embeddings is deprecated, use Embedding.create", DeprecationWarning
35+
)
3236
return self.request("post", self.instance_url() + "/embeddings", params)

0 commit comments

Comments
 (0)