summaryrefslogtreecommitdiff
path: root/src/importer.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-10-17 19:02:21 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-10-17 19:02:21 +0200
commita8799cfee2de8ac53cc07c571c56ae5d9c98cbbd (patch)
treebfbff345e11ce8d75b7a86a611367bdc63c6dcfd /src/importer.cpp
parent18b9e47b88ab483b8f6fa0b133519546846fbb5e (diff)
model selection for ai service
Diffstat (limited to 'src/importer.cpp')
-rw-r--r--src/importer.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/importer.cpp b/src/importer.cpp
index 23960b1..e40de5b 100644
--- a/src/importer.cpp
+++ b/src/importer.cpp
@@ -160,6 +160,50 @@ importer::invoice_request* importer::ai_document_to_invoice(char* file_path)
return result;
}
+static int _ai_get_available_models_t(void* arg)
+{
+ importer::model_list_request* request = (importer::model_list_request*)arg;
+ importer::ai_provider_impl impl = importer::get_ai_provider_implementation(request->service);
+
+ if (!impl.get_available_models) {
+ request->status = importer::status::IMPORT_DONE;
+ request->error = I_ERR_UNIMPLEMENTED;
+ return 0;
+ }
+
+ request->status = importer::status::IMPORT_WAITING_FOR_RESPONSE;
+
+ if (!impl.get_available_models(request)) {
+ request->status = importer::status::IMPORT_DONE;
+ request->error = I_ERR_FAILED_QUERY;
+ return 0;
+ }
+
+ request->status = importer::status::IMPORT_DONE;
+
+ return 0;
+}
+
+importer::model_list_request* importer::ai_get_available_models(ai_provider service)
+{
+ importer::model_list_request* result = (importer::model_list_request*)memops::alloc(sizeof(importer::model_list_request));
+ result->started_at = time(NULL);
+ result->error = I_ERR_SUCCESS;
+ result->status = importer::status::IMPORT_STARTING;
+ result->result_count = 0;
+ result->service = service;
+ memset(result->result, 0, sizeof(result->result));
+
+ thrd_t thr;
+ if (thrd_create(&thr, _ai_get_available_models_t, result) != thrd_success) {
+ result->status = importer::status::IMPORT_DONE;
+ result->error = I_ERR_FAILED_QUERY;
+ return 0;
+ }
+
+ return result;
+}
+
const char* importer::status_to_string(importer::status status)
{
switch(status)