#ifndef CALPACA_OPENAI_H
#define CALPACA_OPENAI_H
#include "http.h"
#include "chat.h"
#include <string.h>
#include <stdbool.h>
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