summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@mailbox.org>2026-01-09 11:45:12 +0100
committerAldrik Ramaekers <aldrik@mailbox.org>2026-01-09 11:45:12 +0100
commita65e876f3277a7d7fca6e5129ac3e200dae2d0dc (patch)
tree3d777dca9e07bf1fbd4a8641e1a4719094ac7789 /include
parent8bdab613289e2626173de8bff31e7078dd03a16e (diff)
save all ai service configs
Diffstat (limited to 'include')
-rw-r--r--include/administration.hpp18
-rw-r--r--include/file_templates.hpp16
2 files changed, 24 insertions, 10 deletions
diff --git a/include/administration.hpp b/include/administration.hpp
index 5c39d59..2179301 100644
--- a/include/administration.hpp
+++ b/include/administration.hpp
@@ -44,6 +44,8 @@
#define MAX_LEN_PROJECT_REPORT_COSTCENTERS 50
#define MAX_BILLING_ITEMS 50
+#define MAX_AI_SERVICES AI_PROVIDER_END
+
#define ACTIVITY_MAX_PARAMS 3
#define ACTIVITY_USER "user"
#define ACTIVITY_SYSTEM "system"
@@ -394,7 +396,8 @@ typedef void (*project_changed_event)(project* project);
typedef enum
{
AI_PROVIDER_OPENAI = 0,
- //AI_PROVIDER_DEEPSEEK = 1,
+ AI_PROVIDER_GEMINI = 1,
+ AI_PROVIDER_PERPLEXITY = 2,
AI_PROVIDER_END,
} ai_provider;
@@ -403,7 +406,7 @@ typedef struct
{
ai_provider provider;
char model_name[MAX_LEN_SHORT_DESC];
- char api_key_public[MAX_LEN_API_KEY];
+ char api_key_public[MAX_LEN_API_KEY]; // @TODO rename to api_key
} ai_service;
typedef enum
@@ -449,7 +452,10 @@ typedef struct
list_t invoices;
// Service providers.
- ai_service ai_service;
+ u32 ai_service_count;
+ ai_service all_ai_services[MAX_AI_SERVICES];
+ ai_service ai_service; // @TODO rename to active_ai_service
+
email_service email_service;
} ledger;
@@ -518,12 +524,14 @@ namespace administration {
char* get_currency_symbol_for_currency(char* code);
char* get_default_currency();
time_t get_default_invoice_expire_duration();
- ai_service get_ai_service();
+ ai_service get_active_ai_service();
+ ai_service get_ai_service(ai_provider provider);
email_service get_email_service();
void set_file_path(char* path);
void set_next_id(s32 nr);
void set_next_sequence_number(s32 nr);
- void set_ai_service(ai_service provider);
+ void set_active_ai_service(ai_service provider);
+ void import_ai_service(ai_service provider);
void set_email_service(email_service provider);
void create_income_statement(income_statement* statement);
bool company_info_is_valid();
diff --git a/include/file_templates.hpp b/include/file_templates.hpp
index ec78cb7..b79b5bf 100644
--- a/include/file_templates.hpp
+++ b/include/file_templates.hpp
@@ -61,16 +61,22 @@ namespace file_template {
" </Address>\n"
"</Contact>";
+ static const char* ai_service_template =
+ " <AIService>\n"
+ " <Provider>{{AI_SERVICE_PROVIDER}}</Provider>\n"
+ " <PublicKey>{{AI_SERVICE_KEY}}</PublicKey>\n"
+ " <Model>{{AI_SERVICE_MODEL}}</Model>\n"
+ " </AIService>\n";
+
static const char* administration_save_template =
"<Administration>\n"
" <NextId>{{NEXT_ID}}</NextId>\n"
" <NextSequenceNumber>{{NEXT_SEQUENCE_NUMBER}}</NextSequenceNumber>\n"
" <ProgramVersion>{{PROGRAM_VERSION}}</ProgramVersion>\n"
- " <AIService>\n"
- " <Provider>{{AI_SERVICE_PROVIDER}}</Provider>\n"
- " <PublicKey>{{AI_SERVICE_PUBLIC_KEY}}</PublicKey>\n"
- " <Model>{{AI_SERVICE_MODEL}}</Model>\n"
- " </AIService>\n"
+ " <AIServices>\n"
+ " <Provider>{{ACTIVE_AI_SERVICE_PROVIDER}}</Provider>\n"
+ " {{AI_SERVICE_LIST}}\n"
+ " </AIServices>\n"
" <EmailService>\n"
" <Provider>{{EMAIL_SERVICE_PROVIDER}}</Provider>\n"
" <PublicKey>{{EMAIL_SERVICE_KEY}}</PublicKey>\n"