o
    xi                     @   s  d dl mZmZmZmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlZd dlZejejedZejejedZejejdeee gd eeZed	Zd
d Zdd Zdd Zdd ZeedddZ e !ddd Z"e j!ddgddd Z#e j!ddgddd  Z$e j!ddgdd!d" Z%e j!d#d$gdd%d& Z&e j!d#d'gdd(d) Z'e j!d*dgdd+d, Z(ed-kre)ej*+d.d/Z,e j-d0e,d1 dS dS )2    )Flaskrequestjsonifysend_from_directoryNAgent)
WebAdapterzweb_skeletons.jsonzweb.logz.%(asctime)s %(levelname)s %(name)s %(message)s)levelformathandlersWEB_API_KEYc                  C   s(   t sdS tjdptjd} | t kS )zGReturn True if request is authorized or if no server key is configured.Tz	X-API-KEYapi_key)SERVER_API_KEYr   headersgetargs)key r   )/var/www/apps/myagent/mysuperagent/web.py_require_api_key   s   r   c                   C   s   t  stddidfS d S )Nerrorunauthorizedi  )r   r   r   r   r   r   require_auth_or_403   s   r   c                  C   sh   t jtsg S z ttddd} t| W  d    W S 1 s!w   Y  W d S  ty3   g  Y S w )Nrutf-8encoding)ospathisfileSKELETON_STOREopenjsonload	Exception)fr   r   r   _load_skeletons#   s   (r&   c                 C   sD   t tddd}tj| |dd W d    d S 1 sw   Y  d S )Nwr   r      )indent)r!   r    r"   dump)datar%   r   r   r   _save_skeletons-   s   "r,   
web_static )static_folderstatic_url_path/c                   C   s   t tjdS )Nz
index.html)r   appr/   r   r   r   r   index4   s   r3   z	/api/chatPOST)methodsc               
   C   s   t  pi } | d}|stddidfS td| t }|r"|S tt d}z!|	|}td| t
|trC|drCt|W S td	|iW S  tyk } ztd
| tdt|idfW  Y d }~S d }~ww )Ninstructionr   zmissing instruction  z"/api/chat received instruction: %s)
ui_adapterz/api/chat result: %sawaitinganswerz/api/chat failed: %si  )r   get_jsonr   r   loggerinfor   r   r   run
isinstancedictr$   	exceptionstr)r+   r6   auth_erragentresulter   r   r   chat9   s(   


 rG   z/api/skeletonsGETc                  C   s"   t  } | r| S td tt S )Nz/api/skeletons list)r   r<   r=   r   r&   )rC   r   r   r   list_skeletonsS   s
   

rI   c                  C   s   t  pi } | d}| d}|r|stddidfS t }|r#|S tt ||d}t }|	| t
| td|d  t|S )	Nnametemplater   zmissing name or templater7   )idrJ   rK   zCreated skeleton %srL   )r   r;   r   r   r   rB   uuiduuid4r&   appendr,   r<   r=   )r+   rJ   rK   rC   skitemsr   r   r   create_skeleton\   s   


rR   z/api/skeletons/<skid>PUTc                 C   s   t  }|r|S t pi }t }|D ]/}|d| krA|d|d|d< |d|d|d< t| td|  t|  S qtddidfS )NrL   rJ   rK   zUpdated skeleton %sr   	not found  )	r   r   r;   r&   r   r,   r<   r=   r   )skidrC   r+   rQ   itr   r   r   update_skeletono   s   rX   DELETEc                    sf   t  }|r|S t } fdd|D }t|t|kr#tddidfS t| td  tddiS )	Nc                    s   g | ]}| d  kr|qS )rL   )r   ).0rW   rV   r   r   
<listcomp>   s    z#delete_skeleton.<locals>.<listcomp>r   rT   rU   zDeleted skeleton %sokT)r   r&   lenr   r,   r<   r=   )rV   rC   rQ   newr   r[   r   delete_skeleton   s   r`   z/api/respond/<token>c                 C   s   t  pi }|d}|d u rtddidfS td| t|d d  ddlm} dd	l	m
} |j| }|sFtd
|  tddidfS ||dt d}|| |}td| t|d d  td|iS )Nr:   r   zmissing answerr7   z/api/respond token=%s answer=%s   r   r   )ui_statezunknown respond token: %szunknown tokenrU   model)rc   r8   z%/api/respond resume result for %s: %srE   )r   r;   r   r   r<   r=   rB   agent_src.agentr   	agent_srcrb   PENDINGwarningr   resume)tokenr+   r:   r   rb   pendingrD   rE   r   r   r   respond   s   
rk   __main__PORTi  z0.0.0.0)hostport).flaskr   r   r   r   r   loggingrd   r   agent_src.interfacesr   rM   r"   r   joindirname__file__r    LOG_PATHbasicConfigINFOFileHandlerStreamHandler	getLogger__name__r<   getenvr   r   r   r&   r,   r2   router3   rG   rI   rR   rX   r`   rk   intenvironr   ro   r>   r   r   r   r   <module>   sF     









