a
    ;g%)                     @   sL  U 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 d dlmZmZm	Z	m
Z
mZmZ d dlZerzd dlmZ d dlmZ d dlZd dlmZmZmZmZ d dlmZmZmZmZmZmZmZ d dlmZ d d	lmZm Z m!Z!m"Z" d d
l#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 G dd de)Z8eej9:dej9:ddZ;ee;Z<e0e eedddZ=i Z>ee?ee5e4f f e@d< dZAedddZBe?d d!d"ZCd3e ee	e  d#d$d%ZDed&d'd(ZEee?d)d*d+ZFed,d-d.ZGed,d/d0ZHG d1d2 d2ZIeI ZJdS )4    N)datetime)TYPE_CHECKINGDictListLiteralOptionalUnion)TurnContext)Activity)BotFrameworkAdapterBotFrameworkAdapterSettingsMessageFactoryr	   )ActionTypesr
   ActivityTypes
Attachment
CardActionChannelAccountHeroCard)config)ChainlitContextHTTPSessioncontextcontext_var)get_data_layer)ElementElementDict)BaseChainlitEmitter)logger)MessageStepDict)trace)Feedback)PersistedUserUser)user_sessionc                       sN   e Zd Zeed fddZedddZeddd	Z	edd
dZ
  ZS )TeamsEmittersessionturn_contextc                    s   t  | || _d S N)super__init__r(   )selfr'   r(   	__class__ a/var/www/html/micrositios/openai-assistant/venv/lib/python3.9/site-packages/chainlit/teams/app.pyr+   -   s    zTeamsEmitter.__init__)element_dictc                    s  | ddkrd S | jj | dp&d}d }d }| dd}|rXt|}|rX||7 }|r| d}t|d d	@}t| 	 }d
| d| }	t
||	|d}W d    q1 s0    Y  n| d }
rt
||
|d}|sd S | jt|gdI d H  d S )NZdisplayinlineZchainlitKey nameZUntitledmimepathrbzdata:z;base64,)content_typecontent_urlr4   url)attachments)getr'   files	mimetypesguess_extensionopenbase64	b64encodereaddecoder   r(   send_activityr
   )r,   r1   Zpersisted_file
attachmentr5   Zelement_nameZfile_extensionfileZdencoded_stringr9   r:   r/   r/   r0   send_element1   s2    

&zTeamsEmitter.send_element)	step_dictc                    s   |d dksd S | d}|dv }| d }|s6|s:d S t|d }t }|rtj}|rb|jn|d }ttj	ddd|dd	}	ttj	d
dd|dd	}
t
|	|
gd}td|d}|g|_| j|I d H  d S )Ntypeassistant_message)user_messagerK   outputid   👍like)Zfeedbackstep_id)rJ   titletextvalue   👎dislike)Zbuttonsz#application/vnd.microsoft.card.hero)r8   content)r<   r   rS   r   r   current_runrN   r   r   Zmessage_backr   r   r;   r(   rE   )r,   rI   Z	step_typeZ
is_messageZis_empty_outputZreplyZenable_feedbackrX   Zscorable_idZlike_buttonZdislike_buttonZcardrF   r/   r/   r0   	send_stepS   s<    
zTeamsEmitter.send_stepc                    s$   |d dksd S |  |I d H  d S )NrJ   rK   )rY   )r,   rI   r/   r/   r0   update_stepz   s    zTeamsEmitter.update_step)__name__
__module____qualname__r   r	   r+   r   rH   r   rY   rZ   __classcell__r/   r/   r-   r0   r%   ,   s   "'r%   ZTEAMS_APP_IDZTEAMS_APP_PASSWORD)Zapp_idZapp_password)r'   r(   returnc                 C   s2   t | |d}t| |d}t| td| |S )Nr&   )r'   emitterZteams_turn_context)r%   r   r   setr$   )r'   r(   r`   r   r/   r/   r0   init_teams_context   s
    
rb   users_by_teams_idZteams_)
teams_userc              
      s   | j tv rt| j  S | j| j d}ttt| j |d}|t| j < t  }rz"||I d H }|rl|t| j < W n4 ty } zt	
d|  W Y d }~n
d }~0 0 t| j  S )N)r4   rN   )
identifiermetadatazError creating user: )rN   rc   r4   r#   USER_PREFIXstrr   Zcreate_user	Exceptionr   error)rd   rf   user
data_layerZpersisted_userer/   r/   r0   get_user   s    



&rn   )r:   c              	      s   t  4 I d H `}|| I d H }|jdkrF|jW  d   I d H  S W d   I d H  d S W d   I d H  q1 I d H s|0    Y  d S )N   )httpxZAsyncClientr<   status_coderW   )r:   clientresponser/   r/   r0   download_teams_file   s
    
rt   )r'   r;   c                    s   |sg S dd |D }dd |D }t j| I d H }g }t|D ]D\}}|r@|| j}t|pbd} j|||dI d H }	||	 q@ fdd|D }
dd |
D }|S )Nc                 S   s   g | ]}t |jtr|qS r/   )
isinstancerW   dict.0rF   r/   r/   r0   
<listcomp>   s   z(download_teams_files.<locals>.<listcomp>c                 S   s   g | ]}t |jd qS )ZdownloadUrl)rt   rW   r<   rw   r/   r/   r0   ry      s   zapplication/octet-stream)r4   r5   rW   c                    s(   g | ] }|d   j v r j |d   qS )rN   )r=   )rx   rG   r'   r/   r0   ry      s   c                 S   s   g | ]}t |qS r/   )r   	from_dict)rx   Z	file_dictr/   r/   r0   ry          )asyncioZgather	enumerater4   filetypeZ
guess_mimeZpersist_fileappend)r'   r;   Zdownload_corosZfile_bytes_listZ	file_refsidxZ
file_bytesr4   Z	mime_typeZfile_refZfiles_dictsfile_elementsr/   rz   r0   download_teams_files   s.    

r   activityc                 C   s
   | j  S r)   )rS   stripr   r/   r/   r0   clean_content   s    r   )r(   thread_namec              
      sx  t | jjI d H }tttjt| jjjt	
 d }t| j}| jj}tt }t|||dd}t|| d}t||I d H }	tjj }
r|
 I d H  t||	d|jdd}| I d H  tjj }r||I d H  tjj }r| I d H  t  }rjt|trjz$|j|||j  |jdI d H  W n6 t!yh } zt"#d	|  W Y d }~n
d }~0 0 |j$  d S )
N%Y-%m-%dZteams)rN   	thread_idrk   Zclient_typer&   rL   r4   )rW   elementsrJ   author)r   r4   rf   Zuser_idzError updating thread: )%rn   r   from_propertyrh   uuiduuid5NAMESPACE_DNSconversationrN   r   todaystrftimer   r;   uuid4r   rb   r   r   codeon_chat_startr   rf   r<   send
on_messageon_chat_endr   ru   r"   Zupdate_threadr'   Zto_persistableri   r   rj   delete)r(   r   rk   r   rS   Zteams_filesZ
session_idr'   ctxr   r   msgr   r   rl   rm   r/   r/   r0   process_teams_message   sd    


&r   r(   c                    s  | j jtjkr| j jdks(| j jdkr| j jdkr8dnd}| j jd}t  }rl|t	||dI d H  | j jdkr|dnd}t
tj| j j|g d	}| |I d H  n\t
tj| j j| j j| j jd
}| |I d H  | j jj dt d }t| |I d H  d S )NrP   rV   r      rQ   )ZforIdrT   rO   rU   )rJ   rN   rS   r;   )rJ   r   	recipientr   z
 Teams DM r   )r   rJ   r   messagerS   rT   r<   r   Zupsert_feedbackr!   r
   Zreply_to_idZupdate_activitytypingr   r   r   rE   r4   r   r   r   r   )r(   Zfeedback_valuerQ   rl   Zupdated_textZupdated_messageZtyping_activityr   r/   r/   r0   handle_message"  s:    




r   c                    s   t | I d H  d S r)   )r   r   r/   r/   r0   on_turnF  s    r   c                   @   s   e Zd ZedddZdS )TeamsBotr   c                    s   t |I d H  d S r)   )r   )r,   r(   r/   r/   r0   r   L  s    zTeamsBot.on_turnN)r[   r\   r]   r	   r   r/   r/   r/   r0   r   K  s   r   )N)Kr}   rA   r>   osr   r   r   r   r   r   r   r   r   r   Zbotbuilder.corer	   Zbotbuilder.schemar
   rp   r   r   r   r   r   r   r   r   r   Zchainlit.configr   Zchainlit.contextr   r   r   r   Zchainlit.datar   Zchainlit.elementr   r   Zchainlit.emitterr   Zchainlit.loggerr   Zchainlit.messager   r   Zchainlit.telemetryr    Zchainlit.typesr!   Zchainlit.userr"   r#   Zchainlit.user_sessionr$   r%   environr<   Zadapter_settingsadapterrb   rc   rh   __annotations__rg   rn   rt   r   r   r   r   r   r   Zbotr/   r/   r/   r0   <module>   sf   
 $	U


 !D$