Module: OmniAI::Tools::Browser::PageInspect::FormSummarizer

Defined in:
lib/omniai/tools/browser/page_inspect/form_summarizer.rb

Overview

Module to handle form elements summarization for AI agents

Class Method Summary collapse

Class Method Details

.date_field?(field) ⇒ Boolean

Returns:

  • (Boolean)


84
85
86
87
88
# File 'lib/omniai/tools/browser/page_inspect/form_summarizer.rb', line 84

def date_field?(field)
  field["type"] == "date" ||
    field["placeholder"]&.match?(/date|yyyy|mm|dd/i) ||
    get_associated_label(field)&.match?(/date|due/i)
end

.find_data_entry_fields(doc) ⇒ Object



25
26
27
# File 'lib/omniai/tools/browser/page_inspect/form_summarizer.rb', line 25

def find_data_entry_fields(doc)
  doc.css("input, textarea, select").reject { |f| skip_field?(f) }
end

.format_agent_field(field) ⇒ Object



59
60
61
62
63
64
65
66
# File 'lib/omniai/tools/browser/page_inspect/form_summarizer.rb', line 59

def format_agent_field(field)
  label = get_field_label(field)
  id = field["id"] || "no-id"
  value = field["value"] ? " = '#{field['value']}'" : ""
  placeholder = field["placeholder"] ? " [#{field['placeholder']}]" : ""

  "#{label} (#{id})#{value}#{placeholder}\n"
end

.format_field_group(title, fields) ⇒ Object



50
51
52
53
54
55
56
57
# File 'lib/omniai/tools/browser/page_inspect/form_summarizer.rb', line 50

def format_field_group(title, fields)
  return "" if fields.empty?

  result = "#{title}:\n"
  fields.first(8).each { |field| result += format_agent_field(field) }
  result += "  ... and #{fields.size - 8} more\n" if fields.size > 8
  result += "\n"
end

.format_for_agents(fields) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/omniai/tools/browser/page_inspect/form_summarizer.rb', line 35

def format_for_agents(fields)
  result = "📝 Data Entry Fields:\n"

  # Group important fields first
  date_fields = fields.select { |f| date_field?(f) }
  text_fields = fields.select { |f| text_field?(f) }
  other_fields = fields - date_fields - text_fields

  result += format_field_group("📅 Date Fields", date_fields)
  result += format_field_group("📝 Text Fields", text_fields)
  result += format_field_group("🔧 Other Fields", other_fields)

  "#{result}\n"
end

.get_associated_label(field) ⇒ Object



76
77
78
79
80
81
82
# File 'lib/omniai/tools/browser/page_inspect/form_summarizer.rb', line 76

def get_associated_label(field)
  label = field.document.at_css("label[for='#{field['id']}']")
  return nil unless label&.text

  text = label.text.strip
  text.empty? ? nil : text
end

.get_field_label(field) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/omniai/tools/browser/page_inspect/form_summarizer.rb', line 68

def get_field_label(field)
  return get_associated_label(field) if field["id"]
  return field["placeholder"] if field["placeholder"]

  field_type = field.name == "input" ? (field["type"] || "text") : field.name
  field_type.capitalize
end

.skip_field?(field) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
33
# File 'lib/omniai/tools/browser/page_inspect/form_summarizer.rb', line 29

def skip_field?(field)
  field["type"] == "hidden" ||
    field["disabled"] ||
    %w[button submit reset].include?(field["type"])
end

.summarize_data_entry_opportunities(doc) ⇒ Object



11
12
13
14
15
16
# File 'lib/omniai/tools/browser/page_inspect/form_summarizer.rb', line 11

def summarize_data_entry_opportunities(doc)
  fields = find_data_entry_fields(doc)
  return "" if fields.empty?

  format_for_agents(fields)
end

.summarize_form_structure(doc) ⇒ Object



18
19
20
21
22
23
# File 'lib/omniai/tools/browser/page_inspect/form_summarizer.rb', line 18

def summarize_form_structure(doc)
  fields = doc.css("input, textarea, select")
  return "📝 No form fields available.\n\n" if fields.empty?

  "📝 Form Fields Available: #{fields.size} fields found\n\n"
end

.text_field?(field) ⇒ Boolean

Returns:

  • (Boolean)


90
91
92
93
# File 'lib/omniai/tools/browser/page_inspect/form_summarizer.rb', line 90

def text_field?(field)
  %w[text email tel url textarea].include?(field["type"]) ||
    field.name == "textarea"
end