lib/ollama/handlers/markdown.rb



require 'term/ansicolor'
require 'kramdown/ansi'

class Ollama::Handlers::Markdown
  include Ollama::Handlers::Concern
  include Term::ANSIColor

  def initialize(output: $stdout, stream: true)
    super(output:)
    @stream      = stream
    @output.sync = @stream
    @content     = ''
  end

  def call(response)
    if content = response.response || response.message&.content
      if @stream
        @content << content
        markdown_content = Kramdown::ANSI.parse(@content)
        @output.print clear_screen, move_home, markdown_content
      else
        markdown_content = Kramdown::ANSI.parse(content)
        @output.print markdown_content
      end
    end
    self
  end
end