
    !i                         d Z ddlZddlZddlmZ 	 ddlmZ ddlmZm	Z	m
Z
 ddlmZ dej                   fd	Zdee   fd
ZdedefdZy# e$ rZ ej                  de         dZ[ww xY w)a  
Web search service using Google Gemini via Vertex AI with search grounding.

Uses the Google GenAI SDK (Vertex AI) to perform a grounded search query and
returns a summarised result that the voice agent can speak aloud, plus
structured source links for the Android app to display.
    N)logger)genai)GenerateContentConfigGoogleSearchTool)service_accountz-google-genai package is required for search: returnc                     t        j                  d      } t        j                  d      }t        j                  d      }|r6t        j                  j	                  t        j                  |      dg      }n0| r#t        j                  j                  | dg      }nt        d      t        j                  d||d	      S )
zBCreate a Vertex AI GenAI client using service account credentials.GOOGLE_CREDENTIALS_PATHGOOGLE_CREDENTIALS_JSONGOOGLE_PROJECT_IDz.https://www.googleapis.com/auth/cloud-platform)scopesz>GOOGLE_CREDENTIALS_PATH or GOOGLE_CREDENTIALS_JSON must be setTzasia-south1)vertexaicredentialsprojectlocation)osgetenvr   Credentialsfrom_service_account_infojsonloadsfrom_service_account_file
ValueErrorr   Client)
creds_path
creds_json
project_idcredss       M/Users/thippareddysaicharanreddy/Desktop/agent_all/services/search_service.py_get_vertex_clientr!      s    45J45J./J++EEJJz"DE F 
 
++EEDE F 

 YZZ<<	     c                    g }t               }	 t        | dd      }|s|S |D ]  }t        |dd      }|st        |dd      }|s#|D ]i  }t        |dd      }|st        |dd      }	t        |dd      }
|	s0|	|vs5|j                  |	       |j                  |
xs |	|	t        |d	d      d
       k  	 |S # t        $ r#}t        j                  d|        Y d}~|S d}~ww xY w)zuExtract source links from Gemini grounding metadata.

    Returns a list of dicts with keys: title, url, domain.
    
candidatesNgrounding_metadatagrounding_chunksweburi titledomain)r*   urlr+   z.[Search] Could not extract grounding sources: )setgetattraddappend	Exceptionr   warning)responsesources	seen_urlsr$   	candidatemetadatachunkschunkr'   r(   r*   es               r    _extract_sourcesr;   2   s   
 GI MX|T:
N#Iy*>EH X'94@FeUD1c5"-Wb13i/MM#&NN!&#"")#x"<$    $: N  MGsKLLNMs)   B7 AB7 6B7 ;9B7 7	C# CC#queryc           
      <  K   	 t        j                  d|        t               }|j                  j                  j                  dd|  t        t        t                     gd             d{   }|j                  r|j                  j                         nd	}t        |      }t        j                  d
t        |       dt        |       d       d||dS 7 k# t        $ r0}t        j                  d|        dt        |      dcY d}~S d}~ww xY ww)a  Perform a web search using Gemini via Vertex AI with Google Search grounding.

    Args:
        query: The search query string.

    Returns:
        dict with keys:
            - success (bool)
            - summary (str): Summarised search results ready for TTS.
            - sources (list[dict]): Source links with title, url, domain.
            - error (str, optional): Error message on failure.
    z[Search] Querying: zgemini-2.5-flashz2Search the web and provide a concise summary for: )google_searchg333333?)toolstemperature)modelcontentsconfigNzNo results found.z[Search] Got response (z chars, z	 sources)T)successsummaryr4   z[Search] Error: F)rD   error)r   infor!   aiomodelsgenerate_contentr   r   r   textstripr;   lenr1   rF   str)r<   clientr3   rE   r4   r:   s         r    
web_searchrP   _   s    3)%34#%  **;;$I%Q(,.9: < 
 
 ,4==(--%%'>Q"8,-c'l^8CL>QZ[\GHH
   3's+, 3q6223sH   DA.C  2C3A*C  DC   	D)%DDDDD)__doc__r   r   logurur   googler   google.genai.typesr   r   r   google.oauth2r   ImportErrorexcrF   r   r!   listdictr;   rN   rP    r"   r    <module>r[      s     	 
LL-ELL 6*$t* *Z%3C %3D %3[  
FLL@FG	
s   A
 
A*A%%A*