
    ?i                     x    d Z ddlZddlZddlZddlmZmZmZ ddlm	Z	  ej                  d      Z G d d      Zy)u   
Genesis Superior Browser (GSB) — Vision Bridge (Layer 2)
=======================================================
Integrates Gemini Flash Vision to reason about page state and identify coordinates.
    N)DictListOptional)Pagezgenesis_v2.core.browser.visionc                   8    e Zd Zd	dZdededefdZdedefdZy)
VisionBridgeNc                     || _         y N)client)selfgemini_clients     F/mnt/e/genesis-system/genesis_v2/core/browser_engines/vision_bridge.py__init__zVisionBridge.__init__   s	    #    pagegoalreturnc                   K   |j                  dd       d{   }d| d}| j                  st        j                  d       dd	d
S 	 d|dg}| j                  j	                  ||d   g      }ddl}|j                  d|j                  |j                        }|r|j                  d      }	n|j                  }		 t        j                  |	      S 7 # t        j                  $ r* t        j                  d|j                          ddd
cY S w xY w# t        $ r/}
t        j                  d|
        dt        |
      icY d}
~
S d}
~
ww xY ww)z
        Takes a screenshot, sends it to Gemini Flash, and returns 
        the coordinates of the element to interact with.
        pngF)type	full_pageNzF
        Analyze this screenshot of a webpage. 
        Your goal is: a  
        
        Return a JSON object with:
        1. "reasoning": Why you choosing this action.
        2. "action": One of ["click", "type", "scroll", "wait"].
        3. "coordinates": {"x": Number, "y": Number} of the target element.
        4. "selector": (Optional) The CSS selector if you can identify it reliably.
        5. "input_text": (Optional) If action is 'type'.

        The screen resolution is 1920x1080.
        ONLY return JSON.
        zDNo Gemini client provided to VisionBridge. Visual reasoning limited.waitzNo vision brain connected.)action	reasoningz	image/png)	mime_typedatar   z```json\n(.*?)\n```   z6Failed to parse JSON from vision model. Raw response: z+Failed to parse response from vision model.zVision analysis failed: error)
screenshotr   loggerwarninggenerate_contentresearchtextDOTALLgroupjsonloadsJSONDecodeErrorr   	Exceptionstr)r   r   r   screenshot_bytespromptimage_partsresponser#   match	json_textes              r   analyze_pagezVisionBridge.analyze_page   sZ    
 "&eu!MMf 	 {{ NNab$3OPP	% "-,K {{33V[^4LMH II4hmmRYYOE!KKN	$MM	fzz),,S NT '' fUV^VcVcUdef"(7deef  	%LL3A378SV$$	%sd   EC0EA1D =C E:DD EDD 	E$EEEEEvision_resultc                 p  K   |j                  d      }|j                  d      }|dk(  rF|rD|j                  j                  |d   |d          d{    t        j	                  d|        |S |dk(  ry|rw|j                  j                  |d   |d          d{    |j
                  j                  |j                  d	d
             d{    t        j	                  d|        |S |dk(  r9|j                  j                  dd       d{    t        j	                  d       |S 7 7 7 b7 !w)z3Executes the action determined by the vision brain.r   coordinatesclickxyNz"Vision-grounded click executed at r   
input_text z#Vision-grounded typing executed at scrollr   i  z Vision-grounded scroll executed.)getmouser8   r    infokeyboardr   wheel)r   r   r5   r   coordss        r   execute_vision_movez VisionBridge.execute_vision_moveI   s)    ""8,""=1W**""6#;s<<<KK<VHEF  v&**""6#;s<<<--$$]%6%6|R%HIIIKK=fXFG
 	 x**""1c***KK:; = =I +sJ   AD6D.A
D6D02D6D2AD6D4D60D62D64D6r
   )	__name__
__module____qualname__r   r   r,   r   r4   rD    r   r   r   r      s5    $4%t 4%3 4%4 4%ld 4 r   r   )__doc__base64r(   loggingtypingr   r   r   playwright.async_apir   	getLoggerr    r   rH   r   r   <module>rO      s=       ' ' %			;	<J Jr   