11from typing import Any , Optional
22
33import requests
4+ from requests import RequestException , Response
5+
46from unstract .sdk .constants import LogLevel , PromptStudioKeys , ToolEnv
57from unstract .sdk .helper import SdkHelper
68from unstract .sdk .tool .base import BaseTool
@@ -28,7 +30,15 @@ def __init__(
2830 )
2931 self .bearer_token = tool .get_env_or_die (ToolEnv .PLATFORM_API_KEY )
3032
31- def answer_prompt (self , payload : dict ) -> dict :
33+ def answer_prompt (self , payload : dict [str , Any ]) -> dict [str , Any ]:
34+ return self ._post_call ("answer-prompt" , payload )
35+
36+ def single_pass_extraction (self , payload : dict [str , Any ]) -> dict [str , Any ]:
37+ return self ._post_call ("single-pass-extraction" , payload )
38+
39+ def _post_call (
40+ self , url_path : str , payload : dict [str , Any ]
41+ ) -> dict [str , Any ]:
3242 """Invokes and communicates to prompt service to fetch response for the
3343 prompt.
3444
@@ -46,36 +56,30 @@ def answer_prompt(self, payload: dict) -> dict:
4656 structure_output : {}
4757 }
4858 """
49- result = {
59+ result : dict [ str , Any ] = {
5060 "status" : "ERROR" ,
5161 "error" : "" ,
5262 "cost" : 0 ,
5363 "structure_output" : "" ,
5464 }
55- # TODO : Implement authorization for prompt service
56- # headers = {"Authorization": f"Bearer {self.bearer_token}"}
57- # Upload file to platform
58- url = f"{ self .base_url } /answer-prompt"
59- headers = {"Authorization" : f"Bearer { self .bearer_token } " }
65+ url : str = f"{ self .base_url } /{ url_path } "
66+ headers : dict [str , str ] = {
67+ "Authorization" : f"Bearer { self .bearer_token } "
68+ }
6069 try :
61- response = requests .post (url , json = payload , headers = headers )
62- if response .status_code != 200 :
63- self .tool .stream_log (
64- f"Error while fetching response: { response .text } " ,
65- level = LogLevel .ERROR ,
66- )
67- result ["error" ] = response .text
68- return result
69- else :
70- result ["status" ] = "OK"
71- result ["structure_output" ] = response .text
72- except Exception as e :
70+ # TODO: Review timeout value
71+ response : Response = requests .post (
72+ url , json = payload , headers = headers , timeout = 600
73+ )
74+ response .raise_for_status ()
75+ result ["status" ] = "OK"
76+ result ["structure_output" ] = response .text
77+ except RequestException as e :
78+ result ["error" ] = f"Error occurred: { e } "
7379 self .tool .stream_log (
74- f"Error while fetching response for prompt: { e } " ,
80+ f"Error while fetching response for prompt: { result [ 'error' ] } " ,
7581 level = LogLevel .ERROR ,
7682 )
77- result ["error" ] = str (e )
78- return result
7983 return result
8084
8185 @staticmethod
0 commit comments