File size: 1,653 Bytes
246d201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import os
import sys
import time

from openai import OpenAI
from tenacity import (
    retry,
    stop_after_attempt,  # type: ignore
    wait_random_exponential,  # type: ignore
)

if sys.version_info >= (3, 8):
    from typing import Literal
else:
    from typing_extensions import Literal


Model = Literal['gpt-4', 'gpt-3.5-turbo', 'text-davinci-003']

OpenAI.api_key = os.getenv('OPENAI_API_KEY')
OPENAI_GEN_HYP = {
    'temperature': 0,
    'max_tokens': 250,
    'top_p': 1.0,
    'frequency_penalty': 0,
    'presence_penalty': 0,
}


@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6))
def run_chatgpt_query_multi_turn(

    messages,

    model_name='gpt-4-turbo',  # pass "gpt4" for more recent model output

    max_tokens=256,

    temperature=0.0,

    json_response=False,

):
    response = None
    num_retries = 3
    retry = 0
    while retry < num_retries:
        retry += 1
        try:
            client = OpenAI()

            if json_response:
                response = client.chat.completions.create(
                    model=model_name,
                    response_format={'type': 'json_object'},
                    messages=messages,
                    **OPENAI_GEN_HYP,
                )
            else:
                response = client.chat.completions.create(
                    model=model_name, messages=messages, **OPENAI_GEN_HYP
                )
            break

        except Exception as e:
            print(e)
            print('GPT error. Retrying in 2 seconds...')
            time.sleep(2)

    return response