
    rh:                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZ d dlZd dlmZ d dlmc mZ d dlmc mZ d dlmZ d dlmZ d dlmZ d d	lmZ  d d
lm!Z! d dlm"Z" d dl#Z$d dl%Z$	 d dl&m'Z' e'jP                  Z(dZ*dZ+ejX                  d        Z- G d dej\                        Z. G d dej^                        Z/ej`                   G d d             Z1ddddddd	 	 	 	 	 	 	 	 	 	 	 d%dZ2 e1       Z3e3je                          d&dZ4d'dZ5d(dZ6d)dZ7d*dZ8d+dZ9d,d Z:d-d!Z;d.d"Z<d/d#Z=d0d$Z>y# e)$ r dZ(Y w xY w)1    )annotationsN)Anycast)Sequence)IOBase)credentials)
exceptions)auth)client_options)gapic_v1)operations_v1)versionz0.0.0zgenai-pyz9https://generativelanguage.googleapis.com/$discovery/restc               #     K   t         j                  j                  } dt        j                  v rd t         j                  _        	 d  | t         j                  _        y # | t         j                  _        w xY ww)NCOLAB_RELEASE_TAGc                      y)N)NN )argskwargss     m/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/google/generativeai/client.py<lambda>z-patch_colab_gce_credentials.<locals>.<lambda>9   s        )r
   _default_get_gce_credentialsosenviron)get_gces    r   patch_colab_gce_credentialsr   5   sM     mm00Gbjj(-Q*5-4*W*s   AA:A  
A: A77A:c                  X     e Zd Z fdZdd	dZdddddd	 	 	 	 	 	 	 	 	 	 	 	 	 d
dZ xZS )FileServiceClientc                d    d | _         t        j                         | _        t	        |   |i | y N)_discovery_api	threadinglocal_localsuper__init__)selfr   r   	__class__s      r   r'   zFileServiceClient.__init__B   s+    "oo'$)&)r   r   c                   | j                   j                  }|t        d      t        j                  j                  t        j                         d t         d| t        |            }|j                         \  }}|j                  j                          |j                  d      }t        j                  j                  ||      | j                  _        y )NzaInvalid operation: Uploading to the File API requires an API key. Please provide a valid API key.c                
    | |fS r!   r   )respcontents     r   r   z8FileServiceClient._setup_discovery_api.<locals>.<lambda>P   s
    D'? r   z?version=v1beta&key=)httppostprocuriheaderszutf-8)developerKey)_client_optionsapi_key
ValueErrorgoogleapiclientr.   HttpRequesthttplib2HttpGENAI_API_DISCOVERY_URLdictexecuteclosedecode	discoverybuild_from_documentr%   discovery_api)r(   metadatar4   requestresponser-   discovery_docs          r   _setup_discovery_apiz&FileServiceClient._setup_discovery_apiG   s    &&..?s  "&&22:*++?yIN	 3 
 $OO-'w/$3$=$=$Q$Q %R %
!r   NT)	mime_typenamedisplay_name	resumablerB   c                  | j                   | j                  |       i }|||d<   |||d<   t        |t              r#t        j
                  j                  |||      }n"t        j
                  j                  |||      }| j                  j                  j                         j                  d|i|      }	|D ]  \  }
}||	j                  |
<    |	j                         }| j                  d|d   d   i      S )NrH   displayName)fdmimetyperJ   )filenamerN   rJ   file)body
media_body)r"   rF   
isinstancer   r6   r.   MediaIoBaseUploadMediaFileUploadr%   rA   mediauploadr1   r<   get_file)r(   pathrG   rH   rI   rJ   rB   rP   rV   rC   keyvalueresults                r   create_filezFileServiceClient.create_file\   s    &%%h/DL#".DdF##((::)y ; E $((88	Y 9 E ++++113::[`:a" 	)JC#(GOOC 	)"}}ffVnV&<=>>r   )r   )rB   z dict | Sequence[tuple[str, str]])rY   z)str | pathlib.Path | os.PathLike | IOBaserG   
str | NonerH   r^   rI   r^   rJ   boolrB   Sequence[tuple[str, str]]returnzprotos.File)__name__
__module____qualname__r'   rF   r]   __classcell__)r)   s   @r   r   r   A   sg    *

2 !%#'.0!?7!? 	!?
 !? !!? !? ,!? 
!?r   r   c                      e Zd Zd Zy)FileServiceAsyncClientc                    K   t        d      w)NzPThe `create_file` method is currently not supported for the asynchronous client.)NotImplementedError)r(   r   r   s      r   r]   z"FileServiceAsyncClient.create_file   s     !^
 	
s   N)rb   rc   rd   r]   r   r   r   rg   rg      s    
r   rg   c                      e Zd ZU  ej                  e      Zded<   dZded<    ej                  e      Z	ded<   ddddddd		 	 	 	 	 	 	 	 	 	 	 	 	 dd
Z
d Zd ZddZy)_ClientManager)default_factoryzdict[str, Any]client_configr   r`   default_metadataclientsNr4   r   	transportr   client_inforn   c                  t        |t              rt        j                  |      }|t        j                         }t        t        j                  |      }t        |dd      }|r|@t        d      |st        j                  d      }|st        j                  d      }||_
        t         dt         }|r-|j                  r|xj                  d| z  c_        n(||_        n t        j                  j!                  |      }||||d	}	|	j#                         D 
ci c]  \  }
}|	|
| }	}
}|	| _        || _        i | _        yc c}}
w )
a  Initializes default client configurations using specified parameters or environment variables.

        If no API key has been provided (either directly, or on `client_options`) and the
        `GEMINI_API_KEY` environment variable is set, it will be used as the API key. If not,
        if the `GOOGLE_API_KEY` environement variable is set, it will be used as the API key.

        Note: Not all arguments are detailed below. Refer to the `*ServiceClient` classes in
        `google.ai.generativelanguage` for details on the other arguments.

        Args:
            transport: A string, one of: [`rest`, `grpc`, `grpc_asyncio`].
            api_key: The API-Key to use when creating the default clients (each service uses
                a separate client). This is a shortcut for `client_options={"api_key": api_key}`.
                If omitted, and the `GEMINI_API_KEY` or the `GOOGLE_API_KEY` environment variable
                are set, they will be used in this order of priority.
            default_metadata: Default (key, value) metadata pairs to send with every request.
                when using `transport="rest"` these are sent as HTTP headers.
        Nr4   z`Invalid configuration: Please set either `api_key` or `client_options['api_key']`, but not both.GEMINI_API_KEYGOOGLE_API_KEY/ )
user_agent)r   rq   r   rr   )rS   r;   client_options_lib	from_dictClientOptionsr   getattrr5   r   getenvr4   
USER_AGENT__version__rx   r   rr   
ClientInfoitemsrm   rn   ro   )r(   r4   r   rq   r   rr   rn   had_api_key_valuerx   rm   rZ   r[   s               r   	configurez_ClientManager.configure   sS   D nd+/99.IN!/==?N0>>O#NItD" v   ))$45 ))$45%,N""|1[M2
%%&&Aj\*::&)3&"..99Z9PK '",&	
 7D6I6I6Ka
UuO`eaa* 0 bs   
E*Ec                    |dk(  rt         }nt|dk(  rt        }nh|j                  d      r6|j                  d      d   }t	        t
        |j                         dz         }n!t	        t
        |j                         dz         } j                  s
t                	 t               5   |di  j                  }d d d         j                  sS d	 } fd
}t        j                  |      D ]0  \  }} |||      st	        |      } ||      }t!        |||       2 S # 1 sw Y   ixY w# t        j                  $ r}d|_        |d }~ww xY w)NrP   
file_async_async_r   ServiceAsyncClientServiceClient)a  
  No API_KEY or ADC found. Please either:
    - Set the `GOOGLE_API_KEY` environment variable.
    - Manually pass the key with `genai.configure(api_key=my_api_key)`.
    - Or set up Application Default Credentials, see https://ai.google.dev/gemini-api/docs/oauth for more information.c                    | j                  d      ryt        |      sydt        j                  |      j                  j                         vryy)Nr   FrB   T)
startswithcallableinspect	signature
parameterskeys)rH   fs     r   keepz(_ClientManager.make_client.<locals>.keep   sC    s#A;!2!21!5!@!@!E!E!GGr   c                     dd fd
}|S )Nr   )rB   c                ^    t        |       t        j                        z   }  |i |d| iS )NrB   )listrn   )rB   r   r   r   r(   s      r   callzN_ClientManager.make_client.<locals>.add_default_metadata_wrapper.<locals>.call  s1    >D1F1F,GG$<&<8<<r   r   )r   r   r(   s   ` r   add_default_metadata_wrapperz@_ClientManager.make_client.<locals>.add_default_metadata_wrapper
  s    %' = Kr   r   )r   rg   endswithsplitr|   glmtitlerm   r   r   ga_exceptionsDefaultCredentialsErrorr   rn   r   
getmemberssetattr)	r(   rH   clsclienter   r   r[   r   s	   `        r   make_clientz_ClientManager.make_client   sB   6>#C\!(C]]8$::c?1%D#tzz|.BBCC#tzz|o=>C !!K
	,. 32t1123 $$M
		 #--c2 	%KD%e$%A,Q/AFD!$	% Q3 344 	AF G	s0   
D* #D6D* D'#D* *E=	EEc                    |j                         }|dk(  r| j                         S | j                  j                  |      }| | j	                  |      }|| j                  |<   |S N
operations)lowerget_default_operations_clientro   getr   )r(   rH   r   s      r   get_default_clientz!_ClientManager.get_default_client  s`    zz|<5577!!$'>%%d+F!'DLLr   c                    | j                   j                  dd       }|6| j                  d      }|j                  j                  }|| j                   d<   |S )Nr   Model)ro   r   r   
_transportoperations_client)r(   r   model_clients      r   r   z,_ClientManager.get_default_operations_client%  sQ    !!,5>227;L!,,>>F)/DLL&r   )r4   r^   r   (ga_credentials.Credentials | dict | Nonerq   r^   r   z8client_options_lib.ClientOptions | dict[str, Any] | Nonerr   &gapic_v1.client_info.ClientInfo | Nonern   r`   ra   Nonera   zoperations_v1.OperationsClient)rb   rc   rd   dataclassesfieldr;   rm   __annotations__rn   ro   r   r   r   r   r   r   r   rk   rk      s    $5K$5$5d$KM>K24/4/k//EG^E
 #@D !%SW>B68Q Q >	Q Q QQ <Q 4Q 
Qf8t	r   rk   r   rp   c                8    t         j                  | |||||      S )a  Captures default client configuration.

    If no API key has been provided (either directly, or on `client_options`) and the
    `GOOGLE_API_KEY` environment variable is set, it will be used as the API key.

    Note: Not all arguments are detailed below. Refer to the `*ServiceClient` classes in
    `google.ai.generativelanguage` for details on the other arguments.

    Args:
        transport: A string, one of: [`rest`, `grpc`, `grpc_asyncio`].
        api_key: The API-Key to use when creating the default clients (each service uses
            a separate client). This is a shortcut for `client_options={"api_key": api_key}`.
            If omitted, and the `GOOGLE_API_KEY` environment variable is set, it will be
            used.
        default_metadata: Default (key, value) metadata pairs to send with every request.
            when using `transport="rest"` these are sent as HTTP headers.
    rp   )_client_managerr   rp   s         r   r   r   .  s.    > $$%) %  r   c                 ,    t         j                  d      S )Ncacher   r   r   r   r   get_default_cache_clientr   [      --g66r   c                 ,    t         j                  d      S )NrP   r   r   r   r   get_default_file_clientr   _  s    --f55r   c                 ,    t         j                  d      S )Nr   r   r   r   r   get_default_file_async_clientr   c      --l;;r   c                 ,    t         j                  d      S )N
generativer   r   r   r   get_default_generative_clientr   g  r   r   c                 ,    t         j                  d      S )Ngenerative_asyncr   r   r   r   #get_default_generative_async_clientr   k      --.@AAr   c                 ,    t         j                  d      S r   r   r   r   r   r   r   o  r   r   c                 ,    t         j                  d      S )Nmodelr   r   r   r   get_default_model_clientr   s  r   r   c                 ,    t         j                  d      S )N	retrieverr   r   r   r   get_default_retriever_clientr   w  s    --k::r   c                 ,    t         j                  d      S )Nretriever_asyncr   r   r   r   "get_default_retriever_async_clientr   {  s    --.?@@r   c                 ,    t         j                  d      S )N
permissionr   r   r   r   get_default_permission_clientr     r   r   c                 ,    t         j                  d      S )Npermission_asyncr   r   r   r   #get_default_permission_async_clientr     r   r   )r4   r^   r   r   rq   r^   r   z.client_options_lib.ClientOptions | dict | Nonerr   r   rn   r`   )ra   zglm.CacheServiceClient)ra   zglm.FilesServiceClient)ra   zglm.FilesServiceAsyncClient)ra   zglm.GenerativeServiceClient)ra   z glm.GenerativeServiceAsyncClientr   )ra   zglm.ModelServiceAsyncClient)ra   zglm.RetrieverClient)ra   zglm.RetrieverAsyncClient)ra   zglm.PermissionServiceClient)ra   z glm.PermissionServiceAsyncClient)?
__future__r   r   
contextlibr   r   pathlibr#   typingr   r   collections.abcr   r8   ior   google.ai.generativelanguageaigenerativelanguager   google.generativeai.protosgenerativeaiprotosgoogle.authr   ga_credentialsr	   r   googler
   google.api_corer   ry   r   r   googleapiclient.httpr6   googleapiclient.discoverygoogle.generativeair   r   ImportErrorr~   r:   contextmanagerr   r   rg   	dataclassrk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s   " 	       $   * * + + 5 3  @ $ )   +%%K 
  V  5 5<?-- <?~
S77 
 c c cP <@ !EI:>24&& :& & C& 8& 0&R !"    76<<B<7;A<BI  Ks   6D< <EE