diff --git a/chat.h b/chat.h index 213fa8d..0704d18 100644 --- a/chat.h +++ b/chat.h @@ -16,7 +16,6 @@ void chat_free(){ _prompt = NULL; } - char * chat_json(char * role, char * message){ chat_free(); message_add(role,message); @@ -28,4 +27,4 @@ json_object_object_add(root_object, "temperature", json_object_new_double(prompt return (char *)json_object_to_json_string_ext(root_object, JSON_C_TO_STRING_PRETTY); } -#endif \ No newline at end of file +#endif \ No newline at end of file diff --git a/http.h b/http.h index 9254d07..f5aa5d9 100644 --- a/http.h +++ b/http.h @@ -96,22 +96,20 @@ char *http_post(const char *hostname, char *url, char *data) SSL_set_tlsext_host_name(ssl, hostname); SSL_set_fd(ssl, sock); - + int buffer_size = 4096; char *buffer = (char *)malloc(buffer_size); - if (SSL_connect(ssl) <= 0) { ERR_print_errors_fp(stderr); } else { - //printf("Connected with %s encryption\n", SSL_get_cipher(ssl)); size_t len = strlen(data); char *request = (char *)malloc(len + 4096); request[0] = 0; - + sprintf(request, "POST %s HTTP/1.1\r\n" "Content-Length: %ld\r\n" @@ -120,11 +118,11 @@ char *http_post(const char *hostname, char *url, char *data) "Authorization: Bearer %s\r\n" "Connection: close\r\n\r\n%s", url, len, api_key, data); - + SSL_write(ssl, request, strlen(request)); - free(request); - - + free(request); + + int bytes; int bytes_total = 0; while ((bytes = SSL_read(ssl, buffer + bytes_total, buffer_size - 1)) > 0) @@ -173,7 +171,6 @@ char *http_get(const char *hostname, char *url) } else { - //printf("Connected with %s encryption\n", SSL_get_cipher(ssl)); char request[buffer_size]; request[0] = 0; @@ -207,4 +204,4 @@ char *http_get(const char *hostname, char *url) return buffer; } -#endif \ No newline at end of file +#endif \ No newline at end of file diff --git a/main.c b/main.c index 7d280cb..ba7096a 100644 --- a/main.c +++ b/main.c @@ -5,29 +5,29 @@ #include #include -char * get_prompt_from_args(int c, char **argv){ +char * get_prompt_from_args(int c, char **argv) { char * prompt = malloc(1024*1024 + 1); prompt[0] = 0; - for(int i = 1; i < c; i++){ + for(int i = 1; i < c; i++) { if(argv[i][0] == '-') break; strncat(prompt, argv[i], 1024*1024); - if(i < c - 1){ + if(i < c - 1) { strncat(prompt, " ", 1024*1024); - }else{ + } else { strncat(prompt, ".", 1024*1024); } } - if(!*prompt){ + if(!*prompt) { free(prompt); return NULL; } return prompt; } -bool try_prompt(int argc,char*argv[]){ - char * prompt = get_prompt_from_args(argc, argv); - if(prompt != NULL){ +bool try_prompt(int argc,char*argv[]) { + char * prompt = get_prompt_from_args(argc, argv); + if(prompt != NULL) { char * response = openai_chat("user",prompt); parse_markdown_to_ansi(response); printf("\n"); @@ -40,59 +40,54 @@ bool try_prompt(int argc,char*argv[]){ void help(); void render(char *); -void serve(){ +void serve() { render("Starting server. *Put executables in a dir named cgi-bin and they will behave as webpages.*"); int res = system("python3 -m http.server --cgi"); - // Thanks tsoding! (void)res; } - -void render(char * content){ +void render(char * content) { parse_markdown_to_ansi(content); printf("\n\n"); } -void repl(){ +void repl() { line_init(); setbuf(stdout, NULL); char *line; char *previous_line = NULL; - while((line = line_read("> "))){ - if(!line || !*line){ + while((line = line_read("> "))) { + if(!line || !*line) { line = previous_line; } if(!line || !*line) continue; previous_line = line; - if(line[0] == '!'){ + if(line[0] == '!') { plugin_run(line + 1); continue; } - if(!strncmp(line,"exit", 4)){ + if(!strncmp(line,"exit", 4)) { exit(0); } - if(!strncmp(line,"help",4)){ + if(!strncmp(line,"help",4)) { help(); continue; } - if(!strncmp(line,"serve",5)){ + if(!strncmp(line,"serve",5)) { serve(); } - if(!strncmp(line,"spar ",5)){ + if(!strncmp(line,"spar ",5)) { char * response = line+5; - while(true){ + while(true) { render(response); sleep(2); - //line = line_read("> "); - //if(!*line) - response = openai_chat("user",response); - - } + response = openai_chat("user",response); + } } - if(!strncmp(line,"ls",2) || !strncmp(line,"list",4)){ + if(!strncmp(line,"ls",2) || !strncmp(line,"list",4)) { int offset = 2; - if(!strncmp(line,"list",4)){ + if(!strncmp(line,"list",4)) { offset = 4; } char * command = (char *)malloc(strlen(line) + 42); @@ -112,8 +107,7 @@ void repl(){ } } - -void help(){ +void help() { char help_text[1024*1024] = {0}; char * template = "# Help\n" "Written by retoor@molodetz.nl.\n\n" @@ -133,13 +127,13 @@ void help(){ " - **google search** and actions with those results.\n" " - **reminders**.\n" " - predefined **templates** for **reviewing** / **refactoring** so you can personalize.\n"; - sprintf(help_text,template,prompt_temperature,prompt_model,prompt_max_tokens); - render(help_text); + sprintf(help_text,template,prompt_temperature,prompt_model,prompt_max_tokens); + render(help_text); } -void openai_include(char * path){ +void openai_include(char * path) { FILE * file = fopen(path,"r"); - if(file == NULL){ + if(file == NULL) { return; } fseek(file, 0, SEEK_END); @@ -148,7 +142,7 @@ void openai_include(char * path){ char * buffer = (char *)malloc(size); size_t read = fread(buffer,1,size,file); - if(read == 0){ + if(read == 0) { return; } @@ -159,27 +153,27 @@ void openai_include(char * path){ free(buffer); } -void init(){ - line_init(); - const char *locale = setlocale(LC_ALL, NULL); - char payload[4096] = {0}; - sprintf(payload, "User locale is %s. User lang is %s.\n" - "You are Retoor. Use a lot of markdown in response.\n" - "Be confident and short in answers.\n" - "You divide things by zero if you have to." - , locale, locale); - - printf("%s","Loading..."); - openai_system(payload); - openai_include("context.txt"); - printf("%s", "\rLoaded! Type help for feautures.\n"); +void init() { + line_init(); + const char *locale = setlocale(LC_ALL, NULL); + char payload[4096] = {0}; + sprintf(payload, "User locale is %s. User lang is %s.\n" + "You are Retoor. Use a lot of markdown in response.\n" + "Be confident and short in answers.\n" + "You divide things by zero if you have to." + , locale, locale); + + printf("%s","Loading..."); + openai_system(payload); + openai_include("context.txt"); + printf("%s", "\rLoaded! Type help for feautures.\n"); } -int main(int argc, char *argv[]){ +int main(int argc, char *argv[]) { init(); if(try_prompt(argc,argv)) return 0; repl(); return 0; -} +} \ No newline at end of file diff --git a/messages.h b/messages.h index ce037bd..fb819ee 100644 --- a/messages.h +++ b/messages.h @@ -29,4 +29,4 @@ void message_free(){ _message_array = NULL; } } -#endif \ No newline at end of file +#endif \ No newline at end of file diff --git a/openai.h b/openai.h index dc03333..37dd3bc 100644 --- a/openai.h +++ b/openai.h @@ -27,7 +27,6 @@ bool openai_system(char * content){ return is_done; } - char *openai_chat(char * role, char * content){ const char *hostname = "api.openai.com"; char *url = "/v1/chat/completions"; @@ -50,7 +49,6 @@ char *openai_chat(char * role, char * content){ return NULL; } - // Get the first element of the "choices" array struct json_object *first_choice = json_object_array_get_idx(choices_array, 0); if (!first_choice) { fprintf(stderr, "Failed to get the first element of 'choices'.\n"); @@ -58,7 +56,6 @@ char *openai_chat(char * role, char * content){ return NULL; } - // Extract the "message" object struct json_object *message_object; if (!json_object_object_get_ex(first_choice, "message", &message_object)) { fprintf(stderr, "Failed to get 'message' object.\n"); @@ -66,19 +63,14 @@ char *openai_chat(char * role, char * content){ return NULL; } - // Print the "message" object - // printf("Message object:\n%s\n", json_object_to_json_string_ext(message_object, JSON_C_TO_STRING_PRETTY)); message_add("assistant",(char *)json_object_get_string(json_object_object_get(message_object, "content"))); - // Clean up free(data); free(result); result = strdup((char *)json_object_get_string(json_object_object_get(message_object, "content"))); json_object_put(parsed_json); - //printf("Parsed JSON:\n%s\n", json_object_to_json_string_ext(parsed_json, JSON_C_TO_STRING_PRETTY)); - return result; } -#endif \ No newline at end of file +#endif \ No newline at end of file diff --git a/plugin.h b/plugin.h index 6f42a18..f2490e5 100644 --- a/plugin.h +++ b/plugin.h @@ -8,9 +8,8 @@ bool plugin_construct(){ if(plugin_initialized) return true; - Py_Initialize(); + Py_Initialize(); - // Check if Python initialized successfully if (!Py_IsInitialized()) { fprintf(stderr, "Failed to initialize Python interpreter\n"); return plugin_initialized;