1
1
import openai
2
2
import json
3
3
import os
4
+ import time
5
+ import logging
4
6
5
7
from filelock import FileLock
6
8
7
9
10
+ log = logging .getLogger ()
11
+
12
+
8
13
class OpenAIChat :
9
14
"""
10
15
Allows for the implementation of a singleton class to chat with OpenAI model for dataset marking.
@@ -50,12 +55,11 @@ def ask(self, message: str) -> str:
50
55
"Please specify OPENAI_KEY in environment parameters."
51
56
)
52
57
messages = [
53
- {"role" : "system" , "content" : "You are a intelligent assistant." },
58
+ {"role" : "system" , "content" : "You are an intelligent assistant." },
54
59
{"role" : "user" , "content" : message },
55
60
]
56
- chat = openai .ChatCompletion .create (
57
- model = self .openai_model , messages = messages
58
- )
61
+ chat = self ._send_request (messages )
62
+
59
63
reply = chat .choices [0 ].message .content
60
64
61
65
# add reply to cache
@@ -76,3 +80,19 @@ def ask(self, message: str) -> str:
76
80
return ""
77
81
78
82
return reply
83
+
84
+ def _send_request (self , messages ):
85
+ sleep_time_values = (5 , 10 , 30 , 60 , 120 )
86
+ for i in range (len (sleep_time_values )):
87
+ try :
88
+ return openai .ChatCompletion .create (
89
+ model = self .openai_model , messages = messages
90
+ )
91
+ except Exception as e :
92
+ sleep_time = sleep_time_values [i ]
93
+ log .info (
94
+ f"Request to OpenAI failed with exception: { e } . Retry #{ i } /5 after { sleep_time } seconds."
95
+ )
96
+ time .sleep (sleep_time )
97
+
98
+ return openai .ChatCompletion .create (model = self .openai_model , messages = messages )
0 commit comments