feat/enhance the multi-modal support (#8818)

This commit is contained in:
-LAN-
2024-10-21 10:43:49 +08:00
committed by GitHub
parent 7a1d6fe509
commit e61752bd3a
267 changed files with 6263 additions and 3523 deletions

View File

@@ -2,7 +2,7 @@ from uuid import uuid4
import pytest
from core.app.segments import (
from core.variables import (
ArrayNumberVariable,
ArrayObjectVariable,
ArrayStringVariable,
@@ -11,43 +11,43 @@ from core.app.segments import (
ObjectSegment,
SecretVariable,
StringVariable,
factory,
)
from core.app.segments.exc import VariableError
from core.variables.exc import VariableError
from factories import variable_factory
def test_string_variable():
test_data = {"value_type": "string", "name": "test_text", "value": "Hello, World!"}
result = factory.build_variable_from_mapping(test_data)
result = variable_factory.build_variable_from_mapping(test_data)
assert isinstance(result, StringVariable)
def test_integer_variable():
test_data = {"value_type": "number", "name": "test_int", "value": 42}
result = factory.build_variable_from_mapping(test_data)
result = variable_factory.build_variable_from_mapping(test_data)
assert isinstance(result, IntegerVariable)
def test_float_variable():
test_data = {"value_type": "number", "name": "test_float", "value": 3.14}
result = factory.build_variable_from_mapping(test_data)
result = variable_factory.build_variable_from_mapping(test_data)
assert isinstance(result, FloatVariable)
def test_secret_variable():
test_data = {"value_type": "secret", "name": "test_secret", "value": "secret_value"}
result = factory.build_variable_from_mapping(test_data)
result = variable_factory.build_variable_from_mapping(test_data)
assert isinstance(result, SecretVariable)
def test_invalid_value_type():
test_data = {"value_type": "unknown", "name": "test_invalid", "value": "value"}
with pytest.raises(VariableError):
factory.build_variable_from_mapping(test_data)
variable_factory.build_variable_from_mapping(test_data)
def test_build_a_blank_string():
result = factory.build_variable_from_mapping(
result = variable_factory.build_variable_from_mapping(
{
"value_type": "string",
"name": "blank",
@@ -59,7 +59,7 @@ def test_build_a_blank_string():
def test_build_a_object_variable_with_none_value():
var = factory.build_segment(
var = variable_factory.build_segment(
{
"key1": None,
}
@@ -79,7 +79,7 @@ def test_object_variable():
"key2": 2,
},
}
variable = factory.build_variable_from_mapping(mapping)
variable = variable_factory.build_variable_from_mapping(mapping)
assert isinstance(variable, ObjectSegment)
assert isinstance(variable.value["key1"], str)
assert isinstance(variable.value["key2"], int)
@@ -96,7 +96,7 @@ def test_array_string_variable():
"text",
],
}
variable = factory.build_variable_from_mapping(mapping)
variable = variable_factory.build_variable_from_mapping(mapping)
assert isinstance(variable, ArrayStringVariable)
assert isinstance(variable.value[0], str)
assert isinstance(variable.value[1], str)
@@ -113,7 +113,7 @@ def test_array_number_variable():
2.0,
],
}
variable = factory.build_variable_from_mapping(mapping)
variable = variable_factory.build_variable_from_mapping(mapping)
assert isinstance(variable, ArrayNumberVariable)
assert isinstance(variable.value[0], int)
assert isinstance(variable.value[1], float)
@@ -136,7 +136,7 @@ def test_array_object_variable():
},
],
}
variable = factory.build_variable_from_mapping(mapping)
variable = variable_factory.build_variable_from_mapping(mapping)
assert isinstance(variable, ArrayObjectVariable)
assert isinstance(variable.value[0], dict)
assert isinstance(variable.value[1], dict)
@@ -146,13 +146,13 @@ def test_array_object_variable():
assert isinstance(variable.value[1]["key2"], int)
def test_variable_cannot_large_than_5_kb():
def test_variable_cannot_large_than_200_kb():
with pytest.raises(VariableError):
factory.build_variable_from_mapping(
variable_factory.build_variable_from_mapping(
{
"id": str(uuid4()),
"value_type": "string",
"name": "test_text",
"value": "a" * 1024 * 6,
"value": "a" * 1024 * 201,
}
)

View File

@@ -1,5 +1,5 @@
from core.app.segments import SecretVariable, StringSegment, parser
from core.helper import encrypter
from core.variables import SecretVariable, StringSegment
from core.workflow.entities.variable_pool import VariablePool
from core.workflow.enums import SystemVariableKey
@@ -13,12 +13,13 @@ def test_segment_group_to_text():
environment_variables=[
SecretVariable(name="secret_key", value="fake-secret-key"),
],
conversation_variables=[],
)
variable_pool.add(("node_id", "custom_query"), "fake-user-query")
template = (
"Hello, {{#sys.user_id#}}! Your query is {{#node_id.custom_query#}}. And your key is {{#env.secret_key#}}."
)
segments_group = parser.convert_template(template=template, variable_pool=variable_pool)
segments_group = variable_pool.convert_template(template)
assert segments_group.text == "Hello, fake-user-id! Your query is fake-user-query. And your key is fake-secret-key."
assert segments_group.log == (
@@ -32,9 +33,10 @@ def test_convert_constant_to_segment_group():
system_variables={},
user_inputs={},
environment_variables=[],
conversation_variables=[],
)
template = "Hello, world!"
segments_group = parser.convert_template(template=template, variable_pool=variable_pool)
segments_group = variable_pool.convert_template(template)
assert segments_group.text == "Hello, world!"
assert segments_group.log == "Hello, world!"
@@ -46,9 +48,10 @@ def test_convert_variable_to_segment_group():
},
user_inputs={},
environment_variables=[],
conversation_variables=[],
)
template = "{{#sys.user_id#}}"
segments_group = parser.convert_template(template=template, variable_pool=variable_pool)
segments_group = variable_pool.convert_template(template)
assert segments_group.text == "fake-user-id"
assert segments_group.log == "fake-user-id"
assert segments_group.value == [StringSegment(value="fake-user-id")]

View File

@@ -1,7 +1,7 @@
import pytest
from pydantic import ValidationError
from core.app.segments import (
from core.variables import (
FloatVariable,
IntegerVariable,
ObjectVariable,