ref(ai): add stub, fix includes, move aiwin_send_message location
Some checks failed
CI Code / Check spelling (pull_request) Successful in 22s
CI Code / Check coding style (pull_request) Successful in 34s
CI Code / Linux (debian) (pull_request) Failing after 2m57s
CI Code / Linux (ubuntu) (pull_request) Failing after 3m9s
CI Code / Linux (arch) (pull_request) Failing after 3m13s
CI Code / Code Coverage (pull_request) Successful in 2m54s
Some checks failed
CI Code / Check spelling (pull_request) Successful in 22s
CI Code / Check coding style (pull_request) Successful in 34s
CI Code / Linux (debian) (pull_request) Failing after 2m57s
CI Code / Linux (ubuntu) (pull_request) Failing after 3m9s
CI Code / Linux (arch) (pull_request) Failing after 3m13s
CI Code / Code Coverage (pull_request) Successful in 2m54s
This commit is contained in:
@@ -808,12 +808,10 @@ _ai_request_thread(gpointer data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
ai_send_prompt(AISession* session, const gchar* prompt,
|
ai_send_prompt(AISession* session, const gchar* prompt, gpointer user_data)
|
||||||
ai_response_cb response_cb, ai_error_cb error_cb,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
{
|
||||||
log_debug("[AI-PROMPT] ENTER: session=%p, prompt='%s', response_cb=%p, error_cb=%p, user_data=%p",
|
log_debug("[AI-PROMPT] ENTER: session=%p, prompt='%s', user_data=%p",
|
||||||
(void*)session, prompt, (void*)response_cb, (void*)error_cb, user_data);
|
(void*)session, prompt, user_data);
|
||||||
|
|
||||||
if (!session || !prompt) {
|
if (!session || !prompt) {
|
||||||
log_error("[AI-PROMPT] FAIL: invalid session or prompt");
|
log_error("[AI-PROMPT] FAIL: invalid session or prompt");
|
||||||
@@ -824,8 +822,8 @@ ai_send_prompt(AISession* session, const gchar* prompt,
|
|||||||
gpointer* args = g_new0(gpointer, 6);
|
gpointer* args = g_new0(gpointer, 6);
|
||||||
args[0] = ai_session_ref(session);
|
args[0] = ai_session_ref(session);
|
||||||
args[1] = g_strdup(prompt);
|
args[1] = g_strdup(prompt);
|
||||||
args[2] = (gpointer)response_cb;
|
args[2] = (ai_response_cb)aiwin_display_response;
|
||||||
args[3] = (gpointer)error_cb;
|
args[3] = (ai_error_cb)aiwin_display_error;
|
||||||
args[4] = user_data;
|
args[4] = user_data;
|
||||||
args[5] = NULL; /* placeholder for built payload */
|
args[5] = NULL; /* placeholder for built payload */
|
||||||
log_debug("[AI-PROMPT] Prepared args, creating thread...");
|
log_debug("[AI-PROMPT] Prepared args, creating thread...");
|
||||||
|
|||||||
@@ -185,13 +185,10 @@ void ai_session_set_model(AISession* session, const gchar* model);
|
|||||||
* Send a prompt to the AI provider asynchronously.
|
* Send a prompt to the AI provider asynchronously.
|
||||||
* @param session The AI session containing provider and model
|
* @param session The AI session containing provider and model
|
||||||
* @param prompt The prompt to send
|
* @param prompt The prompt to send
|
||||||
* @param response_cb Callback function for successful responses
|
|
||||||
* @param error_cb Callback function for error handling
|
|
||||||
* @param user_data User data to be passed to the callbacks
|
* @param user_data User data to be passed to the callbacks
|
||||||
* @return TRUE if the request was successfully queued, FALSE otherwise
|
* @return TRUE if the request was successfully queued, FALSE otherwise
|
||||||
*/
|
*/
|
||||||
gboolean ai_send_prompt(AISession* session, const gchar* prompt,
|
gboolean ai_send_prompt(AISession* session, const gchar* prompt,
|
||||||
ai_response_cb response_cb, ai_error_cb error_cb,
|
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -81,7 +81,6 @@
|
|||||||
#include "tools/bookmark_ignore.h"
|
#include "tools/bookmark_ignore.h"
|
||||||
#include "tools/editor.h"
|
#include "tools/editor.h"
|
||||||
#include "plugins/plugins.h"
|
#include "plugins/plugins.h"
|
||||||
#include "ui/window.h"
|
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
#include "ui/window_list.h"
|
#include "ui/window_list.h"
|
||||||
#include "xmpp/avatar.h"
|
#include "xmpp/avatar.h"
|
||||||
@@ -8377,8 +8376,7 @@ _cmd_execute_default(ProfWin* window, const char* inp)
|
|||||||
case WIN_AI:
|
case WIN_AI:
|
||||||
{
|
{
|
||||||
ProfAiWin* aiwin = (ProfAiWin*)window;
|
ProfAiWin* aiwin = (ProfAiWin*)window;
|
||||||
assert(aiwin->memcheck == PROFAIWIN_MEMCHECK);
|
cl_ev_send_ai_msg(aiwin, inp, NULL);
|
||||||
aiwin_send_message(aiwin, inp, NULL);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -10896,10 +10894,7 @@ cmd_ai_correct(ProfWin* window, const char* const command, gchar** args)
|
|||||||
|
|
||||||
// Resend the prompt
|
// Resend the prompt
|
||||||
cons_show("Correcting message...");
|
cons_show("Correcting message...");
|
||||||
ai_send_prompt(aiwin->session, args[1],
|
ai_send_prompt(aiwin->session, args[1], aiwin);
|
||||||
(ai_response_cb)aiwin_display_response,
|
|
||||||
(ai_error_cb)aiwin_display_error,
|
|
||||||
aiwin);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,8 +37,10 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include "ai/ai_client.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "chatlog.h"
|
#include "chatlog.h"
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
@@ -47,7 +49,7 @@
|
|||||||
#include "event/common.h"
|
#include "event/common.h"
|
||||||
#include "plugins/plugins.h"
|
#include "plugins/plugins.h"
|
||||||
#include "ui/inputwin.h"
|
#include "ui/inputwin.h"
|
||||||
#include "ui/window_list.h"
|
#include "ui/window.h"
|
||||||
#include "xmpp/chat_session.h"
|
#include "xmpp/chat_session.h"
|
||||||
#include "xmpp/session.h"
|
#include "xmpp/session.h"
|
||||||
#include "xmpp/xmpp.h"
|
#include "xmpp/xmpp.h"
|
||||||
@@ -284,3 +286,24 @@ allow_unencrypted_message(ProfChatWin* chatwin, const char* const msg)
|
|||||||
win_println((ProfWin*)chatwin, THEME_ERROR, "-", "Message not sent: invalid encryption mode (%s). Use '/force-encryption policy resend-to-confirm'.", force_enc_mode);
|
win_println((ProfWin*)chatwin, THEME_ERROR, "-", "Message not sent: invalid encryption mode (%s). Use '/force-encryption policy resend-to-confirm'.", force_enc_mode);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cl_ev_send_ai_msg(ProfAiWin* aiwin, const char* const message, const char* const id)
|
||||||
|
{
|
||||||
|
if (!aiwin || !message) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(aiwin->memcheck == PROFAIWIN_MEMCHECK);
|
||||||
|
|
||||||
|
if (!aiwin->session) {
|
||||||
|
log_error("[AI] AI session not initialized");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display user message in AI window.
|
||||||
|
win_print_outgoing(&aiwin->window, ">>", id, NULL, message);
|
||||||
|
|
||||||
|
// Send to AI provider.
|
||||||
|
ai_send_prompt(aiwin->session, message, aiwin);
|
||||||
|
}
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ void cl_ev_send_msg(ProfChatWin* chatwin, const char* const msg, const char* con
|
|||||||
void cl_ev_send_muc_msg_corrected(ProfMucWin* mucwin, const char* const msg, const char* const oob_url, gboolean correct_last_msg);
|
void cl_ev_send_muc_msg_corrected(ProfMucWin* mucwin, const char* const msg, const char* const oob_url, gboolean correct_last_msg);
|
||||||
void cl_ev_send_muc_msg(ProfMucWin* mucwin, const char* const msg, const char* const oob_url);
|
void cl_ev_send_muc_msg(ProfMucWin* mucwin, const char* const msg, const char* const oob_url);
|
||||||
void cl_ev_send_priv_msg(ProfPrivateWin* privwin, const char* const msg, const char* const oob_url);
|
void cl_ev_send_priv_msg(ProfPrivateWin* privwin, const char* const msg, const char* const oob_url);
|
||||||
|
void cl_ev_send_ai_msg(ProfAiWin* aiwin, const char* const message, const char* const id);
|
||||||
|
|
||||||
// Checks if an unencrypted message can be sent based on encryption preferences.
|
// Checks if an unencrypted message can be sent based on encryption preferences.
|
||||||
// Returns TRUE if allowed, FALSE if blocked.
|
// Returns TRUE if allowed, FALSE if blocked.
|
||||||
|
|||||||
@@ -2434,30 +2434,6 @@ aiwin_get_string(ProfAiWin* win)
|
|||||||
return g_strdup_printf("AI Chat (%s: %s)", win->session->provider_name, win->session->model);
|
return g_strdup_printf("AI Chat (%s: %s)", win->session->provider_name, win->session->model);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
aiwin_send_message(ProfAiWin* win, const char* message, const char* id)
|
|
||||||
{
|
|
||||||
log_debug("[AI-WIN] aiwin_send_message ENTER: win=%p, message='%s'", (void*)win, message);
|
|
||||||
assert(win->memcheck == PROFAIWIN_MEMCHECK);
|
|
||||||
|
|
||||||
if (!win->session) {
|
|
||||||
log_error("[AI-WIN] FAIL: AI session not initialized");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Display user message
|
|
||||||
win_print_outgoing(&win->window, ">>", id, NULL, message);
|
|
||||||
log_debug("[AI-WIN] Displayed user message");
|
|
||||||
|
|
||||||
// Send to AI (ai_send_prompt adds message to history internally)
|
|
||||||
log_debug("[AI-WIN] Calling ai_send_prompt...");
|
|
||||||
gboolean result = ai_send_prompt(win->session, message,
|
|
||||||
(ai_response_cb)aiwin_display_response,
|
|
||||||
(ai_error_cb)aiwin_display_error,
|
|
||||||
win);
|
|
||||||
log_debug("[AI-WIN] ai_send_prompt returned: %d", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
aiwin_display_response(ProfAiWin* win, const char* response)
|
aiwin_display_response(ProfAiWin* win, const char* response)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -104,7 +104,6 @@ char* get_enc_char(prof_enc_t enc_mode, const char* alt);
|
|||||||
// AI window functions
|
// AI window functions
|
||||||
void win_ai_free(ProfAiWin* win);
|
void win_ai_free(ProfAiWin* win);
|
||||||
char* aiwin_get_string(ProfAiWin* win);
|
char* aiwin_get_string(ProfAiWin* win);
|
||||||
void aiwin_send_message(ProfAiWin* win, const char* message, const char* id);
|
|
||||||
void aiwin_display_response(ProfAiWin* win, const char* response);
|
void aiwin_display_response(ProfAiWin* win, const char* response);
|
||||||
void aiwin_display_error(ProfAiWin* win, const char* error_msg);
|
void aiwin_display_error(ProfAiWin* win, const char* error_msg);
|
||||||
|
|
||||||
|
|||||||
@@ -28,3 +28,14 @@ aiwin_display_error(ProfAiWin* win, const char* error_msg)
|
|||||||
(void)win;
|
(void)win;
|
||||||
(void)error_msg;
|
(void)error_msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
win_print_outgoing(ProfWin* window, const char* show_char, const char* const id, const char* const replace_id, const char* const message)
|
||||||
|
{
|
||||||
|
/* Stub: do nothing */
|
||||||
|
(void)window;
|
||||||
|
(void)show_char;
|
||||||
|
(void)id;
|
||||||
|
(void)replace_id;
|
||||||
|
(void)message;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user