Nice changes.
This commit is contained in:
		
							parent
							
								
									40e85777b9
								
							
						
					
					
						commit
						64a2407f4d
					
				
							
								
								
									
										18
									
								
								auth.h
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								auth.h
									
									
									
									
									
								
							| @ -13,14 +13,23 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| 
 | 
 | ||||||
| enum AUTH_TYPE { | enum AUTH_TYPE { | ||||||
|  |     AUTH_TYPE_NONE, | ||||||
|     AUTH_TYPE_API_KEY, |     AUTH_TYPE_API_KEY, | ||||||
|     AUTH_TYPE_FREE |     AUTH_TYPE_FREE | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| int auth_type = AUTH_TYPE_FREE; | int auth_type = AUTH_TYPE_NONE; | ||||||
|  | 
 | ||||||
|  | void auth_free(){ | ||||||
|  |     auth_type = AUTH_TYPE_FREE; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| void auth_init() { | void auth_init() { | ||||||
|  |      | ||||||
|     char *api_key = NULL; |     char *api_key = NULL; | ||||||
|  |     if(auth_type != AUTH_TYPE_FREE) { | ||||||
|  |      | ||||||
|  | 
 | ||||||
|     api_key = getenv("R_KEY"); |     api_key = getenv("R_KEY"); | ||||||
|     if (api_key) { |     if (api_key) { | ||||||
|         auth_type = AUTH_TYPE_API_KEY; |         auth_type = AUTH_TYPE_API_KEY; | ||||||
| @ -30,13 +39,16 @@ void auth_init() { | |||||||
|     if (api_key) { |     if (api_key) { | ||||||
|         auth_type = AUTH_TYPE_API_KEY; |         auth_type = AUTH_TYPE_API_KEY; | ||||||
|         return; |         return; | ||||||
|     }  |     } | ||||||
|  |     } | ||||||
|     auth_type = AUTH_TYPE_FREE; |     auth_type = AUTH_TYPE_FREE; | ||||||
|     return; |     return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const char *resolve_api_key() { | const char *resolve_api_key() { | ||||||
|     static char *api_key = NULL; |     static char *api_key = NULL; | ||||||
|  |     if(auth_type != AUTH_TYPE_FREE) { | ||||||
|  |      | ||||||
|     api_key = getenv("R_KEY"); |     api_key = getenv("R_KEY"); | ||||||
|     if (api_key) { |     if (api_key) { | ||||||
|         auth_type = AUTH_TYPE_API_KEY; |         auth_type = AUTH_TYPE_API_KEY; | ||||||
| @ -47,6 +59,8 @@ const char *resolve_api_key() { | |||||||
|         auth_type = AUTH_TYPE_API_KEY; |         auth_type = AUTH_TYPE_API_KEY; | ||||||
|         return api_key; |         return api_key; | ||||||
|     } |     } | ||||||
|  |     } | ||||||
|  |     auth_type = AUTH_TYPE_FREE; | ||||||
|     api_key = "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"; |     api_key = "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"; | ||||||
|     return api_key; |     return api_key; | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										32
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								main.c
									
									
									
									
									
								
							| @ -32,6 +32,7 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
|  | #include <signal.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #include "openai.h" | #include "openai.h" | ||||||
| @ -44,7 +45,8 @@ | |||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| #include "utils.h" | #include "utils.h" | ||||||
| 
 | 
 | ||||||
| 
 | volatile sig_atomic_t sigint_count = 0; | ||||||
|  | time_t first_sigint_time = 0; | ||||||
| bool SYNTAX_HIGHLIGHT_ENABLED = true; | bool SYNTAX_HIGHLIGHT_ENABLED = true; | ||||||
| bool API_MODE = false; | bool API_MODE = false; | ||||||
| void help(); | void help(); | ||||||
| @ -84,8 +86,11 @@ char *get_prompt_from_args(int c, char **argv) { | |||||||
|                 //plugin_run(file_content);
 |                 //plugin_run(file_content);
 | ||||||
|                 i++; |                 i++; | ||||||
|             }  |             }  | ||||||
|  |         }else if (!strcmp(argv[i],"--free")){ | ||||||
|  |             auth_free(); | ||||||
|  |             continue; | ||||||
|         } |         } | ||||||
| 
 |          | ||||||
|         else if(!strcmp(argv[i],"--context")){ |         else if(!strcmp(argv[i],"--context")){ | ||||||
|             if(i+1 <= c){ |             if(i+1 <= c){ | ||||||
|                 char * context_file_path = argv[i+1]; |                 char * context_file_path = argv[i+1]; | ||||||
| @ -202,6 +207,10 @@ void repl() { | |||||||
|             printf("%s\n",message_json());   |             printf("%s\n",message_json());   | ||||||
|             continue; |             continue; | ||||||
|         }  |         }  | ||||||
|  |         if (!strncmp(line, "model", 5)) { | ||||||
|  |             printf("%s\n",get_prompt_model()); | ||||||
|  |             continue; | ||||||
|  |         } | ||||||
|         if (!strncmp(line, "exit", 4)) { |         if (!strncmp(line, "exit", 4)) { | ||||||
|             exit(0); |             exit(0); | ||||||
|         } |         } | ||||||
| @ -304,7 +313,26 @@ void init() { | |||||||
|     fprintf(stderr, "\r                          \r"); |     fprintf(stderr, "\r                          \r"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void handle_sigint(int sig) { | ||||||
|  |     time_t current_time = time(NULL); | ||||||
|  | 
 | ||||||
|  |     if (sigint_count == 0) { | ||||||
|  |         first_sigint_time = current_time; | ||||||
|  |         sigint_count++; | ||||||
|  |     } else { | ||||||
|  |         if (difftime(current_time, first_sigint_time) <= 1) { | ||||||
|  |             exit(0); | ||||||
|  |         } else { | ||||||
|  |             sigint_count = 1; | ||||||
|  |             first_sigint_time = current_time; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }  | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| int main(int argc, char *argv[]) { | int main(int argc, char *argv[]) { | ||||||
|  |     signal(SIGINT, handle_sigint); | ||||||
|  | 
 | ||||||
|     init(); |     init(); | ||||||
|     if (try_prompt(argc, argv)) |     if (try_prompt(argc, argv)) | ||||||
|         return 0; |         return 0; | ||||||
|  | |||||||
							
								
								
									
										55
									
								
								tools.h
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								tools.h
									
									
									
									
									
								
							| @ -25,6 +25,8 @@ | |||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| 
 | 
 | ||||||
|  | #include "indexer.h" | ||||||
|  | 
 | ||||||
| struct json_object* tool_description_http_get(); | struct json_object* tool_description_http_get(); | ||||||
| struct json_object* tool_description_linux_terminal(); | struct json_object* tool_description_linux_terminal(); | ||||||
| struct json_object* tool_description_directory_glob(); | struct json_object* tool_description_directory_glob(); | ||||||
| @ -32,6 +34,7 @@ struct json_object* tool_description_read_file(); | |||||||
| struct json_object* tool_description_write_file(); | struct json_object* tool_description_write_file(); | ||||||
| struct json_object* tool_description_directory_rglob(); | struct json_object* tool_description_directory_rglob(); | ||||||
| struct json_object* tool_description_linux_terminal_interactive(); | struct json_object* tool_description_linux_terminal_interactive(); | ||||||
|  | struct json_object* tool_description_index_source_directory(); | ||||||
| 
 | 
 | ||||||
| struct json_object* tools_descriptions() { | struct json_object* tools_descriptions() { | ||||||
|     struct json_object* root = json_object_new_array(); |     struct json_object* root = json_object_new_array(); | ||||||
| @ -42,6 +45,7 @@ struct json_object* tools_descriptions() { | |||||||
|     json_object_array_add(root, tool_description_write_file()); |     json_object_array_add(root, tool_description_write_file()); | ||||||
|     json_object_array_add(root, tool_description_directory_rglob()); |     json_object_array_add(root, tool_description_directory_rglob()); | ||||||
|     json_object_array_add(root, tool_description_linux_terminal_interactive()); |     json_object_array_add(root, tool_description_linux_terminal_interactive()); | ||||||
|  |     json_object_array_add(root,tool_description_index_source_directory()); | ||||||
|     return root; |     return root; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -93,6 +97,40 @@ char* tool_function_linux_terminal_interactive(char* command) { | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | struct json_object* tool_description_index_source_directory() { | ||||||
|  |     struct json_object* root = json_object_new_object(); | ||||||
|  |     json_object_object_add(root, "type", json_object_new_string("function")); | ||||||
|  | 
 | ||||||
|  |     struct json_object* function = json_object_new_object(); | ||||||
|  |     json_object_object_add(function, "name", json_object_new_string("index_source_directory")); | ||||||
|  |     json_object_object_add(function, "description", json_object_new_string("Returns a JSON array containing every source file with it's contents from given directory. Execute with '.' for current directory.")); | ||||||
|  | 
 | ||||||
|  |     struct json_object* parameters = json_object_new_object(); | ||||||
|  |     json_object_object_add(parameters, "type", json_object_new_string("object")); | ||||||
|  | 
 | ||||||
|  |     struct json_object* properties = json_object_new_object(); | ||||||
|  |     struct json_object* path = json_object_new_object(); | ||||||
|  |     json_object_object_add(path, "type", json_object_new_string("string")); | ||||||
|  |     json_object_object_add(path, "description", json_object_new_string("Path to index and retreive files from.")); | ||||||
|  |     json_object_object_add(properties, "path", path); | ||||||
|  | 
 | ||||||
|  |     json_object_object_add(parameters, "properties", properties); | ||||||
|  | 
 | ||||||
|  |     struct json_object* required = json_object_new_array(); | ||||||
|  |     json_object_array_add(required, json_object_new_string("path")); | ||||||
|  |     json_object_object_add(parameters, "required", required); | ||||||
|  | 
 | ||||||
|  |     json_object_object_add(parameters, "additionalProperties", 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(root, "function", function); | ||||||
|  | 
 | ||||||
|  |     return root; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| struct json_object* tool_description_linux_terminal_interactive() { | struct json_object* tool_description_linux_terminal_interactive() { | ||||||
|     struct json_object* root = json_object_new_object(); |     struct json_object* root = json_object_new_object(); | ||||||
|     json_object_object_add(root, "type", json_object_new_string("function")); |     json_object_object_add(root, "type", json_object_new_string("function")); | ||||||
| @ -233,6 +271,11 @@ struct json_object* tool_description_write_file() { | |||||||
|     return root; |     return root; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | char* tool_function_index_source_directory(char * path){ | ||||||
|  |     fprintf(stderr, "Tool index_source_directory: %s\n", path); | ||||||
|  |     return index_directory(path); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| char* tool_function_read_file(char* path) { | char* tool_function_read_file(char* path) { | ||||||
|      |      | ||||||
|     char * expanded_path = expand_home_directory(path); |     char * expanded_path = expand_home_directory(path); | ||||||
| @ -665,6 +708,18 @@ struct json_object* tools_execute(struct json_object* tools_array) { | |||||||
|                         free(write_result); |                         free(write_result); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|  |             } else if (!strcmp(function_name, "index_source_directory")) { | ||||||
|  |                 struct json_object* arguments_obj; | ||||||
|  |                 if (json_object_object_get_ex(function_obj, "arguments", &arguments_obj)) { | ||||||
|  |                     struct json_object* arguments = json_tokener_parse(json_object_get_string(arguments_obj)); | ||||||
|  |                     struct json_object* path_obj; | ||||||
|  |                     if (json_object_object_get_ex(arguments, "path", &path_obj)) { | ||||||
|  |                         char* path = (char*)json_object_get_string(path_obj); | ||||||
|  |                         char* listing_result = tool_function_index_source_directory(path); | ||||||
|  |                         json_object_object_add(tool_result, "content", json_object_new_string(listing_result)); | ||||||
|  |                         free(listing_result); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|             } else if (!strcmp(function_name, "directory_rglob")) { |             } else if (!strcmp(function_name, "directory_rglob")) { | ||||||
|                 struct json_object* arguments_obj; |                 struct json_object* arguments_obj; | ||||||
|                 if (json_object_object_get_ex(function_obj, "arguments", &arguments_obj)) { |                 if (json_object_object_get_ex(function_obj, "arguments", &arguments_obj)) { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user