#pragma once // data_table_ai_panel — modal "Ask AI" de la tabla TQL. // Sub-funcion extraida de modules/data_table/data_table.cpp (issue 0107c). // // Responsabilidad: // - draw_ask_ai_modal: modal ImGui con prompt de lenguaje natural, llamada // a llm_anthropic::ask, render de la respuesta (codigo TQL/SQL editable), // botones Apply/Reject/Close, export CSV de la respuesta. // // El modal usa UiState.ask_* que se mueve aqui (AskAiState) para // encapsulacion. Vive en UiState del data_table principal — no en State. // // Dependencia con llm_anthropic: // - Si FN_LLM_ANTHROPIC esta definido: usa core/llm_anthropic.h (real). // - Si no: el stub del data_table.cpp provee tipos/funciones no-op. // - Tras la extraccion este modulo incluye el stub o el header real. // // Rangos del fuente original: // - Modal "Ask AI" : lineas 4636-4755 // - Boton trigger : linea 1869 (dentro de draw_viz_selector) // // Dependencias: data_table_types.h, llm_anthropic.h (o stub), imgui.h. #include "core/data_table_types.h" #include "imgui.h" #include #include namespace data_table { // AskAiState: estado del modal Ask AI. Debe persistir entre frames // (es parte de UiState). Extraido aqui para encapsulacion. struct AskAiState { bool open = false; bool busy = false; int mode = 0; // 0 = TQL, 1 = SQL (DuckDB) char question[2048] = {}; std::string current_tql; // TQL emitido del state al abrir modal std::string response_raw; // texto raw del modelo std::string response_code; // bloque extraido (Lua o SQL) std::string error; std::string status; // "Sending..." / "Got response." / error char edit_buf[8192] = {}; // buffer editable de la propuesta }; // draw_ask_ai_modal — dibuja el modal "Ask AI". // Debe llamarse cada frame (pattern ImGui). Abre el popup si ask_ai.open==true. // // Parametros: // ask_ai — estado mutable del modal. // st — State principal (para tql::apply en Apply + active_headers/types). // active_headers / active_types — snapshot del output activo (para la llamada llm). // orig_cols — numero de cols originales (para tql::apply signature). // --------------------------------------------------------------------------- void draw_ask_ai_modal(AskAiState& ask_ai, State& st, const std::vector& active_headers, const std::vector& active_types, int orig_cols); } // namespace data_table