§
    $Âix  ã                   óN  — d Z ddlZddlZddlZddlmZ ddl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mZ ddl	mZ ej        Z	 ddlmZ ddlmZ n# e$ r ddlmZ ddlmZ Y nw xY w ej        d¦  «        Z G d„ d¦  «        Z G d„ dej        ¦  «        ZdS )z%[Experimental] Live Music API client.é    N)ÚAsyncIteratoré   )Ú_api_module)Ú_common)Ú_live_converters)Ú_transformers)Úerrors)Útypes)ÚBaseApiClient)Úset_value_by_path)ÚClientConnection)Úconnectzgoogle_genai.live_musicc                   óÜ   — e Zd ZdZdedefd„Zdeej	                 ddfd„Z
d	ej        ddfd
„Zdej        ddfd„Zdd„Zdd„Zdd„Zdd„Zdeej                 fd„Zdej        fd„Zdd„ZdS )ÚAsyncMusicSessionz![Experimental] AsyncMusicSession.Ú
api_clientÚ	websocketc                 ó"   — || _         || _        d S )N)Ú_api_clientÚ_ws)Úselfr   r   s      úa/var/www/html/jarvis.com/web/backend/venv/lib/python3.11/site-packages/google/genai/live_music.pyÚ__init__zAsyncMusicSession.__init__0   s   € Ø!€DÔØ€D„H€H€Hó    ÚpromptsÚreturnNc              ƒ   óÄ   K  — | j         j        rt          d¦  «        ‚dd„ |D ¦   «         i}| j                             t          j        d|i¦  «        ¦  «        ƒ d {V —† d S )Nú4Live music generation is not supported in Vertex AI.ÚweightedPromptsc                 ó:   — g | ]}t          j        |d ¬¦  «        ‘ŒS )T©Úconvert_keys)r   Úconvert_to_dict)Ú.0Úprompts     r   ú
<listcomp>z:AsyncMusicSession.set_weighted_prompts.<locals>.<listcomp>=   s8   € ð ð ð àõ Ô% f¸4Ð@Ñ@Ô@ðð ð r   ÚclientContent)r   ÚvertexaiÚNotImplementedErrorr   ÚsendÚjsonÚdumps)r   r   Úclient_content_dicts      r   Úset_weighted_promptsz&AsyncMusicSession.set_weighted_prompts4   s’   è è € ð ÔÔ ð 
ÝØ
@ñô ð ð
 ð ð à#ðñ ô ðÐð Œ(�-Š-�œ
 OÐ5HÐ#IÑJÔJÑ
KÔ
KÐKÐKÐKÐKÐKÐKÐKÐKÐKr   Úconfigc              ƒ   óÔ   K  — | j         j        rt          d¦  «        ‚t          j        |d¬¦  «        }| j                             t          j        d|i¦  «        ¦  «        ƒ d {V —† d S )Nr   Tr    ÚmusicGenerationConfig)	r   r'   r(   r   r"   r   r)   r*   r+   )r   r.   Úconfig_dicts      r   Úset_music_generation_configz-AsyncMusicSession.set_music_generation_configE   s   è è € ð ÔÔ ð GÝØ
@ñô ð õ Ô+¨FÀÐFÑFÔF€kØ
Œ(�-Š-�œ
Ð$;¸[Ð#IÑJÔJÑ
KÔ
KÐKÐKÐKÐKÐKÐKÐKÐKÐKr   Úplayback_controlc              ƒ   ó¶   K  — | j         j        rt          d¦  «        ‚d|j        i}| j                             t          j        |¦  «        ¦  «        ƒ d {V —† d S )Nr   ÚplaybackControl)r   r'   r(   Úvaluer   r)   r*   r+   )r   r3   Úplayback_control_dicts      r   Ú_send_control_signalz&AsyncMusicSession._send_control_signalP   ss   è è € ð ÔÔ ð =ÝØ
@ñô ð ð  1Ð2BÔ2HÐIÐØŒH�MŠM�$œ*Ð%:Ñ;Ô;Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r   c              ƒ   óZ   K  — |                       t          j        j        ¦  «        ƒ d{V —†S )z0Sends playback signal to start the music stream.N)r8   r
   ÚLiveMusicPlaybackControlÚPLAY©r   s    r   ÚplayzAsyncMusicSession.play[   s2   è è € à×*Ò*­5Ô+IÔ+NÑOÔOÐOÐOÐOÐOÐOÐOÐOr   c              ƒ   óZ   K  — |                       t          j        j        ¦  «        ƒ d{V —†S )z2Sends a playback signal to pause the music stream.N)r8   r
   r:   ÚPAUSEr<   s    r   ÚpausezAsyncMusicSession.pause_   s2   è è € à×*Ò*­5Ô+IÔ+OÑPÔPÐPÐPÐPÐPÐPÐPÐPr   c              ƒ   óZ   K  — |                       t          j        j        ¦  «        ƒ d{V —†S )zƒSends a playback signal to stop the music stream.

    Resets the music generation context while retaining the current config.
    N)r8   r
   r:   ÚSTOPr<   s    r   ÚstopzAsyncMusicSession.stopc   s4   è è € ð
 ×*Ò*­5Ô+IÔ+NÑOÔOÐOÐOÐOÐOÐOÐOÐOr   c              ƒ   óZ   K  — |                       t          j        j        ¦  «        ƒ d{V —†S )zKReset the context (prompts retained) without stopping the music generation.N)r8   r
   r:   ÚRESET_CONTEXTr<   s    r   Úreset_contextzAsyncMusicSession.reset_contextj   sE   è è € à×*Ò*ÝÔ&Ô4ñô ð ð ð ð ð ð ð r   c                óˆ   K  — |                       ¦   «         ƒ d{V —†x}r#|W V — |                       ¦   «         ƒ d{V —†x}°!dS dS )zbReceive model responses from the server.

    Yields:
      The audio chunks from the server.
    N)Ú_receive)r   Úresults     r   ÚreceivezAsyncMusicSession.receivep   sw   è è € ð Ÿ-š-™/œ/Ð)Ð)Ð)Ð)Ð)Ð)Ð
)ˆ&ð Ø€l€l€l€lð Ÿ-š-™/œ/Ð)Ð)Ð)Ð)Ð)Ð)Ð
)ˆ&ð ð ð ð ð r   c              ƒ   ó\  K  — t          j        ¦   «         }	 | j                             d¬¦  «        ƒ d {V —†}n©# t          $ r" | j                             ¦   «         ƒ d {V —†}Y n~t
          $ rr}|j        r|j        j        }|j        j        }n'd}t          j
        j                             |d¦  «        }t          j                             ||d ¦  «         Y d }~nd }~ww xY w|r@	 t!          j        |¦  «        }n,# t           j        j        $ r t)          d|›�¦  «        ‚w xY wi }| j        j        rt/          d¦  «        ‚|}|s6|r4t          j                             |                     d¦  «        |d ¦  «         t           j                             ||                     ¦   «         ¬¦  «        S )	NF©Údecodeiî  zAbnormal closure.zFailed to parse response: r   Úcode)ÚresponseÚkwargs)r
   ÚLiveMusicServerMessager   ÚrecvÚ	TypeErrorÚConnectionClosedÚrcvdrN   ÚreasonÚ
websocketsÚframesÚCLOSE_CODE_EXPLANATIONSÚgetr	   ÚAPIErrorÚraise_errorr*   ÚloadsÚdecoderÚJSONDecodeErrorÚ
ValueErrorr   r'   r(   Ú_from_responseÚ
model_dump)r   Úparameter_modelÚraw_responseÚerN   rV   rO   Úresponse_dicts           r   rH   zAsyncMusicSession._receivez   sî  è è € ÝÔ2Ñ4Ô4€Oð6Øœ8Ÿ=š=°˜=Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6€l€løÝð +ð +ð +Øœ8Ÿ=š=™?œ?Ð*Ð*Ð*Ð*Ð*Ð*€l€l€lÝð 6ð 6ð 6Ø	
Œð ZØŒvŒ{ˆØ””ˆˆàˆÝÔ"Ô:×>Ò>¸tÐEXÑYÔYˆÝ„o×!Ò! $¨°Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5øøøøð6øøøð ð ðHÝ”:˜lÑ+Ô+ˆˆøÝŒ\Ô)ð Hð Hð HÝÐF°lÐFÐFÑGÔGÐGðHøøøð €hàÔÔ ð ÝÐ VÑWÔWÐWà€mØð H˜Xð Hå„o×!Ò! (§,¢,¨vÑ"6Ô"6¸À$ÑGÔGÐGÝÔ'×6Ò6Ø ×'AÒ'AÑ'CÔ'Cð 7ñ ô ð s(   —!9 ¹)CÁ$	CÁ-A(CÃCÃ%C: Ã:'D!c              ƒ   óH   K  — | j                              ¦   «         ƒ d{V —† dS )z<Closes the bi-directional stream and terminates the session.N)r   Úcloser<   s    r   rh   zAsyncMusicSession.close›   s0   è è € à
Œ(�.Š.Ñ
Ô
ÐÐÐÐÐÐÐÐÐr   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Úlistr
   ÚWeightedPromptr-   ÚLiveMusicGenerationConfigr2   r:   r8   r=   r@   rC   rF   r   rQ   rJ   rH   rh   © r   r   r   r   -   su  € € € € € Ø)Ð)ð ð Ð;Kð ð ð ð ðLØ˜%Ô.Ô/ðLàðLð Lð Lð Lð"	LØÔ3ð	Làð	Lð 	Lð 	Lð 	Lð	=Ø#Ô<ð	=àð	=ð 	=ð 	=ð 	=ðPð Pð Pð PðQð Qð Qð QðPð Pð Pð Pðð ð ð ð˜]¨5Ô+GÔHð ð ð ð ð˜eÔ:ð ð ð ð ðBð ð ð ð ð r   r   c                   ót   — e Zd ZdZ ej        d¦  «        ej        dede	e
         fd„¦   «         ¦   «         ZdS )ÚAsyncLiveMusicz_[Experimental] Live music module.

  Live music can be accessed via `client.aio.live.music`.
  zLRealtime music generation is experimental and may change in future versions.Úmodelr   c               ó  K  — | j                              ¦   «         }t          |t          ¦  «        r|                     d¦  «        }t          j        | j         |¦  «        }| j         j        r®| j         j        }| j         j        j	        }|› d|› d|› �}| j         j        j
        }t          j        t          j        t          j        |¬¦  «                             d¬¦  «        ¬¦  «        ¦  «        }t%          |dd	g|¦  «         t'          j        |¦  «        }	nt+          d
¦  «        ‚	 t-          ||¬¦  «        4 ƒd{V —†}
|
                     |	¦  «        ƒ d{V —† t0                               |
                     d¬¦  «        ƒ d{V —†¦  «         t7          | j         |
¬¦  «        W V — ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS # t8          $ r§ t-          ||¬¦  «        4 ƒd{V —†}
|
                     |	¦  «        ƒ d{V —† t0                               |
                     ¦   «         ƒ d{V —†¦  «         t7          | j         |
¬¦  «        W V — ddd¦  «        ƒd{V —† Y dS # 1 ƒd{V —†swxY w Y   Y dS w xY w)z0[Experimental] Connect to the live music server.zutf-8z!/ws/google.ai.generativelanguage.z).GenerativeService.BidiGenerateMusic?key=)rs   T)Úexclude_none)Úfrom_objectÚsetuprs   r   )Úadditional_headersNFrL   )r   r   )Úextra_headers)r   Ú_websocket_base_urlÚ
isinstanceÚbytesrM   ÚtÚt_modelÚapi_keyÚ_http_optionsÚapi_versionÚheadersr   r"   Úlive_convertersÚ$_LiveMusicConnectParameters_to_mldevr
   ÚLiveMusicConnectParametersrb   Úsetvr*   r+   r(   r   r)   ÚloggerÚinforR   r   rS   )r   rs   Úbase_urlÚtransformed_modelr   ÚversionÚurir‚   Úrequest_dictÚrequestÚwss              r   r   zAsyncLiveMusic.connect¦   s'  è è € ð Ô×3Ò3Ñ5Ô5€HÝ�(�EÑ"Ô"ð *Ø—’ Ñ)Ô)€hÝœ	 $Ô"2°EÑ:Ô:ÐàÔÔð XØÔ Ô(€gØÔ Ô.Ô:€gØÐuÐu¸'ÐuÐuÐlsÐuÐu€cØÔ Ô.Ô6€gõ Ô,Ý
Ô
>ÝÔ:Ø'ðñ ô ç’
¨�
Ñ-Ô-ðñ ô ñô €lõ ˆ<˜' 7Ð+Ð->Ñ?Ô?Ð?å”
˜<Ñ(Ô(€g€gåÐ VÑWÔWÐWðKÝ˜°Ð9Ñ9Ô9ð Kð Kð Kð Kð Kð Kð K¸RØ�gŠg�gÑÔÐÐÐÐÐÐÐÝ�Š˜"Ÿ'š'¨˜'Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ñ0Ô0Ð0å¨4Ô+;ÀrÐJÑJÔJÐJÐJÐJÐJð	Kð Kð Kñ Kô Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Køøøð Kð Kð Kð Kð Kð Køõ
 ð Kð Kð Kå˜¨GÐ4Ñ4Ô4ð Kð Kð Kð Kð Kð Kð K¸Ø�gŠg�gÑÔÐÐÐÐÐÐÐÝ�Š˜"Ÿ'š'™)œ)�O�O�O�O�O�OÑ$Ô$Ð$å¨4Ô+;ÀrÐJÑJÔJÐJÐJÐJÐJð	Kð Kð Kñ Kô Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Køøøð Kð Kð Kð Kð Kð Kð KðKøøøs\   Ä*G ÅA)F=Æ*G Æ=
GÇG Ç
GÇG Ç!JÇ1A'I,ÉJÉ,
I6	É6JÉ9I6	É:JÊ JN)ri   rj   rk   rl   r   Úexperimental_warningÚ
contextlibÚasynccontextmanagerÚstrr   r   r   rp   r   r   rr   rr       s   € € € € € ðð ð
  €7ÔØTñô ð Ô!ð(K Cð (K¨MÐ:KÔ,Lð (Kð (Kð (Kñ "Ô!ñô ð(Kð (Kð (Kr   rr   )rl   r‘   r*   ÚloggingÚtypingr   rW   Ú r   r   r   rƒ   r   r}   r	   r
   r   r   r   r†   rT   Úwebsockets.asyncio.clientr   r   ÚModuleNotFoundErrorÚwebsockets.clientÚ	getLoggerr‡   r   Ú
BaseModulerr   rp   r   r   ú<module>rœ      sÚ  ðð  ,Ð +à Ð Ð Ð Ø €€€Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø .Ð .Ð .Ð .Ð .Ð .àÔ.Ð ð(Ø8Ð8Ð8Ð8Ð8Ð8Ø/Ð/Ð/Ð/Ð/Ð/Ð/øØð (ð (ð (Ø0Ð0Ð0Ð0Ð0Ð0Ø'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ð(øøøð 
ˆÔ	Ð4Ñ	5Ô	5€ðpð pð pð pð pñ pô pð pðf2Kð 2Kð 2Kð 2Kð 2K�[Ô+ñ 2Kô 2Kð 2Kð 2Kð 2Ks   ÁA ÁA2Á1A2