b9716a7cd6
Snapshot de WIP acumulado de sesiones previas antes de merge wave 1 del flow 0008 (kanban_cpp + agent_runner_api + DoD schema). Incluye: - dev/flows/0008-kanban-cpp-and-agent-workflows.md - dev/issues/0112-0119*.md (7 sub-issues) - WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.3 KiB
4.3 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, framework, params, output
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | framework | params | output | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| data_table_ai_panel | function | cpp | viz | 1.0.0 | impure | void data_table::draw_ask_ai_modal(AskAiState& ask_ai, State& st, const std::vector<std::string>& active_headers, const std::vector<ColumnType>& active_types, int orig_cols) | Modal 'Ask AI' de la tabla TQL: UI de prompt en lenguaje natural, llamada bloqueante a llm_anthropic::ask, render de la respuesta (codigo TQL o SQL editable), botones Apply/Reject/Close. El Apply ejecuta tql::apply sobre el estado actual de la tabla. Soporta modo TQL (default) y SQL (requiere FN_TQL_DUCKDB). Sub-funcion extraida de modules/data_table/data_table.cpp (issue 0107c, fase 11 / issue 0080). |
|
|
|
false | error_go_core |
|
false | cpp/functions/viz/data_table_ai_panel.cpp | imgui |
|
Void. Efectos: mutates ask_ai (flags, buffers), mutates st (via tql::apply en Apply). |
Documentacion
Sub-funcion que encapsula el modal "Ask AI" de la tabla TQL (issue 0080, fase 11). Permite al usuario escribir una pregunta en lenguaje natural y recibir codigo TQL o SQL generado por un modelo de lenguaje.
Flujo del modal
ask_ai.open = true(seteado por boton "Ask AI" endraw_viz_selector).- Primer frame con
open=true:ImGui::OpenPopup("Ask AI"). - Modal se abre: prompt input, combo modo TQL/SQL.
- Usuario escribe pregunta y hace click en "Send":
- Construye
llm_anthropic::AskInputconquestion,col_names,col_types,tql_current. - Llamada bloqueante a
llm_anthropic::ask(in)→AskResult. - Si error:
ask_ai.errorse muestra en rojo. - Si ok:
ask_ai.response_codese copia aask_ai.edit_buf(editable).
- Construye
- Panel dividido en dos columnas: TQL actual (read-only) | propuesta (editable).
- Botones:
- Apply: ejecuta
tql::apply(ask_ai.edit_buf, st, ...). Si ok: cierra modal. - Reject: limpia
edit_bufyresponse_code. - Close:
ask_ai.open = false.
- Apply: ejecuta
Dependencia llm_anthropic
Si FN_LLM_ANTHROPIC esta definido en el build, se incluye core/llm_anthropic.h (real). Si no, se usa el stub no-op que retorna error "not available". Pendiente promover a cpp/functions/infra/llm_anthropic (Wave 4, issue 0107c deuda tecnica).
Ejemplo
// En el render principal, llamar una vez por frame tras el grid:
data_table::draw_ask_ai_modal(U.ask_ai, st,
U.active_headers, U.active_types, orig_cols);
// El boton de apertura vive en draw_viz_selector:
// if (ImGui::SmallButton("Ask AI##ask_open")) U.ask_ai.open = true;
Cuando usarla
Llamar una vez por frame desde el entrypoint thin data_table::render() en el bloque de modales (junto a TQL show/apply, Custom column, etc.), SIEMPRE que el contexto ImGui tenga la ventana activa. No llamar desde apps directamente.
Gotchas
- La llamada a
llm_anthropic::askes bloqueante (red HTTP). La UI se congela brevemente. Consideracion futura: mover a hilo background + flag de estado asincrono. - El modal se destruye (EndPopup) si el usuario hace click fuera.
ask_ai.opense pone a false por el&ask_ai.opendelBeginPopupModal. Esto borra el estado del prompt en curso — consideracion UX conocida. - En modo SQL (
ask_ai.mode == 1), Apply solo funciona siFN_TQL_DUCKDBesta definido; de lo contrario muestra mensaje de error informativo. llm_anthropicno esta en el registry (deuda Wave 4). Hasta que se promueva, el stub vive inlined en este .cpp. No duplicar el stub en otros archivos.