Files
iiEsaywebUIapp/lib/shared/services/tasks/outbound_task.dart

122 lines
3.2 KiB
Dart
Raw Normal View History

2025-09-01 23:41:22 +05:30
import 'package:freezed_annotation/freezed_annotation.dart';
part 'outbound_task.freezed.dart';
part 'outbound_task.g.dart';
enum TaskStatus {
queued,
running,
succeeded,
failed,
cancelled,
}
@freezed
abstract class OutboundTask with _$OutboundTask {
const OutboundTask._();
const factory OutboundTask.sendTextMessage({
required String id,
String? conversationId,
required String text,
@Default(<String>[]) List<String> attachments,
@Default(<String>[]) List<String> toolIds,
@Default(TaskStatus.queued) TaskStatus status,
@Default(0) int attempt,
String? idempotencyKey,
DateTime? enqueuedAt,
DateTime? startedAt,
DateTime? completedAt,
String? error,
}) = SendTextMessageTask;
const factory OutboundTask.uploadMedia({
required String id,
String? conversationId,
required String filePath,
required String fileName,
int? fileSize,
String? mimeType,
String? checksum,
@Default(TaskStatus.queued) TaskStatus status,
@Default(0) int attempt,
String? idempotencyKey,
DateTime? enqueuedAt,
DateTime? startedAt,
DateTime? completedAt,
String? error,
}) = UploadMediaTask;
const factory OutboundTask.executeToolCall({
required String id,
String? conversationId,
required String toolName,
@Default(<String, dynamic>{}) Map<String, dynamic> arguments,
@Default(TaskStatus.queued) TaskStatus status,
@Default(0) int attempt,
String? idempotencyKey,
DateTime? enqueuedAt,
DateTime? startedAt,
DateTime? completedAt,
String? error,
}) = ExecuteToolCallTask;
const factory OutboundTask.generateImage({
required String id,
String? conversationId,
required String prompt,
@Default(TaskStatus.queued) TaskStatus status,
@Default(0) int attempt,
String? idempotencyKey,
DateTime? enqueuedAt,
DateTime? startedAt,
DateTime? completedAt,
String? error,
}) = GenerateImageTask;
2025-09-02 13:20:02 +05:30
const factory OutboundTask.saveConversation({
required String id,
String? conversationId,
@Default(TaskStatus.queued) TaskStatus status,
@Default(0) int attempt,
String? idempotencyKey,
DateTime? enqueuedAt,
DateTime? startedAt,
DateTime? completedAt,
String? error,
}) = SaveConversationTask;
const factory OutboundTask.generateTitle({
required String id,
required String conversationId,
@Default(TaskStatus.queued) TaskStatus status,
@Default(0) int attempt,
String? idempotencyKey,
DateTime? enqueuedAt,
DateTime? startedAt,
DateTime? completedAt,
String? error,
}) = GenerateTitleTask;
2025-09-02 19:08:23 +05:30
const factory OutboundTask.imageToDataUrl({
required String id,
String? conversationId,
required String filePath,
required String fileName,
@Default(TaskStatus.queued) TaskStatus status,
@Default(0) int attempt,
String? idempotencyKey,
DateTime? enqueuedAt,
DateTime? startedAt,
DateTime? completedAt,
String? error,
}) = ImageToDataUrlTask;
2025-09-01 23:41:22 +05:30
factory OutboundTask.fromJson(Map<String, dynamic> json) =>
_$OutboundTaskFromJson(json);
String get threadKey => (conversationId == null || conversationId!.isEmpty)
? 'new'
: conversationId!;
}