@@ -41,9 +41,12 @@ def make_request(input_data: Dict[str, Any], endpoint: str) -> requests.Response
4141 )
4242
4343
44+ import time
45+
46+
4447def subnet_evaluation (quant_query : QuantQuery , quant_response : QuantResponse ) -> float :
4548 """
46- Evaluate the subnet miner query based on the provided QuantQuery and QuantResponse.
49+ Evaluate the subnet miner query based on the provided QuantQuery and QuantResponse, with up to 3 retries on failure .
4750
4851 Args:
4952 quant_query (QuantQuery): The query object containing the query string and metadata.
@@ -56,31 +59,39 @@ def subnet_evaluation(quant_query: QuantQuery, quant_response: QuantResponse) ->
5659 if evaluation_model is None :
5760 evaluation_model = create_evaluation_model ()
5861
59- try :
60- template = env .get_template ("evaluation_prompt.txt" )
61- prompt = template .render (
62- user_prompt = quant_query .query ,
63- agent_answer = "No response provided" if quant_response is None else quant_response .response )
64-
65- # Format messages properly for ChatOpenAI
66- messages = [{"role" : "user" , "content" : prompt }]
67- response = evaluation_model .invoke (messages )
68-
69- # Parse the response
70- answer = response .content if hasattr (response , "content" ) else response ["content" ]
71-
72- # Find ```json{{...}}``` in the answer
73- match = re .search (r"```json\s*({.*})\s*```" , answer , re .DOTALL )
74- if not match :
75- logging .error (f"Could not find JSON in model response: { answer } " )
76- return 0.0
77- json_str = match .group (1 )
78- score = json .loads (json_str )["score" ]
79- # Normalize the score to be between 0 and 1
80- return float (score ) / 50
81- except Exception as e :
82- logging .error (f"subnet_evaluation error: { e } " )
83- return 0.0
62+ retries = 3
63+ delay = 3.0
64+ last_exception = None
65+ for attempt in range (1 , retries + 1 ):
66+ try :
67+ template = env .get_template ("evaluation_prompt.txt" )
68+ prompt = template .render (
69+ user_prompt = quant_query .query ,
70+ agent_answer = "No response provided" if quant_response is None else quant_response .response )
71+
72+ # Format messages properly for ChatOpenAI
73+ messages = [{"role" : "user" , "content" : prompt }]
74+ response = evaluation_model .invoke (messages )
75+
76+ # Parse the response
77+ answer = response .content if hasattr (response , "content" ) else response ["content" ]
78+
79+ # Find ```json{{...}}``` in the answer
80+ match = re .search (r"```json\s*({.*})\s*```" , answer , re .DOTALL )
81+ if not match :
82+ logging .error (f"Could not find JSON in model response: { answer } " )
83+ return 0.0
84+ json_str = match .group (1 )
85+ score = json .loads (json_str )["score" ]
86+ # Normalize the score to be between 0 and 1
87+ return float (score ) / 50
88+ except Exception as e :
89+ last_exception = e
90+ logging .error (f"subnet_evaluation attempt { attempt } failed: { e } " )
91+ if attempt < retries :
92+ time .sleep (delay )
93+ logging .error (f"subnet_evaluation failed after { retries } attempts: { last_exception } " )
94+ return 0.0
8495
8596
8697def subnet_query (quant_query : QuantQuery ) -> QuantResponse :
0 commit comments