mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-06-04 11:14:10 +08:00
fix(segments): Support NoneType. (#6581)
This commit is contained in:
parent
75445a0c66
commit
2bc0632d0d
@ -1,11 +1,12 @@
|
|||||||
from .segment_group import SegmentGroup
|
from .segment_group import SegmentGroup
|
||||||
from .segments import Segment
|
from .segments import NoneSegment, Segment
|
||||||
from .types import SegmentType
|
from .types import SegmentType
|
||||||
from .variables import (
|
from .variables import (
|
||||||
ArrayVariable,
|
ArrayVariable,
|
||||||
FileVariable,
|
FileVariable,
|
||||||
FloatVariable,
|
FloatVariable,
|
||||||
IntegerVariable,
|
IntegerVariable,
|
||||||
|
NoneVariable,
|
||||||
ObjectVariable,
|
ObjectVariable,
|
||||||
SecretVariable,
|
SecretVariable,
|
||||||
StringVariable,
|
StringVariable,
|
||||||
@ -23,5 +24,7 @@ __all__ = [
|
|||||||
'Variable',
|
'Variable',
|
||||||
'SegmentType',
|
'SegmentType',
|
||||||
'SegmentGroup',
|
'SegmentGroup',
|
||||||
'Segment'
|
'Segment',
|
||||||
|
'NoneSegment',
|
||||||
|
'NoneVariable',
|
||||||
]
|
]
|
||||||
|
@ -10,6 +10,7 @@ from .variables import (
|
|||||||
FileVariable,
|
FileVariable,
|
||||||
FloatVariable,
|
FloatVariable,
|
||||||
IntegerVariable,
|
IntegerVariable,
|
||||||
|
NoneVariable,
|
||||||
ObjectVariable,
|
ObjectVariable,
|
||||||
SecretVariable,
|
SecretVariable,
|
||||||
StringVariable,
|
StringVariable,
|
||||||
@ -39,6 +40,8 @@ def build_variable_from_mapping(m: Mapping[str, Any], /) -> Variable:
|
|||||||
|
|
||||||
|
|
||||||
def build_anonymous_variable(value: Any, /) -> Variable:
|
def build_anonymous_variable(value: Any, /) -> Variable:
|
||||||
|
if value is None:
|
||||||
|
return NoneVariable(name='anonymous')
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
return StringVariable(name='anonymous', value=value)
|
return StringVariable(name='anonymous', value=value)
|
||||||
if isinstance(value, int):
|
if isinstance(value, int):
|
||||||
|
@ -43,6 +43,23 @@ class Segment(BaseModel):
|
|||||||
return self.value
|
return self.value
|
||||||
|
|
||||||
|
|
||||||
|
class NoneSegment(Segment):
|
||||||
|
value_type: SegmentType = SegmentType.NONE
|
||||||
|
value: None = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def text(self) -> str:
|
||||||
|
return 'null'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def log(self) -> str:
|
||||||
|
return 'null'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def markdown(self) -> str:
|
||||||
|
return 'null'
|
||||||
|
|
||||||
|
|
||||||
class StringSegment(Segment):
|
class StringSegment(Segment):
|
||||||
value_type: SegmentType = SegmentType.STRING
|
value_type: SegmentType = SegmentType.STRING
|
||||||
value: str
|
value: str
|
||||||
|
@ -14,4 +14,5 @@ class SegmentType(str, Enum):
|
|||||||
ARRAY_STRING = 'array[string]'
|
ARRAY_STRING = 'array[string]'
|
||||||
ARRAY_NUMBER = 'array[number]'
|
ARRAY_NUMBER = 'array[number]'
|
||||||
ARRAY_OBJECT = 'array[object]'
|
ARRAY_OBJECT = 'array[object]'
|
||||||
ARRAY_FILE = 'array[file]'
|
ARRAY_FILE = 'array[file]'
|
||||||
|
NONE = 'none'
|
@ -81,3 +81,8 @@ class SecretVariable(StringVariable):
|
|||||||
@property
|
@property
|
||||||
def log(self) -> str:
|
def log(self) -> str:
|
||||||
return encrypter.obfuscated_token(self.value)
|
return encrypter.obfuscated_token(self.value)
|
||||||
|
|
||||||
|
|
||||||
|
class NoneVariable(Variable):
|
||||||
|
value_type: SegmentType = SegmentType.NONE
|
||||||
|
value: None = None
|
@ -2,14 +2,16 @@ import pytest
|
|||||||
from pydantic import ValidationError
|
from pydantic import ValidationError
|
||||||
|
|
||||||
from core.app.segments import (
|
from core.app.segments import (
|
||||||
|
ArrayVariable,
|
||||||
FloatVariable,
|
FloatVariable,
|
||||||
IntegerVariable,
|
IntegerVariable,
|
||||||
|
NoneVariable,
|
||||||
|
ObjectVariable,
|
||||||
SecretVariable,
|
SecretVariable,
|
||||||
SegmentType,
|
SegmentType,
|
||||||
StringVariable,
|
StringVariable,
|
||||||
factory,
|
factory,
|
||||||
)
|
)
|
||||||
from core.app.segments.variables import ArrayVariable, ObjectVariable
|
|
||||||
|
|
||||||
|
|
||||||
def test_string_variable():
|
def test_string_variable():
|
||||||
@ -134,3 +136,13 @@ def test_variable_to_object():
|
|||||||
assert var.to_object() == 3.14
|
assert var.to_object() == 3.14
|
||||||
var = SecretVariable(name='secret', value='secret_value')
|
var = SecretVariable(name='secret', value='secret_value')
|
||||||
assert var.to_object() == 'secret_value'
|
assert var.to_object() == 'secret_value'
|
||||||
|
|
||||||
|
|
||||||
|
def test_build_a_object_variable_with_none_value():
|
||||||
|
var = factory.build_anonymous_variable(
|
||||||
|
{
|
||||||
|
'key1': None,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
assert isinstance(var, ObjectVariable)
|
||||||
|
assert isinstance(var.value['key1'], NoneVariable)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user