Update.
This commit is contained in:
parent
bff6e758bc
commit
89be6b8542
9
Makefile
9
Makefile
@ -1,4 +1,4 @@
|
||||
all: build build_rpylib run
|
||||
all: build build_free build_rpylib run_free
|
||||
|
||||
# Variables for compiler and flags
|
||||
CC = gcc
|
||||
@ -9,9 +9,16 @@ build:
|
||||
$(CC) main.c $(CFLAGS) -o r
|
||||
publish r
|
||||
|
||||
build_free:
|
||||
$(CC) -DOLLAMA main.c $(CFLAGS) -o rf
|
||||
publish rf
|
||||
|
||||
build_rpylib:
|
||||
$(CC) -shared -o rpylib.so -fPIC rpylib.c -lpython3.12 `python3-config --includes` -I/usr/include/CL -ljson-c -lcurl -lsqlite3
|
||||
publish rpylib.so
|
||||
|
||||
run:
|
||||
./r --verbose
|
||||
|
||||
run_free:
|
||||
./rf --verbose
|
||||
|
14
main.c
14
main.c
@ -219,12 +219,20 @@ void repl() {
|
||||
is_verbose ? "Verbose mode enabled" : "Verbose mode disabled");
|
||||
continue;
|
||||
}
|
||||
if (line && *line != '\n') {
|
||||
|
||||
line_add_history(line);
|
||||
}
|
||||
if (!strncmp(line, "!models", 7)) {
|
||||
printf("Current model: %s\n", openai_fetch_models());
|
||||
continue;
|
||||
}
|
||||
if (!strncmp(line, "!model", 6)) {
|
||||
if (!strncmp(line + 6, " ", 1)) {
|
||||
line = line + 7;
|
||||
set_prompt_model(line);
|
||||
}
|
||||
printf("%s\n", get_prompt_model());
|
||||
printf("Current model: %s\n", get_prompt_model());
|
||||
continue;
|
||||
}
|
||||
if (!strncmp(line, "exit", 4)) {
|
||||
@ -239,7 +247,7 @@ void repl() {
|
||||
continue;
|
||||
}
|
||||
while (line && *line != '\n') {
|
||||
line_add_history(line);
|
||||
|
||||
char *response = openai_chat("user", line);
|
||||
if (response) {
|
||||
render(response);
|
||||
@ -253,6 +261,8 @@ void repl() {
|
||||
}
|
||||
|
||||
free(response);
|
||||
} else {
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
26
openai.h
26
openai.h
@ -31,16 +31,13 @@
|
||||
|
||||
#ifndef R_OPENAI_H
|
||||
#define R_OPENAI_H
|
||||
|
||||
#include "chat.h"
|
||||
#include "http_curl.h"
|
||||
#include "r.h"
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
|
||||
char *openai_fetch_models() {
|
||||
const char *api_url = "https://api.openai.com/v1/models";
|
||||
return curl_get(api_url);
|
||||
}
|
||||
char *openai_fetch_models() { return curl_get(models_api_url); }
|
||||
|
||||
bool openai_system(char *message_content) {
|
||||
chat_json("system", message_content);
|
||||
@ -50,13 +47,18 @@ bool openai_system(char *message_content) {
|
||||
struct json_object *openai_process_chat_message(const char *api_url,
|
||||
const char *json_data) {
|
||||
char *response = curl_post(api_url, json_data);
|
||||
if (!response) {
|
||||
fprintf(stderr, "Failed to get response.\n");
|
||||
return NULL;
|
||||
}
|
||||
struct json_object *parsed_json = json_tokener_parse(response);
|
||||
if (!parsed_json) {
|
||||
fprintf(stderr, "Failed to parse JSON.\n%s\n", response);
|
||||
fprintf(stderr, "Failed to parse JSON.\nContent: \"%s\"\n", response);
|
||||
return NULL;
|
||||
}
|
||||
struct json_object *error_object;
|
||||
if (json_object_object_get_ex(parsed_json, "error", &error_object)) {
|
||||
if (json_object_object_get_ex(parsed_json, "error", &error_object) &&
|
||||
message_array) {
|
||||
|
||||
char *all_messages = (char *)json_object_to_json_string(message_array);
|
||||
|
||||
@ -103,16 +105,16 @@ char *openai_chat(const char *user_role, const char *message_content) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *api_url = "https://api.openai.com/v1/chat/completions";
|
||||
char *json_data = chat_json(user_role, message_content);
|
||||
|
||||
struct json_object *message_object =
|
||||
openai_process_chat_message(api_url, json_data);
|
||||
message_add_object(message_object);
|
||||
openai_process_chat_message(completions_api_url, json_data);
|
||||
|
||||
if (message_object == NULL) {
|
||||
printf("ERROR + NULL IS SUCCESS\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
message_add_object(message_object);
|
||||
struct json_object *tool_calls;
|
||||
json_object_object_get_ex(message_object, "tool_calls", &tool_calls);
|
||||
if (tool_calls) {
|
||||
@ -126,7 +128,7 @@ char *openai_chat(const char *user_role, const char *message_content) {
|
||||
}
|
||||
char *tool_calls_result_str = chat_json(NULL, NULL);
|
||||
message_object =
|
||||
openai_process_chat_message(api_url, tool_calls_result_str);
|
||||
openai_process_chat_message(completions_api_url, tool_calls_result_str);
|
||||
if (message_object == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
17
r.h
17
r.h
@ -7,6 +7,19 @@
|
||||
#include <string.h>
|
||||
bool is_verbose = false;
|
||||
|
||||
#ifndef OLLAMA
|
||||
char *models_api_url = "https://api.openai.com/v1/models";
|
||||
// char *completions_api_url = "https://ollama.molodetz.nl/v1/chat/completions";
|
||||
char *completions_api_url = "https://api.openai.com/v1/chat/completions";
|
||||
char *advanced_model = "gpt-4o-mini";
|
||||
char *fast_model = "gpt-3.5-turbo";
|
||||
#else
|
||||
char *models_api_url = "https://ollama.molodetz.nl/v1/models";
|
||||
char *completions_api_url = "https://ollama.molodetz.nl/v1/chat/completions";
|
||||
char *advanced_model = "qwen2.5:3b";
|
||||
char *fast_model = "qwen2.5:0.5b";
|
||||
#endif
|
||||
|
||||
char *_model = NULL;
|
||||
|
||||
#define DB_FILE "~/.r.db"
|
||||
@ -23,10 +36,10 @@ void set_prompt_model(const char *model) {
|
||||
const char *get_prompt_model() {
|
||||
if (auth_type != AUTH_TYPE_API_KEY) {
|
||||
if (_model == NULL) {
|
||||
_model = strdup("gpt-3.5-turbo");
|
||||
_model = strdup(fast_model);
|
||||
}
|
||||
} else if (_model == NULL) {
|
||||
_model = strdup("gpt-4o-mini");
|
||||
_model = strdup(advanced_model);
|
||||
}
|
||||
return _model;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user