" hook_add {{{
const s:providers = #{
      \ ollama: #{
      \   name: "ollama",
      \   options : #{
      \     model : "codellama",
      \   },
      \ },
      \ bedrock: #{
      \   name: 'bedrock',
      \   options: #{
      \     model: 'us.amazon.nova-pro-v1:0',
      \     region: 'us-east-1',
      \     profile: 'bedrock',
      \   },
      \ }
      \ }
function s:list_providers(...) abort
  return s:providers->keys()
endfunction
function s:start_chat(...) abort
  const provider = s:providers[get(a:000, 0, 'ollama')]
  const reltime = reltime()->reltimestr()
  const bufname = $'chat://{provider.name}#{reltime}'
  const bufnr = bufadd(bufname)
  call bufload(bufnr)
  call setbufvar(bufnr, '&buftype', 'nofile')
  call setbufvar(bufnr, '&filetype', 'markdown.chat')
  call setbufvar(bufnr, '&wrap', v:true)
  call deletebufline(bufnr, 1, '$')
  execute $'tabedit +buffer{bufnr}'
  call setbufvar(bufnr, 'tataku_chat_recipe', #{
        \   collector: #{
        \     name: 'buffer',
        \     options: #{ bufname: bufname },
        \   },
        \   processor: [
        \     #{ name: 'markdown_section', options: #{} },
        \     provider,
        \     #{ name: 'padding', options: #{ before: ["\n\n---\n"], after: ["\n\n---\n"] } }
        \   ],
        \   emitter: #{
        \     name: 'buffer',
        \     options: #{ bufname: bufname }
        \   },
        \ })
endfunction
command! -nargs=? -complete=customlist,<SID>list_providers Hey call <SID>start_chat(<f-args>)
cnoreabbrev hey Hey
augroup tataku_chat
  autocmd!
  autocmd FileType markdown.chat nnoremap <buffer> <C-g><C-g> <cmd>call tataku#call_oneshot(b:tataku_chat_recipe)<CR>
augroup END
" }}}