import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:island/models/file.dart'; part 'thought.freezed.dart'; part 'thought.g.dart'; enum ThinkingThoughtRole { assistant(0), user(1); const ThinkingThoughtRole(this.value); final int value; static ThinkingThoughtRole fromValue(int value) { return values.firstWhere((e) => e.value == value); } } class ThinkingThoughtRoleConverter implements JsonConverter { const ThinkingThoughtRoleConverter(); @override ThinkingThoughtRole fromJson(int json) => ThinkingThoughtRole.fromValue(json); @override int toJson(ThinkingThoughtRole object) => object.value; } @freezed sealed class StreamThinkingRequest with _$StreamThinkingRequest { const factory StreamThinkingRequest({ required String userMessage, String? sequenceId, }) = _StreamThinkingRequest; factory StreamThinkingRequest.fromJson(Map json) => _$StreamThinkingRequestFromJson(json); } @freezed sealed class SnThinkingSequence with _$SnThinkingSequence { const factory SnThinkingSequence({ required String id, String? topic, required String accountId, required DateTime createdAt, required DateTime updatedAt, DateTime? deletedAt, }) = _SnThinkingSequence; factory SnThinkingSequence.fromJson(Map json) => _$SnThinkingSequenceFromJson(json); } @freezed sealed class SnThinkingThought with _$SnThinkingThought { const factory SnThinkingThought({ required String id, String? content, @Default([]) List files, @ThinkingThoughtRoleConverter() required ThinkingThoughtRole role, required String sequenceId, SnThinkingSequence? sequence, required DateTime createdAt, required DateTime updatedAt, DateTime? deletedAt, }) = _SnThinkingThought; factory SnThinkingThought.fromJson(Map json) => _$SnThinkingThoughtFromJson(json); }