Module: BrainzLab::Vision

Defined in:
lib/brainzlab/vision.rb,
lib/brainzlab/vision/client.rb,
lib/brainzlab/vision/provisioner.rb

Defined Under Namespace

Classes: Client, Provisioner

Class Method Summary collapse

Class Method Details

.ai_action(session_id:, instruction:, model: nil) ⇒ Hash

Perform an AI-powered action in a session

Parameters:

  • session_id (String)

    Session ID

  • instruction (String)

    Natural language instruction

  • model (String) (defaults to: nil)

    LLM model to use

Returns:

  • (Hash)

    Action result



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/brainzlab/vision.rb', line 58

def ai_action(session_id:, instruction:, model: nil)
  config = BrainzLab.configuration
  return { error: 'Vision is not enabled' } unless config.vision_enabled
  return { error: 'Vision credentials not configured' } unless config.vision_valid?

  client.ai_action(
    session_id: session_id,
    instruction: instruction,
    model: model
  )
end

.clientObject



144
145
146
# File 'lib/brainzlab/vision.rb', line 144

def client
  @client ||= Client.new(BrainzLab.configuration)
end

.close_session(session_id:) ⇒ Hash

Close a browser session

Parameters:

  • session_id (String)

    Session ID

Returns:

  • (Hash)

    Close result



109
110
111
112
113
114
115
# File 'lib/brainzlab/vision.rb', line 109

def close_session(session_id:)
  config = BrainzLab.configuration
  return { error: 'Vision is not enabled' } unless config.vision_enabled
  return { error: 'Vision credentials not configured' } unless config.vision_valid?

  client.close_session(session_id: session_id)
end

.create_session(url: nil, viewport: nil, browser_provider: nil) ⇒ Hash

Create a browser session

Parameters:

  • url (String) (defaults to: nil)

    Optional initial URL

  • viewport (Hash) (defaults to: nil)

    Viewport dimensions { width:, height: }

  • browser_provider (String) (defaults to: nil)

    Browser provider to use

Returns:

  • (Hash)

    Session info with session_id



39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/brainzlab/vision.rb', line 39

def create_session(url: nil, viewport: nil, browser_provider: nil)
  config = BrainzLab.configuration
  return { error: 'Vision is not enabled' } unless config.vision_enabled

  ensure_provisioned!
  return { error: 'Vision credentials not configured' } unless config.vision_valid?

  client.create_session(
    url: url,
    viewport: viewport,
    browser_provider: browser_provider
  )
end

.ensure_provisioned!Object

Ensure project is auto-provisioned



130
131
132
133
134
135
136
137
138
# File 'lib/brainzlab/vision.rb', line 130

def ensure_provisioned!
  config = BrainzLab.configuration
  puts "[BrainzLab::Debug] Vision.ensure_provisioned! called, @provisioned=#{@provisioned}" if config.debug

  return if @provisioned

  @provisioned = true
  provisioner.ensure_project!
end

.execute_task(instruction:, start_url:, model: nil, browser_provider: nil, max_steps: 50, timeout: 300) ⇒ Hash

Execute an autonomous AI task

Parameters:

  • instruction (String)

    Natural language instruction for the AI

  • start_url (String)

    URL to start from

  • model (String) (defaults to: nil)

    LLM model to use (default: claude-sonnet-4)

  • browser_provider (String) (defaults to: nil)

    Browser provider (default: local)

  • max_steps (Integer) (defaults to: 50)

    Maximum steps to execute (default: 50)

  • timeout (Integer) (defaults to: 300)

    Timeout in seconds (default: 300)

Returns:

  • (Hash)

    Task result with extracted data



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/brainzlab/vision.rb', line 17

def execute_task(instruction:, start_url:, model: nil, browser_provider: nil, max_steps: 50, timeout: 300)
  config = BrainzLab.configuration
  return { error: 'Vision is not enabled' } unless config.vision_enabled

  ensure_provisioned!
  return { error: 'Vision credentials not configured' } unless config.vision_valid?

  client.execute_task(
    instruction: instruction,
    start_url: start_url,
    model: model,
    browser_provider: browser_provider,
    max_steps: max_steps,
    timeout: timeout
  )
end

.extract(session_id:, schema:, instruction: nil) ⇒ Hash

Extract structured data from the page

Parameters:

  • session_id (String)

    Session ID

  • schema (Hash)

    JSON schema for extraction

  • instruction (String) (defaults to: nil)

    Optional instruction for extraction

Returns:

  • (Hash)

    Extracted data



94
95
96
97
98
99
100
101
102
103
104
# File 'lib/brainzlab/vision.rb', line 94

def extract(session_id:, schema:, instruction: nil)
  config = BrainzLab.configuration
  return { error: 'Vision is not enabled' } unless config.vision_enabled
  return { error: 'Vision credentials not configured' } unless config.vision_valid?

  client.extract(
    session_id: session_id,
    schema: schema,
    instruction: instruction
  )
end

.perform(session_id:, action:, selector: nil, value: nil) ⇒ Hash

Perform a direct browser action

Parameters:

  • session_id (String)

    Session ID

  • action (Symbol)

    Action type (:click, :type, :scroll, etc.)

  • selector (String) (defaults to: nil)

    Element selector

  • value (String) (defaults to: nil)

    Value for type/fill actions

Returns:

  • (Hash)

    Action result



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/brainzlab/vision.rb', line 76

def perform(session_id:, action:, selector: nil, value: nil)
  config = BrainzLab.configuration
  return { error: 'Vision is not enabled' } unless config.vision_enabled
  return { error: 'Vision credentials not configured' } unless config.vision_valid?

  client.perform(
    session_id: session_id,
    action: action,
    selector: selector,
    value: value
  )
end

.provisionerObject



140
141
142
# File 'lib/brainzlab/vision.rb', line 140

def provisioner
  @provisioner ||= Provisioner.new(BrainzLab.configuration)
end

.reset!Object



148
149
150
151
152
# File 'lib/brainzlab/vision.rb', line 148

def reset!
  @client = nil
  @provisioner = nil
  @provisioned = false
end

.screenshot(session_id:, full_page: true) ⇒ Hash

Take a screenshot

Parameters:

  • session_id (String)

    Session ID

  • full_page (Boolean) (defaults to: true)

    Capture full page (default: true)

Returns:

  • (Hash)

    Screenshot data



121
122
123
124
125
126
127
# File 'lib/brainzlab/vision.rb', line 121

def screenshot(session_id:, full_page: true)
  config = BrainzLab.configuration
  return { error: 'Vision is not enabled' } unless config.vision_enabled
  return { error: 'Vision credentials not configured' } unless config.vision_valid?

  client.screenshot(session_id: session_id, full_page: full_page)
end