From a8799cfee2de8ac53cc07c571c56ae5d9c98cbbd Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Fri, 17 Oct 2025 19:02:21 +0200 Subject: model selection for ai service --- src/importer.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src/importer.cpp') 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) -- cgit v1.2.3-70-g09d2