# LLM-Integration (Mistral FIM + smartcat) declare-option str llm_ctx "/tmp/kak-fim.buf" declare-option str llm_gen "/tmp/kak-gen.out" define-command fim-complete -docstring "FIM-Completion am Cursor (Mistral)" %{ write -force %opt{llm_ctx} execute-keys "!python3 %val{config}/mistral-fim.py %opt{llm_ctx} %val{cursor_line} %val{cursor_column}" } map global user f ': fim-complete' -docstring 'FIM complete' # Codeblock aus Anweisung generieren und am Cursor einfügen define-command -params 1 gen -docstring 'LLM: Codeblock generieren & einfügen' %{ write -force %opt{llm_ctx} nop %sh{ { printf 'Anweisung: %s\n\nVorhandener Code als Kontext:\n' "$1" cat "$kak_opt_llm_ctx"; } | sc default > "$kak_opt_llm_gen" } execute-keys "!cat %opt{llm_gen}" } map global user G ': gen ""' -docstring 'Codeblock generieren' # Selektion durch generierten Code ersetzen define-command -params 1 gen-sel -docstring 'LLM: Selektion neu generieren' %{ nop %sh{ printf 'Anweisung: %s\n\nCode:\n%s' "$1" "$kak_selection" \ | sc default > "$kak_opt_llm_gen" } execute-keys "|cat %opt{llm_gen}" } map global user g ': gen-sel ""' -docstring 'Selektion neu generieren' # Frage zum GANZEN Buffer (z.B. "welche imports fehlen?") define-command -params 1 ask -docstring 'LLM-Frage zum Buffer' %{ write -force %opt{llm_ctx} evaluate-commands %sh{ ans=$( { printf 'Frage: %s\n\nCode:\n' "$1"; cat "$kak_opt_llm_ctx"; } \ | sc ask | sed "s/'/''/g") printf "info -title 'Le Chat' '%s'" "$ans" } } map global user A ': ask ""' -docstring 'Ask about the buffer' # Frage zur SELEKTION (vorher Region markieren) define-command -params 1 ask-sel -docstring 'LLM-Frage zur Selektion' %{ evaluate-commands %sh{ ans=$(printf 'Frage: %s\n\nCode:\n%s' "$1" "$kak_selection" \ | sc ask | sed "s/'/''/g") printf "info -title 'Le Chat' '%s'" "$ans" } } map global user a ': ask-sel ""' -docstring 'Ask about selection'