97e91a83f3
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
156 lines
3.3 KiB
Markdown
156 lines
3.3 KiB
Markdown
---
|
|
title: Structured Outputs with Groq AI and Pydantic
|
|
description: Learn how to use Groq AI for structured outputs with Pydantic in Python and enhance API interactions.
|
|
---
|
|
|
|
# Structured Outputs with Groq AI
|
|
|
|
This guide demonstrates how to use Groq AI with Instructor to generate structured outputs. You'll learn how to use Groq's LLM models to create type-safe responses.
|
|
|
|
you'll need to sign up for an account and get an API key. You can do that [here](https://console.groq.com/docs/quickstart).
|
|
|
|
```bash
|
|
export GROQ_API_KEY=<your-api-key-here>
|
|
pip install "instructor[groq]"
|
|
```
|
|
|
|
### See Also
|
|
|
|
- [Getting Started](../getting-started.md) - Quick start guide
|
|
- [Groq Examples](../examples/groq.md) - Practical Groq examples
|
|
- [from_provider Guide](../concepts/from_provider.md) - Detailed client configuration
|
|
- [Provider Examples](../index.md#provider-examples) - Quick examples for all providers
|
|
|
|
# Groq AI
|
|
|
|
Groq supports structured outputs with their new `llama-3-groq-70b-8192-tool-use-preview` model.
|
|
|
|
### Sync Example
|
|
|
|
```python
|
|
import os
|
|
from groq import Groq
|
|
import instructor
|
|
from pydantic import BaseModel
|
|
|
|
# Initialize with API key
|
|
client = Groq(api_key=os.getenv("GROQ_API_KEY"))
|
|
|
|
# Enable instructor patches for Groq client
|
|
client = instructor.from_provider("groq/llama3-8b-8192")
|
|
|
|
|
|
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
|
|
|
|
# Initialize async client using provider string
|
|
client = instructor.from_provider(
|
|
"groq/llama3-8b-8192",
|
|
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 Object
|
|
|
|
```python
|
|
import os
|
|
from groq import Groq
|
|
import instructor
|
|
from pydantic import BaseModel
|
|
|
|
# Initialize with API key
|
|
client = Groq(api_key=os.getenv("GROQ_API_KEY"))
|
|
|
|
# Enable instructor patches for Groq client
|
|
client = instructor.from_provider("groq/llama3-8b-8192")
|
|
|
|
|
|
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)
|
|
#> {
|
|
#> 'name': 'Jason',
|
|
#> 'age': 25,
|
|
#> 'addresses': [
|
|
#> {
|
|
#> 'street': '123 Main St',
|
|
#> 'city': 'New York',
|
|
#> 'country': 'USA'
|
|
#> },
|
|
#> {
|
|
#> 'street': '456 Beach Rd',
|
|
#> 'city': 'Miami',
|
|
#> 'country': 'USA'
|
|
#> }
|
|
#> ]
|
|
#> }
|
|
```
|