feat: task based send flow
This commit is contained in:
70
lib/shared/services/tasks/outbound_task.dart
Normal file
70
lib/shared/services/tasks/outbound_task.dart
Normal file
@@ -0,0 +1,70 @@
|
||||
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;
|
||||
|
||||
factory OutboundTask.fromJson(Map<String, dynamic> json) =>
|
||||
_$OutboundTaskFromJson(json);
|
||||
|
||||
String get threadKey => (conversationId == null || conversationId!.isEmpty)
|
||||
? 'new'
|
||||
: conversationId!;
|
||||
}
|
||||
Reference in New Issue
Block a user