mirror of
https://git.jabber.space/devs/cproof.git
synced 2026-07-28 07:16:20 +00:00
fix(ai): persistence and command-output fixes
- Persist per-provider default model in [ai] prefs (set/get/remove helpers, load on init, clear with provider removal). Previously /ai set default-model only updated runtime state. - Stop re-seeding openai/perplexity into [ai] every time the configured provider list is empty. The defaults are now seeded once, guarded by a "defaults_initialized" sentinel, so removing every provider does not silently restore them. - /ai providers (no arg) now lists the configured providers with key status, instead of the hardcoded openai/perplexity blurb. - /ai models <provider> (fresh fetch) prints the model names it cached, not just a count. Previously the user had to follow up with --cached to actually see them. - /ai remove provider now also clears the persisted default model, token, and cached model list, leaving no orphan keys in [ai]. - Drop dead ai_models_find declaration from ai_client.h (no implementation in this tree).
This commit is contained in:
@@ -296,13 +296,16 @@ ai_client_init(void)
|
||||
/* Load saved API keys from config */
|
||||
ai_load_keys();
|
||||
|
||||
/* Load cached models for all providers */
|
||||
/* Load cached models and persisted default-model for all providers */
|
||||
GList* provider_list = ai_list_providers();
|
||||
GList* models_curr = provider_list;
|
||||
while (models_curr) {
|
||||
AIProvider* provider = (AIProvider*)models_curr->data;
|
||||
for (GList* curr = provider_list; curr; curr = g_list_next(curr)) {
|
||||
AIProvider* provider = (AIProvider*)curr->data;
|
||||
_ai_load_models_for_provider(provider);
|
||||
models_curr = g_list_next(models_curr);
|
||||
auto_gchar gchar* dm = prefs_ai_get_default_model(provider->name);
|
||||
if (dm && dm[0] != '\0') {
|
||||
g_free(provider->default_model);
|
||||
provider->default_model = g_strdup(dm);
|
||||
}
|
||||
}
|
||||
g_list_free(provider_list);
|
||||
|
||||
@@ -400,6 +403,9 @@ ai_remove_provider(const gchar* name)
|
||||
|
||||
/* Remove from config before removing from hash table */
|
||||
prefs_ai_remove_provider(name);
|
||||
prefs_ai_remove_default_model(name);
|
||||
prefs_ai_remove_models(name);
|
||||
prefs_ai_remove_token(name);
|
||||
|
||||
/* Sync autocomplete before removing */
|
||||
autocomplete_remove(providers_ac, name);
|
||||
@@ -501,6 +507,7 @@ ai_set_provider_default_model(const gchar* provider_name, const gchar* model)
|
||||
|
||||
g_free(provider->default_model);
|
||||
provider->default_model = g_strdup(model);
|
||||
prefs_ai_set_default_model(provider_name, model);
|
||||
log_info("Default model for provider '%s' set to: %s", provider_name, model);
|
||||
}
|
||||
|
||||
@@ -979,9 +986,18 @@ _models_response_handler(AIProvider* provider, const gchar* response, gpointer u
|
||||
{
|
||||
_parse_and_cache_models(provider, response);
|
||||
|
||||
auto_gchar gchar* msg = g_strdup_printf("Cached %d models for provider '%s'. Use '/ai start <provider> <model>' to start a chat.",
|
||||
g_list_length(provider->models), provider->name);
|
||||
_aiwin_display_response(user_data, msg);
|
||||
gint count = g_list_length(provider->models);
|
||||
GString* msg = g_string_new(NULL);
|
||||
g_string_append_printf(msg, "Cached %d models for provider '%s':", count, provider->name);
|
||||
for (GList* curr = provider->models; curr; curr = g_list_next(curr)) {
|
||||
g_string_append_printf(msg, "\n %s", (const gchar*)curr->data);
|
||||
}
|
||||
if (count > 0) {
|
||||
g_string_append_printf(msg, "\nUse '/ai start %s <model>' to start a chat.", provider->name);
|
||||
}
|
||||
|
||||
auto_gchar gchar* out = g_string_free(msg, FALSE);
|
||||
_aiwin_display_response(user_data, out);
|
||||
}
|
||||
|
||||
static gpointer
|
||||
|
||||
Reference in New Issue
Block a user