syntax = "proto3"; package chatpb; import "google/protobuf/timestamp.proto"; import "google/protobuf/struct.proto"; // Main request structure message GeminiRequest { // `autogenpb:marshal` `autogenpb:mutex` string model = 1; Config config = 2; repeated Content contents = 3; } // Abort signal for the request message AbortSignal { } message Schema { string type = 1; map properties = 2; repeated string required = 3; string description = 4; Schema items = 5; repeated string enum = 6; int32 minimum = 7; int32 minLength = 8; int32 minItems = 9; google.protobuf.Value default_value = 10 [json_name = "default"]; } message FunctionDeclaration { string name = 1; string description = 2; Schema parameters_json_schema = 3; } message Tool { repeated FunctionDeclaration functionDeclarations = 1; } // Configuration for the request message Config { message ThinkingConfig { bool includeThoughts = 1; } double temperature = 2; double topP = 3; string systemInstruction = 4; ResponseJsonSchema responseJsonSchema = 5; string responseMimeType = 6; AbortSignal abort_signal = 7; ThinkingConfig thinkingConfig = 8; repeated Tool tools = 9; } // JSON schema for the response message ResponseJsonSchema { string type = 1; Properties properties = 2; repeated string required = 3; } // Properties within the JSON schema message Properties { Reasoning reasoning = 1; NextSpeaker next_speaker = 2; } // Reasoning property message Reasoning { string type = 1; string description = 2; } // Next speaker property message NextSpeaker { string type = 1; repeated string enum = 2; string description = 3; } // Content of the chat message Content { string role = 1; repeated Part parts = 2; } // Part of the content message Part { oneof part_type { string text = 1; FunctionCall functionCall = 2; FunctionResponse functionResponse = 3; } string thoughtSignature = 4; } // Function call message FunctionCall { string name = 1; argsInfo args = 3; } message argsInfo { string absolute_path = 1; string description = 2; string command = 3; string new_string = 4; string old_string = 5; int32 expected_replacements = 6; string file_path = 7; string directory = 8; string path = 9; string thinkingConfig = 10; string pattern = 11; string content = 12; string fact = 13; } // Function response message FunctionResponse { string id = 1; string name = 2; Response response = 3; } // Response from a function call message Response { string output = 1; string error = 2; } message Row { repeated string fields = 1; } message Table { int32 columns = 1; repeated Row rows = 2; } enum Who { NOONE = 0; REGEX = 1; USER = 2; } message ToolCall { string name = 1; string input = 2; string description = 3; string output_stdout = 4; string output_stderr = 5; int32 exit_code = 6; } message CodeSnippet { string filename = 1; string content = 2; } message ChatEntry { Who from = 1; google.protobuf.Timestamp ctime = 2; string content = 3; Table table = 4; repeated ToolCall ToolCalls = 5; string ContentFile = 6; string uuid = 7; repeated CodeSnippet Snippets = 8; repeated Part parts = 9; GeminiRequest GeminiRequest = 10; int32 RequestCounter = 11; } message SessionStats { string uuid = 1; } message Chat { string uuid = 1; // `autogenpb:unique` `autogenpb:sort` google.protobuf.Timestamp ctime = 2; string ChatName = 3; repeated ChatEntry Entries = 4; repeated SessionStats Session = 5; } message Chats { // `autogenpb:marshal` `autogenpb:mutex` string uuid = 1; // `autogenpb:uuid:9fd31f10-c25d-4d66-bc8d-5f6eb7c79057` `autogenpb:primary` string version = 2; // `autogenpb:version:v0.0.1` repeated Chat Chats = 3; // THIS MUST BE Chat and then Chats }