#ifndef CALPACA_OPENAI_H #define CALPACA_OPENAI_H #include "http.h" #include "chat.h" #include #include char *openai_get_models() { const char *hostname = "api.openai.com"; char *url = "/v1/models"; char *result = http_get(hostname, url); return result; } bool openai_system(char * content){ bool is_done = false; const char *hostname = "api.openai.com"; char *url = "/v1/chat/completions"; char *data = chat_json("system", content); char *result = http_post(hostname, url, data); if(result){ is_done = true; free(result); } return is_done; } char *openai_chat(char * role, char * content){ const char *hostname = "api.openai.com"; char *url = "/v1/chat/completions"; char *data = chat_json(role, content); char *result = http_post(hostname, url, data); char * body = strstr(result,"\r\n\r\n") +4; body = strstr(body,"\r\n"); body = strstr(body,"\r\n"); *(body - 5) = 0; struct json_object *parsed_json = json_tokener_parse(body); if (!parsed_json) { fprintf(stderr, "Failed to parse JSON.\n"); return NULL; } struct json_object *choices_array; if (!json_object_object_get_ex(parsed_json, "choices", &choices_array)) { fprintf(stderr, "Failed to get 'choices' array.\n"); json_object_put(parsed_json); return NULL; } 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"); json_object_put(parsed_json); return NULL; } struct json_object *message_object; if (!json_object_object_get_ex(first_choice, "message", &message_object)) { fprintf(stderr, "Failed to get 'message' object.\n"); json_object_put(parsed_json); return NULL; } message_add("assistant",(char *)json_object_get_string(json_object_object_get(message_object, "content"))); free(data); free(result); result = strdup((char *)json_object_get_string(json_object_object_get(message_object, "content"))); json_object_put(parsed_json); return result; } #endif