Project

General

Profile

Actions

PointDTO » History » Revision 2

« Previous | Revision 2/6 (diff) | Next »
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);
}

Updated by Tomislav Pleše 2 months ago · 6 revisions