diff --git a/messages.h b/messages.h index 683036e..7c4b7bf 100644 --- a/messages.h +++ b/messages.h @@ -59,12 +59,17 @@ struct json_object *message_add_tool_call(struct json_object *message) { } struct json_object *message_add_tool_result(const char *tool_call_id, - const char *tool_result) { + char *tool_result) { struct json_object *messages = message_list(); struct json_object *message = json_object_new_object(); json_object_object_add(message, "tool_call_id", json_object_new_string(tool_call_id)); + + if(strlen(tool_result) > 104000){ + tool_result[104000] = '\0'; + } + json_object_object_add(message, "tool_result", json_object_new_string(tool_result)); @@ -84,10 +89,18 @@ struct json_object *message_add(const char *role, const char *content) { struct json_object *messages = message_list(); struct json_object *message = json_object_new_object(); json_object_object_add(message, "role", json_object_new_string(role)); - json_object_object_add(message, "content", json_object_new_string(content)); - + + if(content){ + char * formatted_content = strdup(content); + if(strlen(formatted_content) > 1048570){ + formatted_content[1048570] = '\0'; + } + json_object_object_add(message, "content", json_object_new_string(formatted_content)); + free(formatted_content); + } if (!strcmp(role, "user")) { json_object_object_add(message, "tools", tools_descriptions()); + json_object_object_add(message, "parallel_tool_calls", json_object_new_boolean(true)); } json_object_array_add(messages, message); diff --git a/r.h b/r.h index cb58801..55260b9 100644 --- a/r.h +++ b/r.h @@ -32,6 +32,26 @@ char *_model = NULL; #define DB_FILE "~/.r.db" #define PROMPT_TEMPERATURE 0.1 +bool get_use_strict(){ + if(getenv("R_USE_STRICT") != NULL) { + const char * value = getenv("R_USE_STRICT"); + if(!strcmp(value, "true")) { + return true; + } + if(!strcmp(value, "false")) { + return false; + } + if(!strcmp(value, "1")) { + return true; + } + if(!strcmp(value, "0")) { + return false; + } + } + return true; + +} + char * get_completions_api_url() { if(getenv("R_BASE_URL") != NULL) { return joinpath(getenv("R_BASE_URL"), "v1/chat/completions"); diff --git a/rpylib.so b/rpylib.so index 56cd075..a7bc6da 100755 Binary files a/rpylib.so and b/rpylib.so differ diff --git a/tools.h b/tools.h index 181c306..8893e45 100644 --- a/tools.h +++ b/tools.h @@ -11,6 +11,8 @@ #ifndef R_TOOLS_H #define R_TOOLS_H + + #include "http_curl.h" #include "r.h" #include "utils.h" @@ -117,7 +119,7 @@ struct json_object *tool_description_web_search_news() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -171,7 +173,7 @@ struct json_object *tool_description_web_search() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -222,7 +224,7 @@ struct json_object *tool_description_db_get() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -272,7 +274,7 @@ struct json_object *tool_description_db_query() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -329,7 +331,7 @@ struct json_object *tool_description_db_set() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -468,7 +470,7 @@ struct json_object *tool_description_chdir() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -508,7 +510,7 @@ struct json_object *tool_description_index_source_directory() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -551,7 +553,7 @@ struct json_object *tool_description_linux_terminal_interactive() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -594,7 +596,7 @@ struct json_object *tool_description_directory_rglob() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -633,7 +635,7 @@ struct json_object *tool_description_read_file() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -685,7 +687,7 @@ struct json_object *tool_description_write_file() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -970,7 +972,7 @@ struct json_object *tool_description_http_get() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -1012,7 +1014,7 @@ struct json_object *tool_description_directory_glob() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -1051,7 +1053,7 @@ struct json_object *tool_description_linux_terminal() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function); @@ -1097,7 +1099,7 @@ struct json_object *tool_description_mkdir() { json_object_new_boolean(0)); json_object_object_add(function, "parameters", parameters); - json_object_object_add(function, "strict", json_object_new_boolean(1)); + json_object_object_add(function, "strict", json_object_new_boolean(get_use_strict())); json_object_object_add(root, "function", function);