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,65 @@
|
||||
---
|
||||
title: Multi-Label Classification - Support Ticket Categorization
|
||||
description: Implement multi-label classification with Instructor for support tickets. Assign multiple categories like ACCOUNT, BILLING, and GENERAL_QUERY simultaneously.
|
||||
---
|
||||
|
||||
For multi-label classification, we introduce a new enum class and a different Pydantic model to handle multiple labels.
|
||||
|
||||
```python
|
||||
import instructor
|
||||
|
||||
from typing import List, Literal
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
# Apply the patch to the OpenAI client
|
||||
# enables response_model keyword
|
||||
client = instructor.from_provider("openai/gpt-5-nano")
|
||||
|
||||
LABELS = Literal["ACCOUNT", "BILLING", "GENERAL_QUERY"]
|
||||
|
||||
|
||||
class MultiClassPrediction(BaseModel):
|
||||
"""
|
||||
A few-shot example of multi-label classification:
|
||||
Examples:
|
||||
- "My account is locked and I can't access my billing info.": ACCOUNT, BILLING
|
||||
- "I need help with my subscription.": ACCOUNT
|
||||
- "How do I change my payment method?": BILLING
|
||||
- "Can you tell me the status of my order?": BILLING
|
||||
- "I have a question about the product features.": GENERAL_QUERY
|
||||
"""
|
||||
|
||||
labels: List[LABELS] = Field(
|
||||
...,
|
||||
description="Only select the labels that apply to the support ticket.",
|
||||
)
|
||||
|
||||
|
||||
def multi_classify(data: str) -> MultiClassPrediction:
|
||||
return client.create(
|
||||
model="gpt-4o-mini",
|
||||
response_model=MultiClassPrediction,
|
||||
messages=[
|
||||
{
|
||||
"role": "system",
|
||||
"content": f"You are a support agent at a tech company. Only select the labels that apply to the support ticket.",
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": f"Classify the following support ticket: <text>{data}</text>",
|
||||
},
|
||||
],
|
||||
) # type: ignore
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
ticket = "My account is locked and I can't access my billing info."
|
||||
prediction = multi_classify(ticket)
|
||||
assert {"ACCOUNT", "BILLING"} == {label for label in prediction.labels}
|
||||
print("input:", ticket)
|
||||
#> input: My account is locked and I can't access my billing info.
|
||||
print("labels:", LABELS)
|
||||
#> labels: typing.Literal['ACCOUNT', 'BILLING', 'GENERAL_QUERY']
|
||||
print("prediction:", prediction)
|
||||
#> prediction: labels=['ACCOUNT', 'BILLING']
|
||||
```
|
||||
Reference in New Issue
Block a user