aboutsummaryrefslogtreecommitdiff
o

|f$ @sddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddlm
Z
mZddlm
Z
mZddlmZddlmZmZejejeZGdd	d	eZGd
ddeZdS)N)HTTPAdapter)Retry)	HTTPErrorSession)urljoinquote)urlretrieve)UnprocessableEntityLLMErrorcs(eZdZfddZfddZZS)TimeoutHTTPAdaptercs||_tj|i|dS)zTimeoutHTTPAdapter constructor.
        Args:
            timeout (int): How many seconds to wait for the server to send data before
                giving up.
        N)timeoutsuper__init__)selfrargskwargs	__class__A/home/shebes/code/GN-LLM-Hacking/gnqa_eval/src/apis/gnqaclient.pyrszTimeoutHTTPAdapter.__init__cs0|d}|dur|j|d<tj|fi|S)zAOverride :obj:`HTTPAdapter` send method to add a default timeout.rN)getrr
send)rrequestrrrrrrs

zTimeoutHTTPAdapter.send)__name__
__module____qualname__rr
__classcell__rrrrrs	rcseZdZdZdZd$fdd	Zedd	Zed
dZedd
Z	ddZ
ddZddZfddZ
eddZeddZeddZddZddZd d!Zd"d#ZZS)%GeneNetworkQAClientaGeneNetworkQA Client

    This class provides a client object interface to the GeneNetworkQA API.
    It extends the `requests.Session` class and includes authorization, base URL,
    request timeouts, and request retries.

    Args:
        account (str): Base address subdomain.
        api_key (str): API key.
        version (str, optional): API version, defaults to "v3".
        timeout (int, optional): Timeout value, defaults to 5.
        total_retries (int, optional): Total retries value, defaults to 5.
        backoff_factor (int, optional): Retry backoff factor value, defaults to 30.

    Usage:
        from genenetworkqa import GeneNetworkQAClient
        gnqa = GeneNetworkQAClient(account="account-name", api_key="XXXXXXXXXXXXXXXXXXX...")
    z*https://genenetwork.fahamuai.com/api/tasksv3cspt|jdd|i|jd|_|jd|_t|t|gd|dd}|	d||	d	|dS)
N
AuthorizationzBearer z/answersz	/feedback)iiii)totalstatus_forcelistbackoff_factor)rmax_retrieszhttps://zhttp://)
r
rheadersupdateBASE_URL
answer_urlfeedback_urlrrmount)raccountapi_keyversionr
total_retriesr%adapterrrrr<s 

	zGeneNetworkQAClient.__init__c	CsVt|tr|d}|St|tr)d|dd|dd|dd|dd}|S)Nz.txtz{0}.{1}.{2}.{3} authortitleyeardoi)
isinstancestrremovesuffixdictformatr)bib_inforrrformat_bibliography_infoOs





z,GeneNetworkQAClient.format_bibliography_infoc
Csztjt|i|d}|Wntjjy%}ztd|d}~ww|jdkr1t|dfSt	|}t
||}|jdkrEt|dfS|dfS)Ndatar'zError making the request: r)requestspostbase_urlraise_for_status
exceptionsRequestExceptionRuntimeErrorstatus_codenegative_status_msgget_task_id_from_resultget_answer_using_task_id)
extend_urlmy_authresponseetask_idrrrask_the_documents]s 



z%GeneNetworkQAClient.ask_the_documentscCsd|jd|jS)NzError: Status code -z
- Reason::)rIreason)rOrrrrJssz'GeneNetworkQAClient.negative_status_msgcOsN|j|}|jd|g|Ri|}|jdkr||dfS||}||fS)NPOSTr@r)r)custom_requestrIrJgetTaskIDFromResult)rexUrlrraskUrlresrQrrraskxs


zGeneNetworkQAClient.askcOX|j||}|jd|g|Ri|}|jdkr(tdt|||dfS|dfSNGETr@zThe result is {0}rrA)r*extendForTaskIDrUrIprintr;rJrtaskidrrqueryrYrrranswer
zGeneNetworkQAClient.answercOr[r\)r*extendTaskIDrUrIr_r;rJr`rrr
get_answerrdzGeneNetworkQAClient.get_answerc
sd}d}t|D]}}ztj||g|Ri|}|WnEtjjyT}	z(|	jjdkr<t	|	j|	jd|	jjd|	jjdkrNt	|	j|	jd|j
|	d}	~	wtjjyc}	z|	d}	~	ww|jr|
dkr||d	dur|t|q|St|q|S)
N2r"zResponse Error,status_code:z,Reason: Use of Invalid Tokeniz%404 Client Error: Not Found for url: rr?)ranger
rrErBrFrrOrIr
r)rGoklowerjsonrtimesleep)
rmethodurlrrr&retry_delayirOerrorrrrrUs0
z"GeneNetworkQAClient.custom_requestcCs"t|j}d|dd}|S)N	?task_id=rQr3)rlloadstextr)rOrQresultrrrrKsz+GeneNetworkQAClient.get_task_id_from_resultc
CsDztjt|i|d}||WStjjy!}z|d}~ww)Nr>)rBrr*rErFrG)rMrNrOrsrrrrLs
z,GeneNetworkQAClient.get_answer_using_task_idcCstddd|DS)a
        Filters out non-printable characters from the input string and parses it as JSON.

        Args:
            val (str): Input string to be filtered and parsed.

        Returns:
            dict: Parsed JSON object.
        # remove  this
        r3cSsg|]}|tjvrt|qSr)string	printabler8).0charrrr
<listcomp>sz<GeneNetworkQAClient.filter_response_text.<locals>.<listcomp>)rlrujoin)valrrrfilter_response_textsz(GeneNetworkQAClient.filter_response_textcCst|jS)N)rlrurv)rrYrrrrVz'GeneNetworkQAClient.getTaskIDFromResultcCsdt|dS)NrtrQr8rrQrrrresz GeneNetworkQAClient.extendTaskIDcCsdt|S)Nrtrrrrrr^rz#GeneNetworkQAClient.extendForTaskIDc	Csrt|}td|\}}t|\}}|dkr5t|j}|didd}|didd}||fS|dfS)Nz?ask=rAr?rcr3contextzUnfortunately, I have nothing.)r
api_clientrZrfrrvr)	rrbqstrrYrQsuccess	resp_textrcrrrrget_gnqas
zGeneNetworkQAClient.get_gnqa)rrr r)rrr__doc__r)rstaticmethodr=rRrJrZrcrfrUrKrLrrVrer^rrrrrrr&s0







r)rlrxosdatetimermrBrequests.adaptersr$requests.packages.urllib3.util.retryrrrurllib.parserrurllib.requestrerrors.rag_errr	r
pathr}dirname__file__basedirrrrrrr<module>s