o
    ưi&                  &   @   sd  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mZmZ d dlZd dlmZmZ d dlmZ d dlmZ d dlZd dlmZ d dlmZmZmZmZmZ d	d
lm Z  d	dl!m"Z" d	dl#T d	dl$T ddl%m&Z& e" Z'e  Z(	dOded dee de)e fddZ*				dPded dee dee+ dee+ dee+ de,e fddZ-	dOded dee defddZ.													dQded de+dee+ dee+ dee+ d ee
ee+ef   d!eee+ef  d"eee+e+f  d#ee/ d$ee/ d%eee+ee+e+f f  dee dee+ dee+ dee+ deeeeeef f f d&d'Z0	dOded dee defd(d)Z1				dPded d*e+dee dee+ dee+ dee+ deeeeeef f fd+d,Z2ded de3fd-d.Z4				dPded d/ee	e5  d"ee6 d!ee7 dee de3fd0d1Z8	dOded d2e+dee de3fd3d4Z9	dOded d2e+de3fd5d6Z:			dRded d2e+d7ed8 d9e+d:ee
e;  d"ee6 de<fd;d<Z=			dRded d2e+d7ed8 d9e+d:ee
e;  d"ee6 de<fd=d>Z>	dOded d2e+dee de)e< fd?d@Z?	dOded d2e+dee de,e< fdAdBZ@ddCdDeeA deBeC fdEdFZD							dSded d2e+d*e+dGee+ dee+ d"ee6 dee+ dHeeE d ee	eF  dee deGfdIdJZHddCdDeeA deIeA fdKdLZJ								dTded d2e+d*e+dGee+ dee+ d"ee6 dee+ dHeeE d ee	eF  dee dDeeA deGfdMdNZKdS )U    N)partial)Any	CoroutineDictIterableListLiteralOptionalUnion)AsyncOpenAIOpenAI)	Assistant)AssistantDeleted)GenericLiteLLMParams)exception_typeget_litellm_paramsget_llm_provider
get_secretsupports_httpx_timeout   )AzureAssistantsAPI)OpenAIAssistantsAPI)*   )get_optional_params_add_messagecustom_llm_provider)openaiazureclientreturnc              
      s   t  }d|d< z9tt| |fi |}t }t|j|}td| d\}} }}|d |I d H }t 	|r>|I d H }	|	W S |}	|	W S  t
yW }
 z	td| |
i |dd }
~
ww )NTaget_assistants modelr   r#   r   Zoriginal_exceptionZcompletion_kwargsextra_kwargs)asyncioget_event_loopr   get_assistantscontextvarscopy_contextrunr   run_in_executoriscoroutine	Exceptionr   r   r   kwargsloopfuncctxfunc_with_context_init_responseresponsee r9   N/home/app/Keep/.python/lib/python3.10/site-packages/litellm/assistants/main.pyr    %   s4   

r    api_keyapi_baseapi_versionc                 K   sL  | dd }|d urt|tstdtd!|||d|}td!i |}|jp/|ddp/d}	|	d urHt|	tj	rHt
| du rH|	jpDd}
|
}	n|	d urWt|	tj	sWt|	}	n|	d u r]d}	d }| dkr|jpttjpttd	pttd
ptd}|jptjptdd pd }|jptjptjptd}tj|||	|j|||d}nh| dkr|jptjptd}|jptjptd}|jptjptjptdptd}|di }d }|d ur| dd }ntd}tj|||||	|j|||d	}ntjjd| d| tjddtjddddd |d u r$tjjd| d| tjddtjddddd |S )"Nr    zFInvalid value passed in for aget_assistants. Only bool or None allowedr;   r<   r=   request_timeoutX  F     @r   OPENAI_BASE_URLOPENAI_API_BASEhttps://api.openai.com/v1OPENAI_ORGANIZATIONOPENAI_API_KEY)r<   r;   timeoutmax_retriesorganizationr   r    r   AZURE_API_BASEAZURE_API_VERSIONAZURE_OPENAI_API_KEYAZURE_API_KEY
extra_bodyazure_ad_tokenAZURE_AD_TOKEN)	r<   r;   r=   rO   rG   rH   r   r    litellm_paramszLLiteLLM doesn't support {} for 'get_assistants'. Only 'openai' is supported.n/a  Unsupported providercreate_thread"https://github.com/BerriAI/litellmmethodurlstatus_codecontentrequestmessager#   llm_providerr7   r9   ) pop
isinstanceboolr.   r   r   rG   gethttpxTimeoutr   readfloatr<   litellmosgetenvrI   r;   
openai_keyopenai_assistants_apir(   rH   r   r=   	azure_keyazure_assistants_api
exceptionsBadRequestErrorformatResponseRequest)r   r   r;   r<   r=   r0   r    optional_paramslitellm_params_dictrG   read_timeoutr7   rI   rN   rO   r9   r9   r:   r(   J   s   



	
r(   c              
      s   t  }d|d< |dd }z=||d< tt| |fi |}t }t|j|}t|| d\}} }}|	d |I d H }	t 
|	rH|	I d H }
|
W S |	}
|
W S  tya } z	t|| |i |dd }~ww )NTasync_create_assistantsr#   r   r"   r$   )r&   r'   ra   r   create_assistantsr)   r*   r+   r   r,   r-   r.   r   )r   r   r0   r1   r#   r2   r3   r4   r5   r6   r7   r8   r9   r9   r:   acreate_assistants   s8   

rz   r#   namedescriptioninstructionstoolstool_resourcesmetadatatemperaturetop_presponse_formatc                 K   sn  | dd }|d urt|tstdtd&|||d|}td&i |}|jp/|ddp/d}|d urHt|tj	rHt
| du rH|jpDd}|}n|d urWt|tj	sWt|}n|d u r]d}|||||||||	|
d
}d	d
 | D }d }| dkr|jptjptdptdpd}|jptjptdd pd }|jptjptjptd}tj||||j||||d}nq| dkr|jptjptd}|jptjptd}|jptjptjptdptd}|di }d }|d ur| dd }ntd}t|trd }tj||||||j||||d
}ntjjd| d| tj ddtj!dd d!d"d#|d u r5tjj"d$|| d%|S )'Nrx   zNInvalid value passed in for async_create_assistants. Only bool or None allowedr>   r?   r@   FrA   )
r#   r{   r|   r}   r~   r   r   r   r   r   c                 S   s   i | ]\}}|d ur||qS Nr9   ).0kvr9   r9   r:   
<dictcomp>5  s    z%create_assistants.<locals>.<dictcomp>r   rB   rC   rD   rE   rF   )r<   r;   rG   rH   rI   create_assistant_datar   rx   r   rJ   rK   rL   rM   rN   rO   rP   )
r<   r;   rO   r=   rG   rH   r   rx   r   rQ   zOLiteLLM doesn't support {} for 'create_assistants'. Only 'openai' is supported.rR   rS   rT   rU   rV   rW   rZ   r^   z-No response returned from 'create_assistants'r_   r#   r`   r9   )#ra   rb   rc   
ValueErrorr   r   rG   rd   re   rf   r   rg   rh   itemsr<   ri   rj   rk   rI   r;   rl   rm   ry   rH   r   r=   rn   r   ro   rp   rq   rr   rs   rt   InternalServerError)r   r#   r{   r|   r}   r~   r   r   r   r   r   r   r;   r<   r=   r0   rx   ru   rv   rG   rw   r   r7   rI   rN   rO   r9   r9   r:   ry      s  








ry   c              
      s   t  }d|d< z<||d< tt| fi |}t }t|j|}td| d\}} }}|d |I d H }t 	|rA|I d H }	|	W S |}	|	W S  t
yZ }
 z	td| |
i |dd }
~
ww )NTasync_delete_assistantsr   r!   r"   r$   )r&   r'   r   delete_assistantr)   r*   r+   r   r,   r-   r.   r   r/   r9   r9   r:   adelete_assistant  s6   

r   assistant_idc                 K   s@  t d#|||d|}td#i |}|dd }	|	d ur%t|	ts%td|jp/|ddp/d}
|
d urHt|
tj	rHt
| du rH|
jpDd}|}
n|
d urWt|
tj	sWt|
}
n|
d u r]d}
d }| dkr|jpttjpttd	pttd
ptd}|jptjptdd pd }|jptjptjptd}tj|||
|j||||	d}np| dkr|jptjptd}|jptjptd}|jptjptjptdptd}|di }d }|d ur|dd }ntd}t|trd }tj||||||
|j||	|d
}ntjjd| d| tjddtj ddddd |d u rtjj!d!d| d"|S )$Nr>   r   zNInvalid value passed in for async_delete_assistants. Only bool or None allowedr?   r@   FrA   r   rB   rC   rD   rE   rF   )r<   r;   rG   rH   rI   r   r   r   r   rJ   rK   rL   rM   rN   rO   rP   )
r   r<   r;   rO   r=   rG   rH   r   r   rQ   zNLiteLLM doesn't support {} for 'delete_assistant'. Only 'openai' is supported.rR   rS   rT   r   rV   rW   rZ   r^   z,No response returned from 'delete_assistant'r   r9   )"r   r   ra   rb   rc   r   rG   rd   re   rf   r   rg   rh   r<   ri   rj   rk   rI   r;   rl   rm   r   rH   r   r=   rn   r   ro   rp   rq   rr   rs   rt   r   )r   r   r   r;   r<   r=   r0   ru   rv   r   rG   rw   r7   rI   rN   rO   r9   r9   r:   r     s   	







r   c           
   
      s   t  }d|d< z8tt| fi |}t }t|j|}td| d\}} }}|d |I d H }t 	|r=|I d H }|W S |}|W S  t
yV }	 z	td| |	i |dd }	~	ww )NTacreate_threadr!   r"   r$   )r&   r'   r   rU   r)   r*   r+   r   r,   r-   r.   r   )
r   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r9   r:   r   O  s4   

r   messagesc                 K   s  | dd}td i |}td i |}|jp| ddpd}	|	dur7t|	tjr7t| du r7|	jp3d}
|
}	n|	durFt|	tjsFt	|	}	n|	du rLd}	d}d}d}| dkr|j
pgtj
pgtdpgtd	pgd
}|jputjputddpud}|jptjptjptd}tj|||||	|j|||d	}|S | dkr|j
ptj
ptd}|jptjptjptdptd}|jptjptd}| di }d}|dur|dd}ntd}t|trd}tj|||||||	|j|||d}|S tjjd| d| tjddtjddddd)!a  
    - get the llm provider
    - if openai - route it there
    - pass through relevant params

    ```
    from litellm import create_thread

    create_thread(
        custom_llm_provider="openai",
        ### OPTIONAL ###
        messages =  {
            "role": "user",
            "content": "Hello, what is AI?"
            },
            {
            "role": "user",
            "content": "How does AI work? Explain it in simple terms."
        }]
    )
    ```
    r   Nr?   r@   FrA   r   rB   rC   rD   rE   rF   )	r   r   r<   r;   rG   rH   rI   r   r   r   rJ   rL   rM   rK   rN   rO   rP   )r   r   r<   r;   rO   r=   rG   rH   r   r   rQ   KLiteLLM doesn't support {} for 'create_thread'. Only 'openai' is supported.rR   rS   rT   rU   rV   rW   rZ   r^   r9   )rd   r   r   rG   rb   re   rf   r   rg   rh   r<   ri   rj   rk   rI   r;   rl   rm   rU   rH   r   rn   r=   ra   r   ro   rp   rq   rr   rs   rt   )r   r   r   r   r   r0   r   ru   rv   rG   rw   r<   r;   r7   rI   r=   rN   rO   r9   r9   r:   rU   r  s   



B	
rU   	thread_idc              
         t  }d|d< z:tt| ||fi |}t }t|j|}td| d\}} }}|d |I d H }	t 	|	r?|	I d H }
|
W S |	}
|
W S  t
yX } z	td| |i |dd }~ww )NTaget_threadr!   r"   r$   )r&   r'   r   
get_threadr)   r*   r+   r   r,   r-   r.   r   r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r9   r:   r     s4   

r   c                 K   s
  | dd}td i |}td i |}|jp|ddpd}|dur7t|tjr7t| du r7|j	p3d}|}n|durFt|tjsFt
|}n|du rLd}d}	d}
d}| dkr|jpgtjpgtdpgtd	pgd
}	|jputjputddpud}|jptjptjptd}
tj||	|
||j|||d}|S | dkr|jptjptd}	|jptjptd}|jptjptjptdptd}
|di }d}|dur| dd}ntd}t|trd}tj||	|
||||j|||d
}|S tjjd| d| tjddtjddddd)!z(Get the thread object, given a thread_idr   Nr?   r@   FrA   r   rB   rC   rD   rE   rF   )r   r<   r;   rG   rH   rI   r   r   r   rJ   rK   rL   rM   rN   rO   rP   )
r   r<   r;   rO   r=   rG   rH   r   r   rQ   zHLiteLLM doesn't support {} for 'get_thread'. Only 'openai' is supported.rR   rS   rT   rU   rV   rW   rZ   r^   r9   )ra   r   r   rG   rd   rb   re   rf   r   rg   rh   r<   ri   rj   rk   rI   r;   rl   rm   r   rH   r   r=   rn   r   ro   rp   rq   rr   rs   rt   )r   r   r   r0   r   ru   rv   rG   rw   r<   r;   r7   rI   r=   rN   rO   r9   r9   r:   r   (  s   



@
r   role)userZ	assistantr\   attachmentsc              
      s   t  }d|d< z>tt| ||||||fi |}	t }
t|
j|	}td| d\}} }}|d |I d H }t 	|rC|I d H }|W S |}|W S  t
y\ } z	td| |i |dd }~ww )NTa_add_messager!   r"   r$   )r&   r'   r   add_messager)   r*   r+   r   r,   r-   r.   r   )r   r   r   r\   r   r   r   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r9   r:   r     sJ   
	

r   c                 K   s4  | dd }t||||d}	td%i |}
td%i |}t|	d |	d |	d |	d | d}|jp7|dd	p7d	}|d urPt|tj	rPt
| d
u rP|jpLd	}|}n|d ur_t|tj	s_t|}n|d u red}d }d }d }| dkr|jptjptdptdpd}|jptjptdd pd }|jptjptjptd}tj||||||j|||d	}|S | dkr|jptjptd}|jptjptd}|jptjptjptdptd}|di }d }|d ur| dd }ntd}tj||||||||j|||
d}|S tjjd| d| tjddtjd d!d"d#d$)&Nr   )r   r\   r   r   r   r\   r   r   )r   r\   r   r   r   r?   r@   FrA   r   rB   rC   rD   rE   rF   )	r   message_datar<   r;   rG   rH   rI   r   r   r   rJ   rK   rL   rM   rN   rO   rP   )r   r   r<   r;   r=   rO   rG   rH   r   r   rQ   r   rR   rS   rT   rU   rV   rW   rZ   r^   r9   ) ra   ZMessageDatar   r   r   rG   rd   rb   re   rf   r   rg   rh   r<   ri   rj   rk   rI   r;   rl   rm   r   rH   r   r=   rn   ro   rp   rq   rr   rs   rt   )r   r   r   r\   r   r   r   r0   r   Z_message_datarv   ru   r   rG   rw   r;   r<   r7   rI   r=   rN   rO   r9   r9   r:   r     s   	



@
r   c              
      r   )NTaget_messagesr!   r"   r$   )r&   r'   r   get_messagesr)   r*   r+   r   r,   r-   r.   r   r   r9   r9   r:   r   Y  sB   	

r   c                 K   s  | dd }tdi |}tdi |}|jp|ddpd}|d ur7t|tjr7t| du r7|j	p3d}|}n|d urFt|tjsFt
|}n|d u rLd}d }	d }
d }| dkr|jpgtjpgtdpgtdpgd	}|jputjputd
d pud }|jptjptjptd}
tj|||
||j|||d}	|	S | dkr|jptjptd}|jptjptd}|jptjptjptdptd}
|di }d }|d ur| dd }ntd}tj|||
||||j|||d
}	|	S tjjd| d| tjddtjddddd) Nr   r?   r@   FrA   r   rB   rC   rD   rE   rF   )r   r<   r;   rG   rH   rI   r   r   r   rJ   rK   rL   rM   rN   rO   rP   )
r   r<   r;   r=   rO   rG   rH   r   r   rQ   zJLiteLLM doesn't support {} for 'get_messages'. Only 'openai' is supported.rR   rS   rT   rU   rV   rW   rZ   r^   r9   )ra   r   r   rG   rd   rb   re   rf   r   rg   rh   r<   ri   rj   rk   rI   r;   rl   rm   r   rH   r   r=   rn   ro   rp   rq   rr   rs   rt   )r   r   r   r0   r   ru   rv   rG   rw   r7   r;   r<   rI   r=   rN   rO   r9   r9   r:   r     s   



>r   )event_handlerr   c                 K   s   d|d< t dd| d|S )NTarun_threadstreamr   r9   
run_threadr   r0   r9   r9   r:   arun_thread_stream  s   r   additional_instructionsr   c
                    s   t  }d|
d< zAtt| |||||||||	fi |
}t }t|j|}td| d\}} }}|d |I d H }t 	|rF|I d H }|W S |}|W S  t
y_ } z	td| |i |
dd }~ww )NTr   r!   r"   r$   )r&   r'   r   r   r)   r*   r+   r   r,   r-   r.   r   )r   r   r   r   r}   r   r#   r   r~   r   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r9   r:   r     sP   

r   c                 K   s   t dd| d|S )NTr   r9   r   r   r9   r9   r:   run_thread_stream>  s   r   c                 K   s  | dd}td/i |}td/i |}|jp|ddpd}|dur7t|tjr7t| du r7|j	p3d}|}n|durFt|tjsFt
|}n|du rLd}d}| dkr|jpctjpctdpctd	pcd
}|jpqtjpqtddpqd}|jptjptjptd}tjd/i d|d|d|d|d|d|d|d|d|d|d|d|jd|d|	d|d|
}|S | dkro|jptjptd}|jptjptd}|jptjptjptdptd }|d!i }d}|dur| d"d}ntd#}tjd/i d|d|d|d|d|d|d|d|d|dur t|ndd|dur,t|ndd$|dur8t|ndd"|durDt|ndd|d|jd|	d|d%|}|S d|d|jd|	d|d%|}|S tjjd&| d'| tjd(d)tjd*d+d,d-d.)0zRun a given thread + assistant.r   Nr?   r@   FrA   r   rB   rC   rD   rE   rF   r   r   r   r}   r   r#   r   r~   r<   r;   rG   rH   rI   r   r   r   rJ   rK   rL   rM   rN   rO   rP   r=   rQ   zHLiteLLM doesn't support {} for 'run_thread'. Only 'openai' is supported.rR   rS   rT   rU   rV   rW   rZ   r^   r9   )ra   r   r   rG   rd   rb   re   rf   r   rg   rh   r<   ri   rj   rk   rI   r;   rl   rm   r   rH   r   r=   rn   ro   strrp   rq   rr   rs   rt   )r   r   r   r   r}   r   r#   r   r~   r   r   r0   r   ru   rv   rG   rw   r7   r<   rI   r;   r=   rN   rO   r9   r9   r:   r   F  s>  




	
L

	
  r   r   )NNNN)NNNNNNNNNNNNN)NNN)NNNNNNN)NNNNNNNN)Lr&   r)   rj   	functoolsr   typingr   r   r   r   r   r   r	   r
   re   r   r   r   Zopenai.types.beta.assistantr   Z#openai.types.beta.assistant_deletedr   ri   Zlitellm.types.routerr   Zlitellm.utilsr   r   r   r   r   Zllms.azure.assistantsr   Zllms.openai.openair   Ztypes.llms.openaiZtypes.routerutilsr   rm   ro   ZAsyncCursorPager    r   ZSyncCursorPager(   rz   rh   ry   r   r   Threadr   ZOpenAICreateThreadParamsMessagedictZ%OpenAICreateThreadParamsToolResourcesrU   r   r   Z
AttachmentZOpenAIMessager   r   r   r   ZAssistantEventHandlerZAsyncAssistantStreamManagerZAsyncAssistantEventHandlerr   rc   ZAssistantToolParamZRunr   ZAssistantStreamManagerr   r   r9   r9   r9   r:   <module>   sZ  (
'
 	
*	

 %
)
 
%

 
)
}
	
:
	
 
0
v

	

=

	
