perplexityai 0.12.1__tar.gz → 0.13.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of perplexityai might be problematic. Click here for more details.
- perplexityai-0.13.0/.release-please-manifest.json +3 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/CHANGELOG.md +8 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/PKG-INFO +53 -9
- {perplexityai-0.12.1 → perplexityai-0.13.0}/README.md +52 -8
- {perplexityai-0.12.1 → perplexityai-0.13.0}/api.md +4 -4
- {perplexityai-0.12.1 → perplexityai-0.13.0}/pyproject.toml +1 -1
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_client.py +4 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_streaming.py +40 -2
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_version.py +1 -1
- perplexityai-0.13.0/src/perplexity/resources/chat/completions.py +850 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/__init__.py +1 -0
- perplexityai-0.13.0/src/perplexity/types/async_/chat/completion_create_response.py +30 -0
- perplexityai-0.13.0/src/perplexity/types/async_/chat/completion_get_response.py +30 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/chat/__init__.py +0 -1
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/chat/completion_create_params.py +15 -4
- perplexityai-0.12.1/src/perplexity/types/chat/completion_create_response.py → perplexityai-0.13.0/src/perplexity/types/stream_chunk.py +6 -6
- perplexityai-0.13.0/tests/api_resources/chat/test_completions.py +832 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_client.py +24 -0
- perplexityai-0.12.1/.release-please-manifest.json +0 -3
- perplexityai-0.12.1/src/perplexity/resources/chat/completions.py +0 -389
- perplexityai-0.12.1/src/perplexity/types/async_/chat/completion_create_response.py +0 -54
- perplexityai-0.12.1/src/perplexity/types/async_/chat/completion_get_response.py +0 -54
- perplexityai-0.12.1/tests/api_resources/chat/test_completions.py +0 -426
- {perplexityai-0.12.1 → perplexityai-0.13.0}/.gitignore +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/CONTRIBUTING.md +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/LICENSE +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/SECURITY.md +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/bin/check-release-environment +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/bin/publish-pypi +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/examples/.keep +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/noxfile.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/release-please-config.json +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/requirements-dev.lock +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/requirements.lock +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_base_client.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_compat.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_constants.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_exceptions.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_files.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_models.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_qs.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_resource.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_response.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_types.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/_compat.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/_datetime_parse.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/_logs.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/_proxy.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/_reflection.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/_resources_proxy.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/_streams.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/_sync.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/_transform.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/_typing.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/_utils/_utils.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/lib/.keep +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/py.typed +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/resources/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/resources/async_/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/resources/async_/async_.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/resources/async_/chat/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/resources/async_/chat/chat.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/resources/async_/chat/completions.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/resources/chat/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/resources/chat/chat.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/resources/search.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/async_/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/async_/chat/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/async_/chat/completion_create_params.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/async_/chat/completion_get_params.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/async_/chat/completion_list_response.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/search_create_params.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/search_create_response.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/shared/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/shared/api_public_search_result.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/shared/chat_message_input.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/shared/chat_message_output.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/shared/choice.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/shared/usage_info.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/shared_params/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/shared_params/api_public_search_result.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/src/perplexity/types/shared_params/chat_message_input.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/api_resources/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/api_resources/async_/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/api_resources/async_/chat/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/api_resources/async_/chat/test_completions.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/api_resources/chat/__init__.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/api_resources/test_search.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/conftest.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/sample_file.txt +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_deepcopy.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_extract_files.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_files.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_models.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_qs.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_required_args.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_response.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_streaming.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_transform.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_utils/test_proxy.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/test_utils/test_typing.py +0 -0
- {perplexityai-0.12.1 → perplexityai-0.13.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.13.0 (2025-10-02)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.12.1...v0.13.0](https://github.com/perplexityai/perplexity-py/compare/v0.12.1...v0.13.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** manual updates ([f92e6d7](https://github.com/perplexityai/perplexity-py/commit/f92e6d70fd638d895b60227dd33bb7641c169a4f))
|
|
10
|
+
|
|
3
11
|
## 0.12.1 (2025-09-30)
|
|
4
12
|
|
|
5
13
|
Full Changelog: [v0.12.0...v0.12.1](https://github.com/perplexityai/perplexity-py/compare/v0.12.0...v0.12.1)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: perplexityai
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.0
|
|
4
4
|
Summary: The official Python library for the perplexity API
|
|
5
5
|
Project-URL: Homepage, https://github.com/perplexityai/perplexity-py
|
|
6
6
|
Project-URL: Repository, https://github.com/perplexityai/perplexity-py
|
|
@@ -88,7 +88,7 @@ client = Perplexity(
|
|
|
88
88
|
api_key=os.environ.get("PERPLEXITY_API_KEY"), # This is the default and can be omitted
|
|
89
89
|
)
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
stream_chunk = client.chat.completions.create(
|
|
92
92
|
messages=[
|
|
93
93
|
{
|
|
94
94
|
"role": "user",
|
|
@@ -97,7 +97,7 @@ completion = client.chat.completions.create(
|
|
|
97
97
|
],
|
|
98
98
|
model="sonar",
|
|
99
99
|
)
|
|
100
|
-
print(
|
|
100
|
+
print(stream_chunk.id)
|
|
101
101
|
```
|
|
102
102
|
|
|
103
103
|
While you can provide an `api_key` keyword argument,
|
|
@@ -120,7 +120,7 @@ client = AsyncPerplexity(
|
|
|
120
120
|
|
|
121
121
|
|
|
122
122
|
async def main() -> None:
|
|
123
|
-
|
|
123
|
+
stream_chunk = await client.chat.completions.create(
|
|
124
124
|
messages=[
|
|
125
125
|
{
|
|
126
126
|
"role": "user",
|
|
@@ -129,7 +129,7 @@ async def main() -> None:
|
|
|
129
129
|
],
|
|
130
130
|
model="sonar",
|
|
131
131
|
)
|
|
132
|
-
print(
|
|
132
|
+
print(stream_chunk.id)
|
|
133
133
|
|
|
134
134
|
|
|
135
135
|
asyncio.run(main())
|
|
@@ -161,7 +161,7 @@ async def main() -> None:
|
|
|
161
161
|
api_key="My API Key",
|
|
162
162
|
http_client=DefaultAioHttpClient(),
|
|
163
163
|
) as client:
|
|
164
|
-
|
|
164
|
+
stream_chunk = await client.chat.completions.create(
|
|
165
165
|
messages=[
|
|
166
166
|
{
|
|
167
167
|
"role": "user",
|
|
@@ -170,12 +170,56 @@ async def main() -> None:
|
|
|
170
170
|
],
|
|
171
171
|
model="sonar",
|
|
172
172
|
)
|
|
173
|
-
print(
|
|
173
|
+
print(stream_chunk.id)
|
|
174
174
|
|
|
175
175
|
|
|
176
176
|
asyncio.run(main())
|
|
177
177
|
```
|
|
178
178
|
|
|
179
|
+
## Streaming responses
|
|
180
|
+
|
|
181
|
+
We provide support for streaming responses using Server Side Events (SSE).
|
|
182
|
+
|
|
183
|
+
```python
|
|
184
|
+
from perplexity import Perplexity
|
|
185
|
+
|
|
186
|
+
client = Perplexity()
|
|
187
|
+
|
|
188
|
+
stream = client.chat.completions.create(
|
|
189
|
+
messages=[
|
|
190
|
+
{
|
|
191
|
+
"role": "user",
|
|
192
|
+
"content": "What is the capital of France?",
|
|
193
|
+
}
|
|
194
|
+
],
|
|
195
|
+
model="sonar",
|
|
196
|
+
stream=True,
|
|
197
|
+
)
|
|
198
|
+
for stream_chunk in stream:
|
|
199
|
+
print(stream_chunk.id)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
The async client uses the exact same interface.
|
|
203
|
+
|
|
204
|
+
```python
|
|
205
|
+
from perplexity import AsyncPerplexity
|
|
206
|
+
|
|
207
|
+
client = AsyncPerplexity()
|
|
208
|
+
|
|
209
|
+
stream = await client.chat.completions.create(
|
|
210
|
+
messages=[
|
|
211
|
+
{
|
|
212
|
+
"role": "user",
|
|
213
|
+
"content": "What is the capital of France?",
|
|
214
|
+
}
|
|
215
|
+
],
|
|
216
|
+
model="sonar",
|
|
217
|
+
stream=True,
|
|
218
|
+
)
|
|
219
|
+
async for stream_chunk in stream:
|
|
220
|
+
print(stream_chunk.id)
|
|
221
|
+
```
|
|
222
|
+
|
|
179
223
|
## Using types
|
|
180
224
|
|
|
181
225
|
Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like:
|
|
@@ -194,7 +238,7 @@ from perplexity import Perplexity
|
|
|
194
238
|
|
|
195
239
|
client = Perplexity()
|
|
196
240
|
|
|
197
|
-
|
|
241
|
+
stream_chunk = client.chat.completions.create(
|
|
198
242
|
messages=[
|
|
199
243
|
{
|
|
200
244
|
"content": "string",
|
|
@@ -204,7 +248,7 @@ completion = client.chat.completions.create(
|
|
|
204
248
|
model="model",
|
|
205
249
|
debug_params={},
|
|
206
250
|
)
|
|
207
|
-
print(
|
|
251
|
+
print(stream_chunk.debug_params)
|
|
208
252
|
```
|
|
209
253
|
|
|
210
254
|
## Handling errors
|
|
@@ -53,7 +53,7 @@ client = Perplexity(
|
|
|
53
53
|
api_key=os.environ.get("PERPLEXITY_API_KEY"), # This is the default and can be omitted
|
|
54
54
|
)
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
stream_chunk = client.chat.completions.create(
|
|
57
57
|
messages=[
|
|
58
58
|
{
|
|
59
59
|
"role": "user",
|
|
@@ -62,7 +62,7 @@ completion = client.chat.completions.create(
|
|
|
62
62
|
],
|
|
63
63
|
model="sonar",
|
|
64
64
|
)
|
|
65
|
-
print(
|
|
65
|
+
print(stream_chunk.id)
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
While you can provide an `api_key` keyword argument,
|
|
@@ -85,7 +85,7 @@ client = AsyncPerplexity(
|
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
async def main() -> None:
|
|
88
|
-
|
|
88
|
+
stream_chunk = await client.chat.completions.create(
|
|
89
89
|
messages=[
|
|
90
90
|
{
|
|
91
91
|
"role": "user",
|
|
@@ -94,7 +94,7 @@ async def main() -> None:
|
|
|
94
94
|
],
|
|
95
95
|
model="sonar",
|
|
96
96
|
)
|
|
97
|
-
print(
|
|
97
|
+
print(stream_chunk.id)
|
|
98
98
|
|
|
99
99
|
|
|
100
100
|
asyncio.run(main())
|
|
@@ -126,7 +126,7 @@ async def main() -> None:
|
|
|
126
126
|
api_key="My API Key",
|
|
127
127
|
http_client=DefaultAioHttpClient(),
|
|
128
128
|
) as client:
|
|
129
|
-
|
|
129
|
+
stream_chunk = await client.chat.completions.create(
|
|
130
130
|
messages=[
|
|
131
131
|
{
|
|
132
132
|
"role": "user",
|
|
@@ -135,12 +135,56 @@ async def main() -> None:
|
|
|
135
135
|
],
|
|
136
136
|
model="sonar",
|
|
137
137
|
)
|
|
138
|
-
print(
|
|
138
|
+
print(stream_chunk.id)
|
|
139
139
|
|
|
140
140
|
|
|
141
141
|
asyncio.run(main())
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
+
## Streaming responses
|
|
145
|
+
|
|
146
|
+
We provide support for streaming responses using Server Side Events (SSE).
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
from perplexity import Perplexity
|
|
150
|
+
|
|
151
|
+
client = Perplexity()
|
|
152
|
+
|
|
153
|
+
stream = client.chat.completions.create(
|
|
154
|
+
messages=[
|
|
155
|
+
{
|
|
156
|
+
"role": "user",
|
|
157
|
+
"content": "What is the capital of France?",
|
|
158
|
+
}
|
|
159
|
+
],
|
|
160
|
+
model="sonar",
|
|
161
|
+
stream=True,
|
|
162
|
+
)
|
|
163
|
+
for stream_chunk in stream:
|
|
164
|
+
print(stream_chunk.id)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
The async client uses the exact same interface.
|
|
168
|
+
|
|
169
|
+
```python
|
|
170
|
+
from perplexity import AsyncPerplexity
|
|
171
|
+
|
|
172
|
+
client = AsyncPerplexity()
|
|
173
|
+
|
|
174
|
+
stream = await client.chat.completions.create(
|
|
175
|
+
messages=[
|
|
176
|
+
{
|
|
177
|
+
"role": "user",
|
|
178
|
+
"content": "What is the capital of France?",
|
|
179
|
+
}
|
|
180
|
+
],
|
|
181
|
+
model="sonar",
|
|
182
|
+
stream=True,
|
|
183
|
+
)
|
|
184
|
+
async for stream_chunk in stream:
|
|
185
|
+
print(stream_chunk.id)
|
|
186
|
+
```
|
|
187
|
+
|
|
144
188
|
## Using types
|
|
145
189
|
|
|
146
190
|
Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like:
|
|
@@ -159,7 +203,7 @@ from perplexity import Perplexity
|
|
|
159
203
|
|
|
160
204
|
client = Perplexity()
|
|
161
205
|
|
|
162
|
-
|
|
206
|
+
stream_chunk = client.chat.completions.create(
|
|
163
207
|
messages=[
|
|
164
208
|
{
|
|
165
209
|
"content": "string",
|
|
@@ -169,7 +213,7 @@ completion = client.chat.completions.create(
|
|
|
169
213
|
model="model",
|
|
170
214
|
debug_params={},
|
|
171
215
|
)
|
|
172
|
-
print(
|
|
216
|
+
print(stream_chunk.debug_params)
|
|
173
217
|
```
|
|
174
218
|
|
|
175
219
|
## Handling errors
|
|
@@ -12,17 +12,17 @@ from perplexity.types import (
|
|
|
12
12
|
|
|
13
13
|
# Chat
|
|
14
14
|
|
|
15
|
-
## Completions
|
|
16
|
-
|
|
17
15
|
Types:
|
|
18
16
|
|
|
19
17
|
```python
|
|
20
|
-
from perplexity.types
|
|
18
|
+
from perplexity.types import StreamChunk
|
|
21
19
|
```
|
|
22
20
|
|
|
21
|
+
## Completions
|
|
22
|
+
|
|
23
23
|
Methods:
|
|
24
24
|
|
|
25
|
-
- <code title="post /chat/completions">client.chat.completions.<a href="./src/perplexity/resources/chat/completions.py">create</a>(\*\*<a href="src/perplexity/types/chat/completion_create_params.py">params</a>) -> <a href="./src/perplexity/types/
|
|
25
|
+
- <code title="post /chat/completions">client.chat.completions.<a href="./src/perplexity/resources/chat/completions.py">create</a>(\*\*<a href="src/perplexity/types/chat/completion_create_params.py">params</a>) -> <a href="./src/perplexity/types/stream_chunk.py">StreamChunk</a></code>
|
|
26
26
|
|
|
27
27
|
# Async
|
|
28
28
|
|
|
@@ -105,6 +105,8 @@ class Perplexity(SyncAPIClient):
|
|
|
105
105
|
_strict_response_validation=_strict_response_validation,
|
|
106
106
|
)
|
|
107
107
|
|
|
108
|
+
self._default_stream_cls = Stream
|
|
109
|
+
|
|
108
110
|
self.chat = chat.ChatResource(self)
|
|
109
111
|
self.async_ = async_.AsyncResource(self)
|
|
110
112
|
self.search = search.SearchResource(self)
|
|
@@ -277,6 +279,8 @@ class AsyncPerplexity(AsyncAPIClient):
|
|
|
277
279
|
_strict_response_validation=_strict_response_validation,
|
|
278
280
|
)
|
|
279
281
|
|
|
282
|
+
self._default_stream_cls = AsyncStream
|
|
283
|
+
|
|
280
284
|
self.chat = chat.AsyncChatResource(self)
|
|
281
285
|
self.async_ = async_.AsyncAsyncResource(self)
|
|
282
286
|
self.search = search.AsyncSearchResource(self)
|
|
@@ -55,7 +55,26 @@ class Stream(Generic[_T]):
|
|
|
55
55
|
iterator = self._iter_events()
|
|
56
56
|
|
|
57
57
|
for sse in iterator:
|
|
58
|
-
|
|
58
|
+
if sse.data.startswith("[DONE]"):
|
|
59
|
+
break
|
|
60
|
+
|
|
61
|
+
if sse.event == "error":
|
|
62
|
+
body = sse.data
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
body = sse.json()
|
|
66
|
+
err_msg = f"{body}"
|
|
67
|
+
except Exception:
|
|
68
|
+
err_msg = sse.data or f"Error code: {response.status_code}"
|
|
69
|
+
|
|
70
|
+
raise self._client._make_status_error(
|
|
71
|
+
err_msg,
|
|
72
|
+
body=body,
|
|
73
|
+
response=self.response,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
if sse.event is None:
|
|
77
|
+
yield process_data(data=sse.json(), cast_to=cast_to, response=response)
|
|
59
78
|
|
|
60
79
|
# Ensure the entire stream is consumed
|
|
61
80
|
for _sse in iterator:
|
|
@@ -119,7 +138,26 @@ class AsyncStream(Generic[_T]):
|
|
|
119
138
|
iterator = self._iter_events()
|
|
120
139
|
|
|
121
140
|
async for sse in iterator:
|
|
122
|
-
|
|
141
|
+
if sse.data.startswith("[DONE]"):
|
|
142
|
+
break
|
|
143
|
+
|
|
144
|
+
if sse.event == "error":
|
|
145
|
+
body = sse.data
|
|
146
|
+
|
|
147
|
+
try:
|
|
148
|
+
body = sse.json()
|
|
149
|
+
err_msg = f"{body}"
|
|
150
|
+
except Exception:
|
|
151
|
+
err_msg = sse.data or f"Error code: {response.status_code}"
|
|
152
|
+
|
|
153
|
+
raise self._client._make_status_error(
|
|
154
|
+
err_msg,
|
|
155
|
+
body=body,
|
|
156
|
+
response=self.response,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
if sse.event is None:
|
|
160
|
+
yield process_data(data=sse.json(), cast_to=cast_to, response=response)
|
|
123
161
|
|
|
124
162
|
# Ensure the entire stream is consumed
|
|
125
163
|
async for _sse in iterator:
|