support new models and update dependencies

`gpt-3.5-turbo-0613`, `gpt-3.5-turbo-16k`, `gpt-3.5-turbo-16k-0613`, `gpt-4-0613`, `gpt-4-32k-0613`
This commit is contained in:
ned
2023-06-14 10:27:06 +02:00
parent 1433207416
commit 74dfdb81cd
3 changed files with 47 additions and 33 deletions

View File

@@ -13,10 +13,11 @@ from datetime import date
from calendar import monthrange
# Models can be found here: https://platform.openai.com/docs/models/overview
GPT_3_MODELS = ("gpt-3.5-turbo", "gpt-3.5-turbo-0301")
GPT_4_MODELS = ("gpt-4", "gpt-4-0314")
GPT_4_32K_MODELS = ("gpt-4-32k", "gpt-4-32k-0314")
GPT_ALL_MODELS = GPT_3_MODELS + GPT_4_MODELS + GPT_4_32K_MODELS
GPT_3_MODELS = ("gpt-3.5-turbo", "gpt-3.5-turbo-0301", "gpt-3.5-turbo-0613")
GPT_3_16K_MODELS = ("gpt-3.5-turbo-16k", "gpt-3.5-turbo-16k-0613")
GPT_4_MODELS = ("gpt-4", "gpt-4-0314", "gpt-4-0613")
GPT_4_32K_MODELS = ("gpt-4-32k", "gpt-4-32k-0314", "gpt-4-32k-0613")
GPT_ALL_MODELS = GPT_3_MODELS + GPT_3_16K_MODELS + GPT_4_MODELS + GPT_4_32K_MODELS
def default_max_tokens(model: str) -> int:
@@ -25,7 +26,16 @@ def default_max_tokens(model: str) -> int:
:param model: The model name
:return: The default number of max tokens
"""
return 1200 if model in GPT_3_MODELS else 2400
base = 1200
if model in GPT_3_MODELS:
return base
elif model in GPT_4_MODELS:
return base * 2
elif model in GPT_3_16K_MODELS:
return base * 4
elif model in GPT_4_32K_MODELS:
return base * 8
# Load translations
parent_dir_path = os.path.join(os.path.dirname(__file__), os.pardir)
@@ -33,6 +43,7 @@ translations_file_path = os.path.join(parent_dir_path, 'translations.json')
with open(translations_file_path, 'r', encoding='utf-8') as f:
translations = json.load(f)
def localized_text(key, bot_language):
"""
Return translated text for a key in specified bot_language.
@@ -272,12 +283,15 @@ class OpenAIHelper:
return response.choices[0]['message']['content']
def __max_model_tokens(self):
base = 4096
if self.config['model'] in GPT_3_MODELS:
return 4096
return base
if self.config['model'] in GPT_3_16K_MODELS:
return base * 4
if self.config['model'] in GPT_4_MODELS:
return 8192
return base * 2
if self.config['model'] in GPT_4_32K_MODELS:
return 32768
return base * 8
raise NotImplementedError(
f"Max tokens for model {self.config['model']} is not implemented yet."
)
@@ -295,7 +309,7 @@ class OpenAIHelper:
except KeyError:
encoding = tiktoken.get_encoding("gpt-3.5-turbo")
if model in GPT_3_MODELS:
if model in GPT_3_MODELS + GPT_3_16K_MODELS:
tokens_per_message = 4 # every message follows <|start|>{role/name}\n{content}<|end|>\n
tokens_per_name = -1 # if there's a name, the role is omitted
elif model in GPT_4_MODELS + GPT_4_32K_MODELS: