[#110] Add AI client with multi-provider support and UI #113

Manually merged
jabber.developer merged 64 commits from feat/ai into master 2026-05-15 02:22:56 +00:00
67 changed files with 3154 additions and 13818 deletions
Showing only changes of commit f133d81a05 - Show all commits

View File

@@ -192,7 +192,7 @@ static AIProvider*
ai_provider_ref(AIProvider* provider)
{
if (provider) {
provider->ref_count++;
g_atomic_int_inc(&provider->ref_count);
}
return provider;
}
@@ -203,9 +203,9 @@ ai_provider_unref(AIProvider* provider)
if (!provider)
return;
provider->ref_count--;
if (provider->ref_count > 0)
if (!g_atomic_int_dec_and_test(&provider->ref_count)) {
return;
}
g_free(provider->name);
g_free(provider->api_url);
@@ -451,7 +451,7 @@ AISession*
ai_session_ref(AISession* session)
{
if (session) {
session->ref_count++;
g_atomic_int_inc(&session->ref_count);
}
return session;
}
@@ -462,9 +462,9 @@ ai_session_unref(AISession* session)
if (!session)
return;
session->ref_count--;
if (session->ref_count > 0)
if (!g_atomic_int_dec_and_test(&session->ref_count)) {
return;
}
g_free(session->provider_name);
ai_provider_unref(session->provider);

View File

@@ -22,7 +22,7 @@ typedef struct ai_provider_t
gchar* org_id; /* Optional organization ID */
gchar* project_id; /* Optional project ID (for some providers) */
GList* models; /* List of available models (gchar*) */
guint ref_count; /* Reference count */
gint32 ref_count; /* Reference count (atomic) */
} AIProvider;
/**
@@ -35,7 +35,7 @@ typedef struct ai_session_t
gchar* model; /* Model identifier (e.g., "gpt-4", "sonar") */
gchar* api_key; /* API key for this session */
GList* history; /* Conversation history (GList of AIMessage*) */
guint ref_count; /* Reference count */
gint32 ref_count; /* Reference count (atomic) */
} AISession;
/* ========================================================================