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
- .date_field?(field) ⇒ Boolean
- .find_data_entry_fields(doc) ⇒ Object
- .format_agent_field(field) ⇒ Object
- .format_field_group(title, fields) ⇒ Object
- .format_for_agents(fields) ⇒ Object
- .get_associated_label(field) ⇒ Object
- .get_field_label(field) ⇒ Object
- .skip_field?(field) ⇒ Boolean
- .summarize_data_entry_opportunities(doc) ⇒ Object
- .summarize_form_structure(doc) ⇒ Object
- .text_field?(field) ⇒ Boolean
Class Method Details
.date_field?(field) ⇒ 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
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
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 |