/* * Copyright (c) 2025 Aldrik Ramaekers * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #pragma once #include "administration.hpp" #define MAX_MODEL_LIST_RESULT_COUNT 50 #define I_ERR_SUCCESS 0 #define I_ERR_FAILED_UPLOAD 1 #define I_ERR_FAILED_QUERY 2 #define I_ERR_FAILED_IMPORT 3 #define I_ERR_UNIMPLEMENTED 4 typedef uint32_t i_err; namespace importer { typedef enum { IMPORT_STARTING, IMPORT_UPLOADING_FILE, IMPORT_QUERYING, IMPORT_WAITING_FOR_RESPONSE, IMPORT_DONE, } status; typedef struct { time_t started_at; invoice result; char file_path[MAX_LEN_PATH]; i_err error; status status; } invoice_request; typedef struct { time_t started_at; i_err error; status status; u32 result_count; char result[MAX_MODEL_LIST_RESULT_COUNT][MAX_LEN_SHORT_DESC]; ai_provider service; } model_list_request; typedef struct { char* provider_name; char* default_model; bool (*upload_file)(char* file_path, char* file_id, size_t file_id_len); bool (*query_with_file)(char* query, size_t query_length, char* file_id, char** response); bool (*get_available_models)(model_list_request* buffer); } ai_provider_impl; const char* error_to_string(i_err error); const char* status_to_string(status status); ai_provider_impl get_ai_provider_implementation(ai_provider provider); invoice_request* ai_document_to_invoice(char* file_path); model_list_request* ai_get_available_models(ai_provider service); }