From c3b6358f33189487d8243cf6a8332e0b2627fc86 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 26 Oct 2025 12:37:52 +0800 Subject: [PATCH] :bug: Bug fixes --- .../Thought/ThoughtProvider.cs | 118 ++++++++++-------- DysonNetwork.Shared/Models/Post.cs | 14 --- DysonNetwork.Shared/Proto/post.proto | 8 +- 3 files changed, 73 insertions(+), 67 deletions(-) diff --git a/DysonNetwork.Insight/Thought/ThoughtProvider.cs b/DysonNetwork.Insight/Thought/ThoughtProvider.cs index 2f99ced..bdef72b 100644 --- a/DysonNetwork.Insight/Thought/ThoughtProvider.cs +++ b/DysonNetwork.Insight/Thought/ThoughtProvider.cs @@ -86,56 +86,76 @@ public class ThoughtProvider return JsonSerializer.Serialize(response.Posts, GrpcTypeHelper.SerializerOptions); }, "search_posts", "Search posts by query from the Solar Network."), KernelFunctionFactory.CreateFromMethod(async ( - string? publisherId = null, - string? realmId = null, - int pageSize = 10, - string? pageToken = null, - string? orderBy = null, - List? categories = null, - List? tags = null, - string? query = null, - List? types = null, - string? afterIso = null, - string? beforeIso = null, - bool includeReplies = false, - string? pinned = null, - bool onlyMedia = false, - bool shuffle = false - ) => - { - var request = new ListPostsRequest + string? publisherId = null, + string? realmId = null, + int pageSize = 10, + string? pageToken = null, + string? orderBy = null, + List? categories = null, + List? tags = null, + string? query = null, + List? types = null, + string? afterIso = null, + string? beforeIso = null, + bool includeReplies = false, + string? pinned = null, + bool onlyMedia = false, + bool shuffle = false + ) => { - PublisherId = publisherId, - RealmId = realmId, - PageSize = pageSize, - PageToken = pageToken, - OrderBy = orderBy, - Query = query, - IncludeReplies = includeReplies, - Pinned = !string.IsNullOrEmpty(pinned) && int.TryParse(pinned, out int p) ? (PostPinMode)p : default, - OnlyMedia = onlyMedia, - Shuffle = shuffle - }; - if (!string.IsNullOrEmpty(afterIso)) - { - request.After = - Google.Protobuf.WellKnownTypes.Timestamp.FromDateTimeOffset(DateTimeOffset.Parse(afterIso) - .ToUniversalTime()); - } + var request = new ListPostsRequest + { + PublisherId = publisherId, + RealmId = realmId, + PageSize = pageSize, + PageToken = pageToken, + OrderBy = orderBy, + Query = query, + IncludeReplies = includeReplies, + Pinned = + !string.IsNullOrEmpty(pinned) && int.TryParse(pinned, out int p) ? (PostPinMode)p : default, + OnlyMedia = onlyMedia, + Shuffle = shuffle + }; + if (!string.IsNullOrEmpty(afterIso)) + { + request.After = + Google.Protobuf.WellKnownTypes.Timestamp.FromDateTimeOffset(DateTimeOffset.Parse(afterIso) + .ToUniversalTime()); + } - if (!string.IsNullOrEmpty(beforeIso)) - { - request.Before = - Google.Protobuf.WellKnownTypes.Timestamp.FromDateTimeOffset(DateTimeOffset.Parse(beforeIso) - .ToUniversalTime()); - } + if (!string.IsNullOrEmpty(beforeIso)) + { + request.Before = + Google.Protobuf.WellKnownTypes.Timestamp.FromDateTimeOffset(DateTimeOffset.Parse(beforeIso) + .ToUniversalTime()); + } - if (categories != null) request.Categories.AddRange(categories); - if (tags != null) request.Tags.AddRange(tags); - if (types != null) request.Types_.AddRange(types.Select(t => (PostType)t)); - var response = await _postClient.ListPostsAsync(request); - return JsonSerializer.Serialize(response.Posts.Select(SnPost.FromProtoValue), GrpcTypeHelper.SerializerOptions); - }, "list_posts", "Get posts from the Solar Network with customizable filters.") + if (categories != null) request.Categories.AddRange(categories); + if (tags != null) request.Tags.AddRange(tags); + if (types != null) request.Types_.AddRange(types.Select(t => (PostType)t)); + var response = await _postClient.ListPostsAsync(request); + return JsonSerializer.Serialize(response.Posts.Select(SnPost.FromProtoValue), + GrpcTypeHelper.SerializerOptions); + }, "list_posts", + "Get posts from the Solar Network with customizable filters.\n" + + "Parameters:\n" + + "publisherId (optional, string: publisher ID to filter by)\n" + + "realmId (optional, string: realm ID to filter by)\n" + + "pageSize (optional, integer: posts per page, default 20)\n" + + "pageToken (optional, string: pagination token)\n" + + "orderBy (optional, string: field to order by)\n" + + "categories (optional, array of strings: category slugs)\n" + + "tags (optional, array of strings: tag slugs)\n" + + "query (optional, string: search query, will search in title, description and body)\n" + + "types (optional, array of integers: post types, use 0 for Moment, 1 for Article)\n" + + "afterIso (optional, string: ISO date for posts after this date)\n" + + "beforeIso (optional, string: ISO date for posts before this date)\n" + + "includeReplies (optional, boolean: include replies, default false)\n" + + "pinned (optional, string: pin mode as integer string, '0' for PublisherPage, '1' for RealmPage, '2' for ReplyPage)\n" + + "onlyMedia (optional, boolean: only posts with media, default false)\n" + + "shuffle (optional, boolean: shuffle results, default false)" + ) ]); } @@ -149,7 +169,7 @@ public class ThoughtProvider FunctionChoiceBehavior = FunctionChoiceBehavior.Auto( options: new FunctionChoiceBehaviorOptions { - AllowParallelCalls = true, + AllowParallelCalls = true, AllowConcurrentInvocation = true }) }; @@ -167,4 +187,4 @@ public class ThoughtProvider throw new InvalidOperationException("Unknown provider: " + ModelProviderType); } } -} +} \ No newline at end of file diff --git a/DysonNetwork.Shared/Models/Post.cs b/DysonNetwork.Shared/Models/Post.cs index b45313b..6f7bb30 100644 --- a/DysonNetwork.Shared/Models/Post.cs +++ b/DysonNetwork.Shared/Models/Post.cs @@ -112,39 +112,25 @@ public class SnPost : ModelBase, IIdentifiedResource, IActivity }; if (EditedAt.HasValue) - { proto.EditedAt = Timestamp.FromDateTimeOffset(EditedAt.Value.ToDateTimeOffset()); - } if (PublishedAt.HasValue) - { proto.PublishedAt = Timestamp.FromDateTimeOffset(PublishedAt.Value.ToDateTimeOffset()); - } if (Content != null) - { proto.Content = Content; - } if (PinMode.HasValue) - { proto.PinMode = (Proto.PostPinMode)((int)PinMode.Value + 1); - } if (Meta != null) - { proto.Meta = GrpcTypeHelper.ConvertObjectToByteString(Meta); - } if (SensitiveMarks != null) - { proto.SensitiveMarks = GrpcTypeHelper.ConvertObjectToByteString(SensitiveMarks); - } if (EmbedView != null) - { proto.EmbedView = EmbedView.ToProtoValue(); - } if (RepliedPostId.HasValue) { diff --git a/DysonNetwork.Shared/Proto/post.proto b/DysonNetwork.Shared/Proto/post.proto index dec34f7..6aea6db 100644 --- a/DysonNetwork.Shared/Proto/post.proto +++ b/DysonNetwork.Shared/Proto/post.proto @@ -239,14 +239,14 @@ message SearchPostsResponse { } message ListPostsRequest { - string publisher_id = 1; - string realm_id = 2; + google.protobuf.StringValue publisher_id = 1; + google.protobuf.StringValue realm_id = 2; int32 page_size = 3; string page_token = 4; - string order_by = 5; + google.protobuf.StringValue order_by = 5; repeated string categories = 6; repeated string tags = 7; - string query = 8; + google.protobuf.StringValue query = 8; repeated PostType types = 9; optional google.protobuf.Timestamp after = 10; // Filter posts created after this timestamp optional google.protobuf.Timestamp before = 11; // Filter posts created before this timestamp