pull/12547/head
Yeuoly 1 year ago
parent 94a62f6b4e
commit e4c4490175

@ -5,6 +5,7 @@ on:
branches: branches:
- "main" - "main"
- "deploy/dev" - "deploy/dev"
- "plugins/beta"
release: release:
types: [published] types: [published]

@ -4,6 +4,7 @@ on:
pull_request: pull_request:
branches: branches:
- main - main
- plugins/beta
paths: paths:
- api/migrations/** - api/migrations/**
- .github/workflows/db-migration-test.yml - .github/workflows/db-migration-test.yml

@ -4,6 +4,7 @@ on:
pull_request: pull_request:
branches: branches:
- main - main
- plugins/beta
concurrency: concurrency:
group: style-${{ github.head_ref || github.run_id }} group: style-${{ github.head_ref || github.run_id }}
@ -82,7 +83,6 @@ jobs:
if: steps.changed-files.outputs.any_changed == 'true' if: steps.changed-files.outputs.any_changed == 'true'
run: yarn run lint run: yarn run lint
superlinter: superlinter:
name: SuperLinter name: SuperLinter
runs-on: ubuntu-latest runs-on: ubuntu-latest

@ -2,6 +2,6 @@ from core.helper.marketplace import download_plugin_pkg
def test_download_plugin_pkg(): def test_download_plugin_pkg():
pkg = download_plugin_pkg("yeuoly/google:0.0.1@4ff79ee644987e5b744d9c5b7a735d459fe66f26b28724326a7834d7e459e708") pkg = download_plugin_pkg("langgenius/bing:0.0.1@e58735424d2104f208c2bd683c5142e0332045b425927067acf432b26f3d970b")
assert pkg is not None assert pkg is not None
assert len(pkg) > 0 assert len(pkg) > 0

@ -1,52 +1,52 @@
from unittest.mock import MagicMock # from unittest.mock import MagicMock
from core.app.app_config.entities import ModelConfigEntity # from core.app.app_config.entities import ModelConfigEntity
from core.entities.provider_configuration import ProviderConfiguration, ProviderModelBundle # from core.entities.provider_configuration import ProviderConfiguration, ProviderModelBundle
from core.model_runtime.entities.message_entities import UserPromptMessage # from core.model_runtime.entities.message_entities import UserPromptMessage
from core.model_runtime.entities.model_entities import AIModelEntity, ModelPropertyKey, ParameterRule # from core.model_runtime.entities.model_entities import AIModelEntity, ModelPropertyKey, ParameterRule
from core.model_runtime.entities.provider_entities import ProviderEntity # from core.model_runtime.entities.provider_entities import ProviderEntity
from core.model_runtime.model_providers.__base.large_language_model import LargeLanguageModel # from core.model_runtime.model_providers.__base.large_language_model import LargeLanguageModel
from core.prompt.prompt_transform import PromptTransform # from core.prompt.prompt_transform import PromptTransform
def test__calculate_rest_token(): # def test__calculate_rest_token():
model_schema_mock = MagicMock(spec=AIModelEntity) # model_schema_mock = MagicMock(spec=AIModelEntity)
parameter_rule_mock = MagicMock(spec=ParameterRule) # parameter_rule_mock = MagicMock(spec=ParameterRule)
parameter_rule_mock.name = "max_tokens" # parameter_rule_mock.name = "max_tokens"
model_schema_mock.parameter_rules = [parameter_rule_mock] # model_schema_mock.parameter_rules = [parameter_rule_mock]
model_schema_mock.model_properties = {ModelPropertyKey.CONTEXT_SIZE: 62} # model_schema_mock.model_properties = {ModelPropertyKey.CONTEXT_SIZE: 62}
large_language_model_mock = MagicMock(spec=LargeLanguageModel) # large_language_model_mock = MagicMock(spec=LargeLanguageModel)
large_language_model_mock.get_num_tokens.return_value = 6 # large_language_model_mock.get_num_tokens.return_value = 6
provider_mock = MagicMock(spec=ProviderEntity) # provider_mock = MagicMock(spec=ProviderEntity)
provider_mock.provider = "openai" # provider_mock.provider = "openai"
provider_configuration_mock = MagicMock(spec=ProviderConfiguration) # provider_configuration_mock = MagicMock(spec=ProviderConfiguration)
provider_configuration_mock.provider = provider_mock # provider_configuration_mock.provider = provider_mock
provider_configuration_mock.model_settings = None # provider_configuration_mock.model_settings = None
provider_model_bundle_mock = MagicMock(spec=ProviderModelBundle) # provider_model_bundle_mock = MagicMock(spec=ProviderModelBundle)
provider_model_bundle_mock.model_type_instance = large_language_model_mock # provider_model_bundle_mock.model_type_instance = large_language_model_mock
provider_model_bundle_mock.configuration = provider_configuration_mock # provider_model_bundle_mock.configuration = provider_configuration_mock
model_config_mock = MagicMock(spec=ModelConfigEntity) # model_config_mock = MagicMock(spec=ModelConfigEntity)
model_config_mock.model = "gpt-4" # model_config_mock.model = "gpt-4"
model_config_mock.credentials = {} # model_config_mock.credentials = {}
model_config_mock.parameters = {"max_tokens": 50} # model_config_mock.parameters = {"max_tokens": 50}
model_config_mock.model_schema = model_schema_mock # model_config_mock.model_schema = model_schema_mock
model_config_mock.provider_model_bundle = provider_model_bundle_mock # model_config_mock.provider_model_bundle = provider_model_bundle_mock
prompt_transform = PromptTransform() # prompt_transform = PromptTransform()
prompt_messages = [UserPromptMessage(content="Hello, how are you?")] # prompt_messages = [UserPromptMessage(content="Hello, how are you?")]
rest_tokens = prompt_transform._calculate_rest_token(prompt_messages, model_config_mock) # rest_tokens = prompt_transform._calculate_rest_token(prompt_messages, model_config_mock)
# Validate based on the mock configuration and expected logic # # Validate based on the mock configuration and expected logic
expected_rest_tokens = ( # expected_rest_tokens = (
model_schema_mock.model_properties[ModelPropertyKey.CONTEXT_SIZE] # model_schema_mock.model_properties[ModelPropertyKey.CONTEXT_SIZE]
- model_config_mock.parameters["max_tokens"] # - model_config_mock.parameters["max_tokens"]
- large_language_model_mock.get_num_tokens.return_value # - large_language_model_mock.get_num_tokens.return_value
) # )
assert rest_tokens == expected_rest_tokens # assert rest_tokens == expected_rest_tokens
assert rest_tokens == 6 # assert rest_tokens == 6

@ -1,186 +1,190 @@
from core.entities.provider_entities import ModelSettings # from core.entities.provider_entities import ModelSettings
from core.model_runtime.entities.model_entities import ModelType # from core.model_runtime.entities.model_entities import ModelType
from core.model_runtime.model_providers.model_provider_factory import ModelProviderFactory # from core.model_runtime.model_providers.model_provider_factory import ModelProviderFactory
from core.provider_manager import ProviderManager # from core.provider_manager import ProviderManager
from models.provider import LoadBalancingModelConfig, ProviderModelSetting # from models.provider import LoadBalancingModelConfig, ProviderModelSetting
def test__to_model_settings(mocker): # def test__to_model_settings(mocker):
# Get all provider entities # # Get all provider entities
model_provider_factory = ModelProviderFactory("test_tenant") # model_provider_factory = ModelProviderFactory("test_tenant")
provider_entities = model_provider_factory.get_providers() # provider_entities = model_provider_factory.get_providers()
provider_entity = None # provider_entity = None
for provider in provider_entities: # for provider in provider_entities:
if provider.provider == "openai": # if provider.provider == "openai":
provider_entity = provider # provider_entity = provider
# Mocking the inputs # # Mocking the inputs
provider_model_settings = [ # provider_model_settings = [
ProviderModelSetting( # ProviderModelSetting(
id="id", # id="id",
tenant_id="tenant_id", # tenant_id="tenant_id",
provider_name="openai", # provider_name="openai",
model_name="gpt-4", # model_name="gpt-4",
model_type="text-generation", # model_type="text-generation",
enabled=True, # enabled=True,
load_balancing_enabled=True, # load_balancing_enabled=True,
) # )
] # ]
load_balancing_model_configs = [ # load_balancing_model_configs = [
LoadBalancingModelConfig( # LoadBalancingModelConfig(
id="id1", # id="id1",
tenant_id="tenant_id", # tenant_id="tenant_id",
provider_name="openai", # provider_name="openai",
model_name="gpt-4", # model_name="gpt-4",
model_type="text-generation", # model_type="text-generation",
name="__inherit__", # name="__inherit__",
encrypted_config=None, # encrypted_config=None,
enabled=True, # enabled=True,
), # ),
LoadBalancingModelConfig( # LoadBalancingModelConfig(
id="id2", # id="id2",
tenant_id="tenant_id", # tenant_id="tenant_id",
provider_name="openai", # provider_name="openai",
model_name="gpt-4", # model_name="gpt-4",
model_type="text-generation", # model_type="text-generation",
name="first", # name="first",
encrypted_config='{"openai_api_key": "fake_key"}', # encrypted_config='{"openai_api_key": "fake_key"}',
enabled=True, # enabled=True,
), # ),
] # ]
mocker.patch( # mocker.patch(
"core.helper.model_provider_cache.ProviderCredentialsCache.get", return_value={"openai_api_key": "fake_key"} # "core.helper.model_provider_cache.ProviderCredentialsCache.get", return_value={"openai_api_key": "fake_key"}
) # )
provider_manager = ProviderManager() # provider_manager = ProviderManager()
# Running the method # # Running the method
result = provider_manager._to_model_settings(provider_entity, provider_model_settings, load_balancing_model_configs) # result = provider_manager._to_model_settings(provider_entity,
# provider_model_settings, load_balancing_model_configs)
# Asserting that the result is as expected
assert len(result) == 1 # # Asserting that the result is as expected
assert isinstance(result[0], ModelSettings) # assert len(result) == 1
assert result[0].model == "gpt-4" # assert isinstance(result[0], ModelSettings)
assert result[0].model_type == ModelType.LLM # assert result[0].model == "gpt-4"
assert result[0].enabled is True # assert result[0].model_type == ModelType.LLM
assert len(result[0].load_balancing_configs) == 2 # assert result[0].enabled is True
assert result[0].load_balancing_configs[0].name == "__inherit__" # assert len(result[0].load_balancing_configs) == 2
assert result[0].load_balancing_configs[1].name == "first" # assert result[0].load_balancing_configs[0].name == "__inherit__"
# assert result[0].load_balancing_configs[1].name == "first"
def test__to_model_settings_only_one_lb(mocker):
# Get all provider entities # def test__to_model_settings_only_one_lb(mocker):
model_provider_factory = ModelProviderFactory("test_tenant") # # Get all provider entities
provider_entities = model_provider_factory.get_providers() # model_provider_factory = ModelProviderFactory("test_tenant")
# provider_entities = model_provider_factory.get_providers()
provider_entity = None
for provider in provider_entities: # provider_entity = None
if provider.provider == "openai": # for provider in provider_entities:
provider_entity = provider # if provider.provider == "openai":
# provider_entity = provider
# Mocking the inputs
provider_model_settings = [ # # Mocking the inputs
ProviderModelSetting( # provider_model_settings = [
id="id", # ProviderModelSetting(
tenant_id="tenant_id", # id="id",
provider_name="openai", # tenant_id="tenant_id",
model_name="gpt-4", # provider_name="openai",
model_type="text-generation", # model_name="gpt-4",
enabled=True, # model_type="text-generation",
load_balancing_enabled=True, # enabled=True,
) # load_balancing_enabled=True,
] # )
load_balancing_model_configs = [ # ]
LoadBalancingModelConfig( # load_balancing_model_configs = [
id="id1", # LoadBalancingModelConfig(
tenant_id="tenant_id", # id="id1",
provider_name="openai", # tenant_id="tenant_id",
model_name="gpt-4", # provider_name="openai",
model_type="text-generation", # model_name="gpt-4",
name="__inherit__", # model_type="text-generation",
encrypted_config=None, # name="__inherit__",
enabled=True, # encrypted_config=None,
) # enabled=True,
] # )
# ]
mocker.patch(
"core.helper.model_provider_cache.ProviderCredentialsCache.get", return_value={"openai_api_key": "fake_key"} # mocker.patch(
) # "core.helper.model_provider_cache.ProviderCredentialsCache.get", return_value={"openai_api_key": "fake_key"}
# )
provider_manager = ProviderManager()
# provider_manager = ProviderManager()
# Running the method
result = provider_manager._to_model_settings(provider_entity, provider_model_settings, load_balancing_model_configs) # # Running the method
# result = provider_manager._to_model_settings(
# Asserting that the result is as expected # provider_entity, provider_model_settings, load_balancing_model_configs)
assert len(result) == 1
assert isinstance(result[0], ModelSettings) # # Asserting that the result is as expected
assert result[0].model == "gpt-4" # assert len(result) == 1
assert result[0].model_type == ModelType.LLM # assert isinstance(result[0], ModelSettings)
assert result[0].enabled is True # assert result[0].model == "gpt-4"
assert len(result[0].load_balancing_configs) == 0 # assert result[0].model_type == ModelType.LLM
# assert result[0].enabled is True
# assert len(result[0].load_balancing_configs) == 0
def test__to_model_settings_lb_disabled(mocker):
# Get all provider entities
model_provider_factory = ModelProviderFactory("test_tenant") # def test__to_model_settings_lb_disabled(mocker):
provider_entities = model_provider_factory.get_providers() # # Get all provider entities
# model_provider_factory = ModelProviderFactory("test_tenant")
provider_entity = None # provider_entities = model_provider_factory.get_providers()
for provider in provider_entities:
if provider.provider == "openai": # provider_entity = None
provider_entity = provider # for provider in provider_entities:
# if provider.provider == "openai":
# Mocking the inputs # provider_entity = provider
provider_model_settings = [
ProviderModelSetting( # # Mocking the inputs
id="id", # provider_model_settings = [
tenant_id="tenant_id", # ProviderModelSetting(
provider_name="openai", # id="id",
model_name="gpt-4", # tenant_id="tenant_id",
model_type="text-generation", # provider_name="openai",
enabled=True, # model_name="gpt-4",
load_balancing_enabled=False, # model_type="text-generation",
) # enabled=True,
] # load_balancing_enabled=False,
load_balancing_model_configs = [ # )
LoadBalancingModelConfig( # ]
id="id1", # load_balancing_model_configs = [
tenant_id="tenant_id", # LoadBalancingModelConfig(
provider_name="openai", # id="id1",
model_name="gpt-4", # tenant_id="tenant_id",
model_type="text-generation", # provider_name="openai",
name="__inherit__", # model_name="gpt-4",
encrypted_config=None, # model_type="text-generation",
enabled=True, # name="__inherit__",
), # encrypted_config=None,
LoadBalancingModelConfig( # enabled=True,
id="id2", # ),
tenant_id="tenant_id", # LoadBalancingModelConfig(
provider_name="openai", # id="id2",
model_name="gpt-4", # tenant_id="tenant_id",
model_type="text-generation", # provider_name="openai",
name="first", # model_name="gpt-4",
encrypted_config='{"openai_api_key": "fake_key"}', # model_type="text-generation",
enabled=True, # name="first",
), # encrypted_config='{"openai_api_key": "fake_key"}',
] # enabled=True,
# ),
mocker.patch( # ]
"core.helper.model_provider_cache.ProviderCredentialsCache.get", return_value={"openai_api_key": "fake_key"}
) # mocker.patch(
# "core.helper.model_provider_cache.ProviderCredentialsCache.get",
provider_manager = ProviderManager() # return_value={"openai_api_key": "fake_key"}
# )
# Running the method
result = provider_manager._to_model_settings(provider_entity, provider_model_settings, load_balancing_model_configs) # provider_manager = ProviderManager()
# Asserting that the result is as expected # # Running the method
assert len(result) == 1 # result = provider_manager._to_model_settings(provider_entity,
assert isinstance(result[0], ModelSettings) # provider_model_settings, load_balancing_model_configs)
assert result[0].model == "gpt-4"
assert result[0].model_type == ModelType.LLM # # Asserting that the result is as expected
assert result[0].enabled is True # assert len(result) == 1
assert len(result[0].load_balancing_configs) == 0 # assert isinstance(result[0], ModelSettings)
# assert result[0].model == "gpt-4"
# assert result[0].model_type == ModelType.LLM
# assert result[0].enabled is True
# assert len(result[0].load_balancing_configs) == 0

Loading…
Cancel
Save