PointDTO » History » Revision 2
Revision 1 (Tomislav Pleše, 09/29/2025 06:11 PM) → Revision 2/6 (Tomislav Pleše, 09/29/2025 06:12 PM)
# PointDTO ``` class PointDTO { final String id; // Possible: Root Point, Shard Point - T007 // parentShardId != parentPointId final String parentPointId; final List<String> pointChildren; // Shard.id - goes into the ShardList if not Root Point - T007-S02 // parentShardId != parentPointId final String? parentShardId; // T007[S01, S02, S03..] final List<ShardDTO> shardsList; final List<ExchangeDTO> exchangesList; final MetadataDTO? metadata; PointDTO({ required this.id, required this.parentPointId, List<String>? pointChildren, this.parentShardId, List<ShardDTO>? shardsList, List<ExchangeDTO>? exchangesList, this.metadata, }) : pointChildren = pointChildren ?? [], shardsList = shardsList ?? [], exchangesList = exchangesList ?? []; PointDTO.empty({ this.id = '', this.parentPointId = '', this.parentShardId, this.metadata, }) : pointChildren = [], shardsList = [], exchangesList = []; factory PointDTO.fromJson(Map<String, dynamic> json) => _$PointDTOFromJson(json); Map<String, dynamic> toJson() => _$PointDTOToJson(this); PointDTO copyWith({ String? id, String? parentPointId, List<String>? pointChildren, String? parentShardId, List<ShardDTO>? shardsList, List<ExchangeDTO>? exchangeList, MetadataDTO? metadata, }) { return PointDTO( id: id ?? this.id, parentPointId: parentPointId ?? this.parentPointId, pointChildren: pointChildren ?? this.pointChildren, parentShardId: parentShardId ?? this.parentShardId, shardsList: shardsList ?? this.shardsList, exchangesList: exchangeList ?? this.exchangesList, metadata: metadata ?? this.metadata, ); } } @JsonSerializable(explicitToJson: true) class ShardDTO { final String shardId; final List<String> shardChildren; final AnchorDTO anchorDTO; ShardDTO({ required this.shardId, required this.shardChildren, required this.anchorDTO, }); factory ShardDTO.fromJson(Map<String, dynamic> json) => _$ShardDTOFromJson(json); Map<String, dynamic> toJson() => _$ShardDTOToJson(this); // TODO TP: add return type -> empty ShardDTO static empty() {} } @JsonSerializable(explicitToJson: true) class AnchorDTO { final int startPosition; final int endPosition; final String selectedText; AnchorDTO({ required this.startPosition, required this.endPosition, required this.selectedText }); factory AnchorDTO.fromJson(Map<String, dynamic> json) => _$AnchorDTOFromJson(json); Map<String, dynamic> toJson() => _$AnchorDTOToJson(this); } @JsonSerializable(explicitToJson: true) class ExchangeDTO { final String exchangeId; final String? exchangeTitle; final PromptDTO prompt; final ResponseDTO? response; ExchangeDTO({ required this.exchangeId, this.exchangeTitle, required this.prompt, this.response }); factory ExchangeDTO.fromJson(Map<String, dynamic> json) => _$ExchangeDTOFromJson(json); Map<String, dynamic> toJson() => _$ExchangeDTOToJson(this); } @JsonSerializable(explicitToJson: true) class PromptDTO { final String model; final PromptMessageDTO promptMessage; final int maxTokens; PromptDTO({ required this.model, required this.promptMessage, required this.maxTokens }); factory PromptDTO.fromJson(Map<String, dynamic> json) => _$PromptDTOFromJson(json); Map<String, dynamic> toJson() => _$PromptDTOToJson(this); } @JsonSerializable() class PromptMessageDTO { final String role; final String content; PromptMessageDTO({ required this.role, required this.content}); factory PromptMessageDTO.fromJson(Map<String, dynamic> json) => _$PromptMessageDTOFromJson(json); Map<String, dynamic> toJson() => _$PromptMessageDTOToJson(this); } @JsonSerializable(explicitToJson: true) class ResponseDTO { final String id; final String object; final int created; final String model; final List<ChoiceDTO> choices; final UsageDTO usage; final String serviceTier; final String? systemFingerprint; ResponseDTO({ required this.id, required this.object, required this.created, required this.model, required this.choices, required this.usage, required this.serviceTier, this.systemFingerprint, }); factory ResponseDTO.fromJson(Map<String, dynamic> json) => _$ResponseDTOFromJson(json); Map<String, dynamic> toJson() => _$ResponseDTOToJson(this); } @JsonSerializable(explicitToJson: true) class ChoiceDTO { final int index; final MessageDTO message; final dynamic logprobs; final String finishReason; ChoiceDTO({ required this.index, required this.message, this.logprobs, required this.finishReason }); factory ChoiceDTO.fromJson(Map<String, dynamic> json) => _$ChoiceDTOFromJson(json); Map<String, dynamic> toJson() => _$ChoiceDTOToJson(this); } @JsonSerializable(explicitToJson: true) class MessageDTO { final String role; final String content; final String? refusal; MessageDTO({ required this.role, required this.content, this.refusal }); factory MessageDTO.fromJson(Map<String, dynamic> json) => _$MessageDTOFromJson(json); Map<String, dynamic> toJson() => _$MessageDTOToJson(this); } @JsonSerializable(explicitToJson: true) class UsageDTO { final int promptTokens; final int completionTokens; final int totalTokens; final PromptTokensDetailsDTO promptTokensDetails; final CompletionTokensDetailsDTO completionTokensDetails; UsageDTO({ required this.promptTokens, required this.completionTokens, required this.totalTokens, required this.promptTokensDetails, required this.completionTokensDetails, }); factory UsageDTO.fromJson(Map<String, dynamic> json) => _$UsageDTOFromJson(json); Map<String, dynamic> toJson() => _$UsageDTOToJson(this); } @JsonSerializable() class PromptTokensDetailsDTO { final int cachedTokens; final int audioTokens; PromptTokensDetailsDTO({ required this.cachedTokens, required this.audioTokens }); factory PromptTokensDetailsDTO.fromJson(Map<String, dynamic> json) => _$PromptTokensDetailsDTOFromJson(json); Map<String, dynamic> toJson() => _$PromptTokensDetailsDTOToJson(this); } @JsonSerializable() class CompletionTokensDetailsDTO { final int reasoningTokens; final int audioTokens; final int acceptedPredictionTokens; final int rejectedPredictionTokens; CompletionTokensDetailsDTO({ required this.reasoningTokens, required this.audioTokens, required this.acceptedPredictionTokens, required this.rejectedPredictionTokens, }); factory CompletionTokensDetailsDTO.fromJson(Map<String, dynamic> json) => _$CompletionTokensDetailsDTOFromJson(json); Map<String, dynamic> toJson() => _$CompletionTokensDetailsDTOToJson(this); } @JsonSerializable(explicitToJson: true) class MetadataDTO { final bool openState; @JsonKey(fromJson: _parseDateTime, toJson: _formatDateTime) final DateTime created; // TODO TP: this should be a list of modification times @JsonKey(fromJson: _parseDateTime, toJson: _formatDateTime) final DateTime modified; final int modifiedCount; @JsonKey(fromJson: _parseDateTime, toJson: _formatDateTime) final DateTime lastAccessed; final int hotness; // TODO TP: add hash of the Point object - to compare if there were changes MetadataDTO({ required this.openState, required this.created, required this.modified, required this.modifiedCount, required this.lastAccessed, required this.hotness, }); static DateTime _parseDateTime(String dateString) { return DateTime.parse(dateString); } static String _formatDateTime(DateTime date) { return date.toIso8601String(); } factory MetadataDTO.fromJson(Map<String, dynamic> json) => _$MetadataDTOFromJson(json); Map<String, dynamic> toJson() => _$MetadataDTOToJson(this); } ```