From d0515933f43c31f5caf6b3dbd138f7781a2c629e Mon Sep 17 00:00:00 2001 From: Didactyl User Date: Fri, 7 Aug 2026 12:28:18 -0400 Subject: [PATCH] v0.2.64 - Skip ppq.ai balance check (not supported); fix ppq.ai base URL to /v1 for model discovery --- README.md | 4 ++-- src/main.h | 4 ++-- src/setup_wizard.c | 14 ++++++++------ 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index d72d6b2..857b541 100644 --- a/README.md +++ b/README.md @@ -54,11 +54,11 @@ Skills compose by adoption-list order (`10123`) and trigger tags carry runtime e Didactyl will support local inference, which is very privacy preserving. Remote inference does however have it's advantages, and in those cases Didactyl supports using Bitcoin Lightning and eCash inference providers. -## Current Status — v0.2.63 +## Current Status — v0.2.64 **Active build — this project is barely working. Experiment at your own risk.** -> Last release update: v0.2.63 — Fix Dockerfile: add missing tool_signer_crypto.c to static build source list +> Last release update: v0.2.64 — Skip ppq.ai balance check (not supported); fix ppq.ai base URL to /v1 for model discovery - Connects to configured relays with auto-reconnect and relay state transition logging - Publishes configured startup events per relay as each relay becomes connected diff --git a/src/main.h b/src/main.h index 99f9b32..91c9675 100644 --- a/src/main.h +++ b/src/main.h @@ -12,8 +12,8 @@ // Using DIDACTYL_ prefix to avoid conflicts with nostr_core_lib VERSION macros #define DIDACTYL_VERSION_MAJOR 0 #define DIDACTYL_VERSION_MINOR 2 -#define DIDACTYL_VERSION_PATCH 63 -#define DIDACTYL_VERSION "v0.2.63" +#define DIDACTYL_VERSION_PATCH 64 +#define DIDACTYL_VERSION "v0.2.64" // Agent metadata #define DIDACTYL_NAME "Didactyl" diff --git a/src/setup_wizard.c b/src/setup_wizard.c index da871d9..250c055 100644 --- a/src/setup_wizard.c +++ b/src/setup_wizard.c @@ -1740,15 +1740,17 @@ static int extract_balance_value(const cJSON* root, double* out_balance) { static void wizard_check_provider_balance(const llm_config_t* llm_cfg) { if (!llm_cfg || llm_cfg->base_url[0] == '\0') return; - const char* paths_ppq[] = {"/credits", "/credit", "/balance", "/v1/credits"}; + /* ppq.ai does not expose a balance/credits endpoint via API key alone. */ + if (strcmp(llm_cfg->provider, "ppq") == 0) { + fprintf(stderr, " Balance check: skipped for ppq.ai\n"); + return; + } + const char* paths_routstr[] = {"/balance", "/credits", "/v1/balance"}; const char** paths = NULL; size_t path_count = 0; - if (strcmp(llm_cfg->provider, "ppq") == 0) { - paths = paths_ppq; - path_count = sizeof(paths_ppq) / sizeof(paths_ppq[0]); - } else if (strcmp(llm_cfg->provider, "routstr") == 0) { + if (strcmp(llm_cfg->provider, "routstr") == 0) { paths = paths_routstr; path_count = sizeof(paths_routstr) / sizeof(paths_routstr[0]); } else { @@ -1923,7 +1925,7 @@ static int prompt_llm_config_with_header(didactyl_config_t* cfg, char base_url[OW_MAX_URL_LEN] = {0}; if (provider_choice == '1') { snprintf(provider, sizeof(provider), "%s", "ppq"); - snprintf(base_url, sizeof(base_url), "%s", "https://api.ppq.ai"); + snprintf(base_url, sizeof(base_url), "%s", "https://api.ppq.ai/v1"); } else if (provider_choice == '2') { snprintf(provider, sizeof(provider), "%s", "routstr"); snprintf(base_url, sizeof(base_url), "%s", "https://api.routstr.com");