chore: import upstream snapshot with attribution
Ruff / Ruff (push) Has been cancelled
Test / Core Tests (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.10) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.11) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.12) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.13) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.9) (push) Has been cancelled
Test / Full Coverage (Python 3.11) (push) Has been cancelled
Test / Core Provider Tests (OpenAI) (push) Has been cancelled
Test / Core Provider Tests (Anthropic) (push) Has been cancelled
Test / Core Provider Tests (Google) (push) Has been cancelled
Test / Core Provider Tests (Other) (push) Has been cancelled
Test / Anthropic Tests (push) Has been cancelled
Test / Gemini Tests (push) Has been cancelled
Test / Google GenAI Tests (push) Has been cancelled
Test / Vertex AI Tests (push) Has been cancelled
Test / OpenAI Tests (push) Has been cancelled
Test / Writer Tests (push) Has been cancelled
Test / Auto Client Tests (push) Has been cancelled
ty / type-check (push) Has been cancelled
Ruff / Ruff (push) Has been cancelled
Test / Core Tests (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.10) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.11) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.12) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.13) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.9) (push) Has been cancelled
Test / Full Coverage (Python 3.11) (push) Has been cancelled
Test / Core Provider Tests (OpenAI) (push) Has been cancelled
Test / Core Provider Tests (Anthropic) (push) Has been cancelled
Test / Core Provider Tests (Google) (push) Has been cancelled
Test / Core Provider Tests (Other) (push) Has been cancelled
Test / Anthropic Tests (push) Has been cancelled
Test / Gemini Tests (push) Has been cancelled
Test / Google GenAI Tests (push) Has been cancelled
Test / Vertex AI Tests (push) Has been cancelled
Test / OpenAI Tests (push) Has been cancelled
Test / Writer Tests (push) Has been cancelled
Test / Auto Client Tests (push) Has been cancelled
ty / type-check (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
---
|
||||
title: Structured Outputs with Perplexity AI and Pydantic
|
||||
description: Learn how to use Perplexity AI with Instructor for structured JSON outputs using Pydantic models. Create type-safe, validated responses from Perplexity's Sonar models with Python.
|
||||
---
|
||||
|
||||
# Structured Outputs with Perplexity AI
|
||||
|
||||
This guide demonstrates how to use Perplexity AI with Instructor to generate structured outputs. You'll learn how to use Perplexity's Sonar models with Pydantic to create type-safe, validated responses.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
You'll need to sign up for a Perplexity account and get an API key. You can do that [here](https://www.perplexity.ai/).
|
||||
|
||||
```bash
|
||||
export PERPLEXITY_API_KEY=<your-api-key-here>
|
||||
pip install "instructor[perplexity]"
|
||||
```
|
||||
|
||||
### See Also
|
||||
|
||||
- [Getting Started](../getting-started.md) - Quick start guide
|
||||
- [from_provider Guide](../concepts/from_provider.md) - Detailed client configuration
|
||||
- [Provider Examples](../index.md#provider-examples) - Quick examples for all providers
|
||||
- [Search Examples](../examples/search.md) - Search query processing examples
|
||||
|
||||
# Perplexity AI
|
||||
|
||||
Perplexity AI provides access to powerful language models through their API. Instructor supports structured outputs with Perplexity's models using the OpenAI-compatible API.
|
||||
|
||||
### Sync Example
|
||||
|
||||
```python
|
||||
import instructor
|
||||
from pydantic import BaseModel
|
||||
|
||||
client = instructor.from_provider(
|
||||
"perplexity/sonar-small-online",
|
||||
api_key=os.getenv("PERPLEXITY_API_KEY"),
|
||||
base_url="https://api.perplexity.ai",
|
||||
)
|
||||
|
||||
|
||||
class User(BaseModel):
|
||||
name: str
|
||||
age: int
|
||||
|
||||
|
||||
# Create structured output
|
||||
user = client.create(
|
||||
messages=[
|
||||
{"role": "user", "content": "Extract: Jason is 25 years old"},
|
||||
],
|
||||
response_model=User,
|
||||
)
|
||||
|
||||
print(user)
|
||||
# > User(name='Jason', age=25)
|
||||
```
|
||||
|
||||
### Async Example
|
||||
|
||||
```python
|
||||
import instructor
|
||||
from pydantic import BaseModel
|
||||
import asyncio
|
||||
|
||||
async_client = instructor.from_provider(
|
||||
"perplexity/sonar-small-online",
|
||||
async_client=True,
|
||||
)
|
||||
|
||||
|
||||
class User(BaseModel):
|
||||
name: str
|
||||
age: int
|
||||
|
||||
|
||||
async def extract_user():
|
||||
user = await client.create(
|
||||
messages=[
|
||||
{"role": "user", "content": "Extract: Jason is 25 years old"},
|
||||
],
|
||||
response_model=User,
|
||||
)
|
||||
return user
|
||||
|
||||
|
||||
# Run async function
|
||||
user = asyncio.run(extract_user())
|
||||
print(user)
|
||||
# > User(name='Jason', age=25)
|
||||
```
|
||||
|
||||
### Nested Objects
|
||||
|
||||
```python
|
||||
import os
|
||||
from openai import OpenAI
|
||||
import instructor
|
||||
from pydantic import BaseModel
|
||||
|
||||
# Initialize with API key
|
||||
client = instructor.from_provider(
|
||||
"perplexity/sonar-small-online",
|
||||
api_key=os.getenv("PERPLEXITY_API_KEY"),
|
||||
base_url="https://api.perplexity.ai",
|
||||
)
|
||||
|
||||
|
||||
class Address(BaseModel):
|
||||
street: str
|
||||
city: str
|
||||
country: str
|
||||
|
||||
|
||||
class User(BaseModel):
|
||||
name: str
|
||||
age: int
|
||||
addresses: list[Address]
|
||||
|
||||
|
||||
# Create structured output with nested objects
|
||||
user = client.create(
|
||||
messages=[
|
||||
{
|
||||
"role": "user",
|
||||
"content": """
|
||||
Extract: Jason is 25 years old.
|
||||
He lives at 123 Main St, New York, USA
|
||||
and has a summer house at 456 Beach Rd, Miami, USA
|
||||
""",
|
||||
},
|
||||
],
|
||||
response_model=User,
|
||||
)
|
||||
|
||||
print(user)
|
||||
#> User(
|
||||
#> name='Jason',
|
||||
#> age=25,
|
||||
#> addresses=[
|
||||
#> Address(street='123 Main St', city='New York', country='USA'),
|
||||
#> Address(street='456 Beach Rd', city='Miami', country='USA')
|
||||
#> ]
|
||||
#> )
|
||||
```
|
||||
|
||||
## Supported Modes
|
||||
|
||||
Perplexity AI currently supports the following mode with Instructor:
|
||||
|
||||
- `PERPLEXITY_JSON`: Direct JSON response generation
|
||||
|
||||
```python
|
||||
import os
|
||||
from openai import OpenAI
|
||||
import instructor
|
||||
from instructor import Mode
|
||||
from pydantic import BaseModel
|
||||
|
||||
# Initialize client with base URL
|
||||
client = instructor.from_provider(
|
||||
"perplexity/sonar-small-online",
|
||||
api_key=os.getenv("PERPLEXITY_API_KEY"),
|
||||
base_url="https://api.perplexity.ai",
|
||||
)
|
||||
|
||||
|
||||
class User(BaseModel):
|
||||
name: str
|
||||
age: int
|
||||
|
||||
|
||||
# Create structured output
|
||||
user = client.create(
|
||||
messages=[
|
||||
{"role": "user", "content": "Extract: Jason is 25 years old"},
|
||||
],
|
||||
response_model=User,
|
||||
)
|
||||
|
||||
print(user)
|
||||
# > User(name='Jason', age=25)
|
||||
```
|
||||
|
||||
## Additional Resources
|
||||
|
||||
- [Perplexity API Documentation](https://docs.perplexity.ai/)
|
||||
- [Perplexity API Reference](https://docs.perplexity.ai/reference/post_chat_completions)
|
||||
Reference in New Issue
Block a user