mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-02-08 09:12:19 +08:00
96 lines
3.0 KiB
Python
96 lines
3.0 KiB
Python
from __future__ import annotations
|
|
import time
|
|
import uuid
|
|
from dataclasses import dataclass, field
|
|
from enum import Enum
|
|
from typing import Dict, Any, List
|
|
|
|
|
|
class TaskType(Enum):
|
|
"""Enum representing different types of tasks."""
|
|
TEXT = "text"
|
|
IMAGE = "image"
|
|
VIDEO = "video"
|
|
AUDIO = "audio"
|
|
FILE = "file"
|
|
MIXED = "mixed"
|
|
|
|
|
|
class TaskStatus(Enum):
|
|
"""Enum representing the status of a task."""
|
|
INIT = "init" # Initial state
|
|
PROCESSING = "processing" # In progress
|
|
COMPLETED = "completed" # Completed
|
|
FAILED = "failed" # Failed
|
|
|
|
|
|
@dataclass
|
|
class Task:
|
|
"""
|
|
Represents a task to be processed by an agent.
|
|
|
|
Attributes:
|
|
id: Unique identifier for the task
|
|
content: The primary text content of the task
|
|
type: Type of the task
|
|
status: Current status of the task
|
|
created_at: Timestamp when the task was created
|
|
updated_at: Timestamp when the task was last updated
|
|
metadata: Additional metadata for the task
|
|
images: List of image URLs or base64 encoded images
|
|
videos: List of video URLs
|
|
audios: List of audio URLs or base64 encoded audios
|
|
files: List of file URLs or paths
|
|
"""
|
|
id: str = field(default_factory=lambda: str(uuid.uuid4()))
|
|
content: str = ""
|
|
type: TaskType = TaskType.TEXT
|
|
status: TaskStatus = TaskStatus.INIT
|
|
created_at: float = field(default_factory=time.time)
|
|
updated_at: float = field(default_factory=time.time)
|
|
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
# Media content
|
|
images: List[str] = field(default_factory=list)
|
|
videos: List[str] = field(default_factory=list)
|
|
audios: List[str] = field(default_factory=list)
|
|
files: List[str] = field(default_factory=list)
|
|
|
|
def __init__(self, content: str = "", **kwargs):
|
|
"""
|
|
Initialize a Task with content and optional keyword arguments.
|
|
|
|
Args:
|
|
content: The text content of the task
|
|
**kwargs: Additional attributes to set
|
|
"""
|
|
self.id = kwargs.get('id', str(uuid.uuid4()))
|
|
self.content = content
|
|
self.type = kwargs.get('type', TaskType.TEXT)
|
|
self.status = kwargs.get('status', TaskStatus.INIT)
|
|
self.created_at = kwargs.get('created_at', time.time())
|
|
self.updated_at = kwargs.get('updated_at', time.time())
|
|
self.metadata = kwargs.get('metadata', {})
|
|
self.images = kwargs.get('images', [])
|
|
self.videos = kwargs.get('videos', [])
|
|
self.audios = kwargs.get('audios', [])
|
|
self.files = kwargs.get('files', [])
|
|
|
|
def get_text(self) -> str:
|
|
"""
|
|
Get the text content of the task.
|
|
|
|
Returns:
|
|
The text content
|
|
"""
|
|
return self.content
|
|
|
|
def update_status(self, status: TaskStatus) -> None:
|
|
"""
|
|
Update the status of the task.
|
|
|
|
Args:
|
|
status: The new status
|
|
"""
|
|
self.status = status
|
|
self.updated_at = time.time() |