PointDTO » History » Revision 3
Revision 2 (Tomislav Pleše, 09/29/2025 06:12 PM) → Revision 3/6 (Tomislav Pleše, 09/29/2025 06:18 PM)
# PointDTO
```
class PointDTO {
final String id;
// Possible: Root Point, Shard Point - T007
// parentShardId != parentPointId
final String parentPointId;
final List<String>? 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>? 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);
}
```