summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chat.proto206
-rw-r--r--config.go4
-rw-r--r--helpers.go8
3 files changed, 177 insertions, 41 deletions
diff --git a/chat.proto b/chat.proto
index cfe6995..a8c98b2 100644
--- a/chat.proto
+++ b/chat.proto
@@ -2,63 +2,191 @@ syntax = "proto3";
package chatpb;
-import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp
+import "google/protobuf/timestamp.proto";
+import "google/protobuf/struct.proto";
-message Row { // `autogenpb:nomutex`
- repeated string fields = 1;
+// 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<string, Schema> 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 { // `autogenpb:nomutex`
- int32 columns = 1;
- repeated Row rows = 2;
+message Table {
+ int32 columns = 1;
+ repeated Row rows = 2;
}
enum Who {
- NOONE = 0;
+ NOONE = 0;
REGEX = 1;
USER = 2;
}
-// NEW: A message to hold all the details of a tool call
-message ToolCall { // `autogenpb:nomutex`
- string name = 1; // e.g., "Shell"
- string input = 2; // The command that was run
- string description = 3; // The description for the command
- string output_stdout = 4;
- string output_stderr = 5;
- int32 exit_code = 6;
+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 { // `autogenpb:nomutex`
- string filename = 1;
- string content = 2;
+message CodeSnippet {
+ string filename = 1;
+ string content = 2;
}
-message ChatEntry { // `autogenpb:nomutex`
- Who from = 1;
- google.protobuf.Timestamp ctime = 2;
- string content = 3;
- Table table = 4;
- repeated ToolCall ToolCalls = 5;
- string ContentFile = 6;
- string uuid = 7; // `autogenpb:unique` `autogenpb:sort`
- repeated CodeSnippet Snippets = 8;
+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 { // `autogenpb:nomutex`
- string uuid = 1;
+message SessionStats {
+ string uuid = 1;
}
-message Chat { // `autogenpb:nomutex`
- string uuid = 1; // `autogenpb:unique` `autogenpb:sort`
- google.protobuf.Timestamp ctime = 2;
- string ChatName = 3;
- repeated ChatEntry Entries = 4;
- repeated SessionStats Session = 5;
+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`
- string version = 2; // `autogenpb:version:v0.0.1`
- repeated Chat Chats = 3; // THIS MUST BE Chat and then Chats
+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
}
diff --git a/config.go b/config.go
index bdfa08e..727b18b 100644
--- a/config.go
+++ b/config.go
@@ -78,7 +78,7 @@ func (all *Chats) ConfigSave() error {
return err
}
configWrite("regex.text", []byte(cleanChats.FormatTEXT()))
- log.Infof("chatpb.ConfigSave() worked len(Chats)=%d bytes=%d", len(cleanChats.Chats), len(data))
+ // log.Infof("chatpb.ConfigSave() worked len(Chats)=%d bytes=%d", len(cleanChats.Chats), len(data))
return nil
}
@@ -131,7 +131,7 @@ func (all *Chats) ConfigLoad() error {
log.Warn("versions do not match", test.Version, all.Version)
deleteProtobufFile(cfgname)
}
- log.Info(cfgname, "protobuf versions and uuid match", all.Uuid, all.Version)
+ // log.Info(cfgname, "protobuf versions and uuid match", all.Uuid, all.Version)
return err
}
diff --git a/helpers.go b/helpers.go
index 5385944..35acf88 100644
--- a/helpers.go
+++ b/helpers.go
@@ -93,3 +93,11 @@ func (x *Chats) AppendNew(y *Chat) {
x.Chats = append(x.Chats, chat)
}
+
+// a Append() shortcut (that does Clone() with a mutex) notsure if it really works
+func (x *Chat) AppendEntry(y *ChatEntry) {
+ x.Lock()
+ defer x.Unlock()
+
+ x.Entries = append(x.Entries, proto.Clone(y).(*ChatEntry))
+}