from typing import Literal, Optional
from pydantic import BaseModel, ConfigDict, Field
class Tag(BaseModel):
model_config = ConfigDict(extra="forbid")
name: str
confidence: float = Field(ge=0.0, le=1.0)
class TicketExtraction(BaseModel):
model_config = ConfigDict(extra="forbid")
title: str = Field(description="Short summary of the issue")
priority: Literal["low", "medium", "high", "critical"]
tags: list[Tag]
assignee: Optional[str] = None
ticket = client.chat.completions.create(
model="openai/gpt-oss-20b",
response_model=TicketExtraction,
messages=[
{
"role": "user",
"content": (
"Parse this support ticket: "
"URGENT: Payment gateway returning 500 errors on checkout. "
"Tags: payments, backend, production-incident. "
"Assign to the payments team."
),
}
],
)