62 lines
1.9 KiB
C
62 lines
1.9 KiB
C
/*
|
|
* aiwin.c - AI Chat Window Management
|
|
*
|
|
* Provides functions for managing the AI chat window (ProfAiWin) in the
|
|
* profanity client. This includes retrieving window strings for identification,
|
|
* displaying AI/LLM responses in the chat view, and handling error messages
|
|
* from AI interactions.
|
|
*
|
|
* Key functions:
|
|
* aiwin_get_string() - Returns a descriptive string for the window
|
|
* aiwin_display_response() - Displays an AI/LLM response and appends it
|
|
* to the conversation history
|
|
* aiwin_display_error() - Displays an error message from AI operations
|
|
*
|
|
* vim: expandtab:ts=4:sts=4:sw=4
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include <assert.h>
|
|
|
|
#include "ai/ai_client.h"
|
|
#include "log.h"
|
|
#include "ui/ui.h"
|
|
#include "ui/win_types.h"
|
|
|
|
char*
|
|
aiwin_get_string(ProfAiWin* win)
|
|
{
|
|
assert(win->memcheck == PROFAIWIN_MEMCHECK);
|
|
return g_strdup_printf("AI Chat (%s: %s)", win->session->provider_name, win->session->model);
|
|
}
|
|
|
|
void
|
|
aiwin_display_response(ProfAiWin* win, const char* response)
|
|
{
|
|
log_debug("[AI-WIN] aiwin_display_response ENTER: win=%p, response='%s'", (void*)win, response);
|
|
assert(win->memcheck == PROFAIWIN_MEMCHECK);
|
|
|
|
if (!response) {
|
|
log_error("[AI-WIN] FAIL: null response");
|
|
return;
|
|
}
|
|
|
|
// Display AI response
|
|
win_println(&win->window, THEME_DEFAULT, "<< LLM:", "%s", response);
|
|
log_debug("[AI-WIN] Displayed AI response");
|
|
}
|
|
|
|
void
|
|
aiwin_display_error(ProfAiWin* win, const char* error_msg)
|
|
{
|
|
log_debug("[AI-WIN] aiwin_display_error ENTER: win=%p, error='%s'", (void*)win, error_msg);
|
|
assert(win->memcheck == PROFAIWIN_MEMCHECK);
|
|
|
|
const char* msg = error_msg ? error_msg : "Unknown error";
|
|
win_println(&win->window, THEME_ERROR, "[ERROR]", "%s", msg);
|
|
|
|
// Also show error in console so user sees it regardless of active window
|
|
cons_show_error("AI Error: %s", msg);
|
|
}
|