diff --git a/api/constants/model_template.py b/api/constants/model_template.py index 95574b83f..3b8fa3fb5 100644 --- a/api/constants/model_template.py +++ b/api/constants/model_template.py @@ -16,7 +16,7 @@ model_templates = { }, 'model_config': { 'provider': 'openai', - 'model_id': 'text-davinci-003', + 'model_id': 'gpt-3.5-turbo-instruct', 'configs': { 'prompt_template': '', 'prompt_variables': [], @@ -30,7 +30,7 @@ model_templates = { }, 'model': json.dumps({ "provider": "openai", - "name": "text-davinci-003", + "name": "gpt-3.5-turbo-instruct", "completion_params": { "max_tokens": 512, "temperature": 1, @@ -104,7 +104,7 @@ demo_model_templates = { 'mode': 'completion', 'model_config': AppModelConfig( provider='openai', - model_id='text-davinci-003', + model_id='gpt-3.5-turbo-instruct', configs={ 'prompt_template': "Please translate the following text into {{target_language}}:\n", 'prompt_variables': [ @@ -140,7 +140,7 @@ demo_model_templates = { pre_prompt="Please translate the following text into {{target_language}}:\n", model=json.dumps({ "provider": "openai", - "name": "text-davinci-003", + "name": "gpt-3.5-turbo-instruct", "completion_params": { "max_tokens": 1000, "temperature": 0, @@ -222,7 +222,7 @@ demo_model_templates = { 'mode': 'completion', 'model_config': AppModelConfig( provider='openai', - model_id='text-davinci-003', + model_id='gpt-3.5-turbo-instruct', configs={ 'prompt_template': "请将以下文本翻译为{{target_language}}:\n", 'prompt_variables': [ @@ -258,7 +258,7 @@ demo_model_templates = { pre_prompt="请将以下文本翻译为{{target_language}}:\n", model=json.dumps({ "provider": "openai", - "name": "text-davinci-003", + "name": "gpt-3.5-turbo-instruct", "completion_params": { "max_tokens": 1000, "temperature": 0, diff --git a/api/core/model_providers/models/llm/openai_model.py b/api/core/model_providers/models/llm/openai_model.py index c63b04119..812e4a3cb 100644 --- a/api/core/model_providers/models/llm/openai_model.py +++ b/api/core/model_providers/models/llm/openai_model.py @@ -17,6 +17,7 @@ from core.model_providers.models.entity.model_params import ModelMode, ModelKwar from models.provider import ProviderType, ProviderQuotaType COMPLETION_MODELS = [ + 'gpt-3.5-turbo-instruct', # 4,096 tokens 'text-davinci-003', # 4,097 tokens ] @@ -31,6 +32,7 @@ MODEL_MAX_TOKENS = { 'gpt-4': 8192, 'gpt-4-32k': 32768, 'gpt-3.5-turbo': 4096, + 'gpt-3.5-turbo-instruct': 4096, 'gpt-3.5-turbo-16k': 16384, 'text-davinci-003': 4097, } diff --git a/api/core/model_providers/providers/openai_provider.py b/api/core/model_providers/providers/openai_provider.py index 1ac6af442..33821fd68 100644 --- a/api/core/model_providers/providers/openai_provider.py +++ b/api/core/model_providers/providers/openai_provider.py @@ -40,6 +40,10 @@ class OpenAIProvider(BaseModelProvider): ModelFeature.AGENT_THOUGHT.value ] }, + { + 'id': 'gpt-3.5-turbo-instruct', + 'name': 'GPT-3.5-Turbo-Instruct', + }, { 'id': 'gpt-3.5-turbo-16k', 'name': 'gpt-3.5-turbo-16k', @@ -128,6 +132,7 @@ class OpenAIProvider(BaseModelProvider): 'gpt-4': 8192, 'gpt-4-32k': 32768, 'gpt-3.5-turbo': 4096, + 'gpt-3.5-turbo-instruct': 4096, 'gpt-3.5-turbo-16k': 16384, 'text-davinci-003': 4097, } diff --git a/api/core/model_providers/rules/openai.json b/api/core/model_providers/rules/openai.json index aa2c9f336..6fbbe9142 100644 --- a/api/core/model_providers/rules/openai.json +++ b/api/core/model_providers/rules/openai.json @@ -30,6 +30,12 @@ "unit": "0.001", "currency": "USD" }, + "gpt-3.5-turbo-instruct": { + "prompt": "0.0015", + "completion": "0.002", + "unit": "0.001", + "currency": "USD" + }, "gpt-3.5-turbo-16k": { "prompt": "0.003", "completion": "0.004", diff --git a/api/core/third_party/langchain/llms/open_ai.py b/api/core/third_party/langchain/llms/open_ai.py index e9214f0bf..e15113373 100644 --- a/api/core/third_party/langchain/llms/open_ai.py +++ b/api/core/third_party/langchain/llms/open_ai.py @@ -14,6 +14,9 @@ class EnhanceOpenAI(OpenAI): max_retries: int = 1 """Maximum number of retries to make when generating.""" + def __new__(cls, **data: Any): # type: ignore + return super(EnhanceOpenAI, cls).__new__(cls) + @root_validator() def validate_environment(cls, values: Dict) -> Dict: """Validate that api key and python package exists in environment.""" diff --git a/api/requirements.txt b/api/requirements.txt index f2db4e14a..48766a445 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -11,7 +11,7 @@ flask-cors==3.0.10 gunicorn~=21.2.0 gevent~=22.10.2 langchain==0.0.250 -openai~=0.27.8 +openai~=0.28.0 psycopg2-binary~=2.9.6 pycryptodome==3.17 python-dotenv==1.0.0 diff --git a/api/tests/integration_tests/models/llm/test_openai_model.py b/api/tests/integration_tests/models/llm/test_openai_model.py index 8c3dd70dd..3deeb2f02 100644 --- a/api/tests/integration_tests/models/llm/test_openai_model.py +++ b/api/tests/integration_tests/models/llm/test_openai_model.py @@ -42,7 +42,7 @@ def decrypt_side_effect(tenant_id, encrypted_openai_api_key): @patch('core.helper.encrypter.decrypt_token', side_effect=decrypt_side_effect) def test_get_num_tokens(mock_decrypt): - openai_model = get_mock_openai_model('text-davinci-003') + openai_model = get_mock_openai_model('gpt-3.5-turbo-instruct') rst = openai_model.get_num_tokens([PromptMessage(content='you are a kindness Assistant.')]) assert rst == 6 @@ -61,7 +61,7 @@ def test_chat_get_num_tokens(mock_decrypt): def test_run(mock_decrypt, mocker): mocker.patch('core.model_providers.providers.base.BaseModelProvider.update_last_used', return_value=None) - openai_model = get_mock_openai_model('text-davinci-003') + openai_model = get_mock_openai_model('gpt-3.5-turbo-instruct') rst = openai_model.run( [PromptMessage(content='Human: Are you Human? you MUST only answer `y` or `n`? \nAssistant: ')], stop=['\nHuman:'],