2023-03-05 14:07:25 +00:00
|
|
|
import aiohttp
|
|
|
|
import asyncio
|
|
|
|
import json
|
2023-03-10 13:43:18 +00:00
|
|
|
from log import getlogger
|
|
|
|
logger = getlogger()
|
2023-03-05 14:07:25 +00:00
|
|
|
|
2023-04-10 02:52:18 +00:00
|
|
|
class askGPT:
|
|
|
|
def __init__(self):
|
|
|
|
self.session = aiohttp.ClientSession()
|
2023-03-05 14:07:25 +00:00
|
|
|
|
2023-04-10 02:52:18 +00:00
|
|
|
async def oneTimeAsk(self, prompt: str, api_endpoint: str, headers: dict) -> str:
|
|
|
|
jsons = {
|
|
|
|
"model": "gpt-3.5-turbo",
|
|
|
|
"messages": [
|
|
|
|
{
|
|
|
|
"role": "user",
|
|
|
|
"content": prompt,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
}
|
2023-04-10 11:37:43 +00:00
|
|
|
max_try = 3
|
2023-03-10 10:53:51 +00:00
|
|
|
while max_try > 0:
|
2023-03-05 14:07:25 +00:00
|
|
|
try:
|
2023-04-10 02:52:18 +00:00
|
|
|
async with self.session.post(url=api_endpoint,
|
2023-04-10 11:37:43 +00:00
|
|
|
json=jsons, headers=headers, timeout=60) as response:
|
2023-03-05 14:07:25 +00:00
|
|
|
status_code = response.status
|
|
|
|
if not status_code == 200:
|
2023-03-10 13:43:18 +00:00
|
|
|
# print failed reason
|
|
|
|
logger.warning(str(response.reason))
|
2023-03-10 10:53:51 +00:00
|
|
|
max_try = max_try - 1
|
2023-03-05 14:07:25 +00:00
|
|
|
# wait 2s
|
2023-03-10 00:27:48 +00:00
|
|
|
await asyncio.sleep(2)
|
2023-03-05 14:07:25 +00:00
|
|
|
continue
|
|
|
|
|
|
|
|
resp = await response.read()
|
|
|
|
return json.loads(resp)['choices'][0]['message']['content']
|
|
|
|
except Exception as e:
|
2023-03-10 13:43:18 +00:00
|
|
|
logger.error("Error Exception", exc_info=True)
|