ravindrakapse's picture
Upload folder using huggingface_hub
d287a79 verified
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
"""
Data models for the Customer Support Ticket Management Environment.
This environment simulates real-world customer support operations where an AI agent
must handle incoming tickets by categorizing, prioritizing, routing, and responding.
"""
from typing import Optional, List, Literal
from openenv.core.env_server.types import Action, Observation
from pydantic import Field
class CustomerHistory(Observation):
"""Customer historical data embedded in observations"""
account_age_days: int = Field(description="Number of days since account creation")
total_tickets: int = Field(description="Total number of previous tickets")
resolved_tickets: int = Field(description="Number of successfully resolved tickets")
satisfaction_score: float = Field(ge=0.0, le=5.0, description="Average satisfaction rating (0-5)")
is_premium: bool = Field(description="Whether customer has premium status")
lifetime_value: float = Field(description="Customer lifetime value in USD")
class TicketMetadata(Observation):
"""Metadata about the current ticket"""
ticket_id: str = Field(description="Unique ticket identifier")
timestamp: str = Field(description="Ticket creation timestamp")
customer_id: str = Field(description="Customer identifier")
channel: Literal["email", "chat", "phone", "social"] = Field(description="Communication channel")
class CustomerSupportObservation(Observation):
"""
Observation returned by the environment.
Contains all information visible to the agent about the current ticket.
"""
# Ticket information
ticket_id: str = Field(description="Unique ticket identifier")
timestamp: str = Field(description="Ticket creation timestamp")
customer_id: str = Field(description="Customer identifier")
channel: Literal["email", "chat", "phone", "social"] = Field(description="Communication channel")
# Customer message
customer_message: str = Field(description="The customer's support request message")
# Customer history
account_age_days: int = Field(description="Number of days since account creation")
total_tickets: int = Field(description="Total number of previous tickets")
resolved_tickets: int = Field(description="Number of successfully resolved tickets")
satisfaction_score: float = Field(ge=0.0, le=5.0, description="Average satisfaction rating (0-5)")
is_premium: bool = Field(description="Whether customer has premium status")
lifetime_value: float = Field(description="Customer lifetime value in USD")
# Additional context
previous_interactions: List[str] = Field(
default_factory=list,
description="List of previous messages in this ticket thread"
)
attachments: List[str] = Field(
default_factory=list,
description="List of attachment filenames (if any)"
)
# Task context
task_id: str = Field(default="easy", description="Current task difficulty level")
class CustomerSupportAction(Action):
"""
Action taken by the agent.
Represents the agent's decision about how to handle the ticket.
"""
category: Literal["billing", "technical", "account", "shipping", "general"] = Field(
description="Ticket category classification"
)
priority: Literal["low", "medium", "high", "critical"] = Field(
description="Assigned priority level"
)
assigned_team: Literal["tier1", "tier2", "billing", "technical", "management"] = Field(
description="Team to handle the ticket"
)
response_draft: str = Field(
min_length=10,
description="Draft response to the customer (minimum 10 characters)"
)
internal_notes: Optional[str] = Field(
default=None,
description="Internal notes for the assigned team"
)
escalate: bool = Field(
default=False,
description="Whether to escalate to management"
)