Module: Kward::CLITranscriptFormatter
- Defined in:
- lib/kward/cli_transcript_formatter.rb
Class Method Summary collapse
- .content_part_text(part) ⇒ Object
- .content_text(content) ⇒ Object
- .decoded_image_size(data) ⇒ Object
- .display_text(message) ⇒ Object
- .full_text(message) ⇒ Object
- .image_part_reference(part) ⇒ Object
- .image_parts(message) ⇒ Object
- .image_references(message) ⇒ Object
- .reasoning(message) ⇒ Object
- .synthetic_tool_call(name, id) ⇒ Object
- .user_display_text(message) ⇒ Object
- .user_transcript_input(message) ⇒ Object
Class Method Details
.content_part_text(part) ⇒ Object
91 92 93 94 95 96 97 98 99 100 |
# File 'lib/kward/cli_transcript_formatter.rb', line 91 def content_part_text(part) type = MessageAccess.value(part, :type) if type == "text" MessageAccess.value(part, :text) elsif type == "image" path = MessageAccess.value(part, :path) media_type = MessageAccess.value(part, :media_type) || MessageAccess.value(part, :mimeType) || "image" "[#{media_type}#{path ? ": #{path}" : ""}]" end end |
.content_text(content) ⇒ Object
24 25 26 27 28 29 30 31 |
# File 'lib/kward/cli_transcript_formatter.rb', line 24 def content_text(content) case content when Array content.filter_map { |part| content_part_text(part) }.join("\n") else content.to_s end end |
.decoded_image_size(data) ⇒ Object
116 117 118 119 120 121 122 |
# File 'lib/kward/cli_transcript_formatter.rb', line 116 def decoded_image_size(data) return nil if data.to_s.empty? Base64.decode64(data.to_s.gsub(/\s+/, "")).bytesize rescue ArgumentError nil end |
.display_text(message) ⇒ Object
33 34 35 36 37 38 |
# File 'lib/kward/cli_transcript_formatter.rb', line 33 def display_text() display_content = MessageAccess.display_content() return display_content.to_s unless display_content.nil? content_text(MessageAccess.content()) end |
.full_text(message) ⇒ Object
81 82 83 84 85 86 87 88 89 |
# File 'lib/kward/cli_transcript_formatter.rb', line 81 def full_text() content = MessageAccess.content() text = if content.is_a?(Array) content.filter_map { |part| MessageAccess.value(part, :text) }.join("\n") else content.to_s end text.strip end |
.image_part_reference(part) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/kward/cli_transcript_formatter.rb', line 102 def image_part_reference(part) data = MessageAccess.value(part, :data) path = MessageAccess.value(part, :path) media_type = MessageAccess.value(part, :media_type) || MessageAccess.value(part, :mimeType) || "image" { status: :attached, type: "image", label: path.to_s.empty? ? "pasted image" : File.basename(path), media_type: media_type, size_bytes: decoded_image_size(data), path: path } end |
.image_parts(message) ⇒ Object
62 63 64 65 66 67 |
# File 'lib/kward/cli_transcript_formatter.rb', line 62 def image_parts() content = MessageAccess.content() return [] unless content.is_a?(Array) content.select { |part| MessageAccess.value(part, :type) == "image" } end |
.image_references(message) ⇒ Object
69 70 71 |
# File 'lib/kward/cli_transcript_formatter.rb', line 69 def image_references() image_parts().map { |part| image_part_reference(part) } end |
.reasoning(message) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/kward/cli_transcript_formatter.rb', line 9 def reasoning() direct = MessageAccess.value(, :reasoning_summary) return direct.to_s unless direct.to_s.empty? content = MessageAccess.content() return "" unless content.is_a?(Array) content.filter_map do |part| type = MessageAccess.value(part, :type) next unless ["thinking", "reasoning"].include?(type) MessageAccess.value(part, :thinking) || MessageAccess.value(part, :reasoning) || MessageAccess.value(part, :text) end.join("\n") end |
.synthetic_tool_call(name, id) ⇒ Object
73 74 75 76 77 78 79 |
# File 'lib/kward/cli_transcript_formatter.rb', line 73 def synthetic_tool_call(name, id) { "id" => id || "restored_tool", "type" => "function", "function" => { "name" => name || "tool", "arguments" => "{}" } } end |
.user_display_text(message) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/kward/cli_transcript_formatter.rb', line 40 def user_display_text() display_content = MessageAccess.display_content() return display_content.to_s unless display_content.nil? content = MessageAccess.content() return content.to_s unless content.is_a?(Array) text = content.filter_map do |part| next unless MessageAccess.value(part, :type) == "text" MessageAccess.value(part, :text) end.join("\n") ImageAttachments.display_text_without_references(text, ImageAttachments.references_from_text(text).select { |reference| reference[:status] == :attached }) end |
.user_transcript_input(message) ⇒ Object
55 56 57 58 59 60 |
# File 'lib/kward/cli_transcript_formatter.rb', line 55 def user_transcript_input() content = MessageAccess.content() return content.to_s unless content.is_a?(Array) user_display_text() end |