vectorvein 0.2.35__tar.gz → 0.2.36__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vectorvein-0.2.35 → vectorvein-0.2.36}/PKG-INFO +1 -1
- {vectorvein-0.2.35 → vectorvein-0.2.36}/pyproject.toml +1 -1
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/graph/node.py +10 -2
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/graph/workflow.py +5 -5
- {vectorvein-0.2.35 → vectorvein-0.2.36}/README.md +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/__init__.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/api/__init__.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/api/client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/api/exceptions.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/api/models.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/__init__.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/anthropic_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/baichuan_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/base_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/deepseek_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/ernie_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/gemini_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/groq_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/local_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/minimax_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/mistral_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/moonshot_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/openai_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/openai_compatible_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/py.typed +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/qwen_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/stepfun_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/utils.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/xai_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/yi_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/zhipuai_client.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/py.typed +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/server/token_server.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/settings/__init__.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/settings/py.typed +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/types/__init__.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/types/defaults.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/types/enums.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/types/exception.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/types/llm_parameters.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/types/py.typed +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/types/settings.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/utilities/media_processing.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/utilities/rate_limiter.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/utilities/retry.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/graph/edge.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/graph/port.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/__init__.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/audio_generation.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/control_flows.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/file_processing.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/image_generation.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/llms.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/media_editing.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/media_processing.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/output.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/relational_db.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/text_processing.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/tools.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/triggers.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/vector_db.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/video_generation.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/nodes/web_crawlers.py +0 -0
- {vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/workflow/utils/json_to_code.py +0 -0
@@ -10,10 +10,11 @@ class PortsDict(Dict[str, Port]):
|
|
10
10
|
def __init__(self, owner_node: "Node", *args, **kwargs):
|
11
11
|
super().__init__(*args, **kwargs)
|
12
12
|
self._owner_node = owner_node
|
13
|
+
self._initializing = True # 初始化标志
|
13
14
|
|
14
15
|
def __setitem__(self, key: str, value: Port) -> None:
|
15
|
-
#
|
16
|
-
if key in self:
|
16
|
+
# 初始化阶段或端口已存在时,允许直接添加/更新
|
17
|
+
if self._initializing or key in self:
|
17
18
|
super().__setitem__(key, value)
|
18
19
|
return
|
19
20
|
|
@@ -29,6 +30,10 @@ class PortsDict(Dict[str, Port]):
|
|
29
30
|
|
30
31
|
super().__setitem__(key, value)
|
31
32
|
|
33
|
+
def finish_initialization(self):
|
34
|
+
"""结束初始化阶段"""
|
35
|
+
self._initializing = False
|
36
|
+
|
32
37
|
|
33
38
|
class Node:
|
34
39
|
def __init__(
|
@@ -59,6 +64,9 @@ class Node:
|
|
59
64
|
if ports:
|
60
65
|
for name, port in ports.items():
|
61
66
|
self.ports[name] = port
|
67
|
+
# 结束初始化阶段
|
68
|
+
self.ports.finish_initialization()
|
69
|
+
|
62
70
|
self.position: Dict[str, float] = position or {"x": 0, "y": 0}
|
63
71
|
self.seleted_workflow_title: str = seleted_workflow_title
|
64
72
|
self.is_template: bool = is_template
|
@@ -48,28 +48,28 @@ class Workflow:
|
|
48
48
|
# 检查源节点是否存在
|
49
49
|
source_node_exists = any(node.id == source_node_id for node in self.nodes)
|
50
50
|
if not source_node_exists:
|
51
|
-
raise ValueError(f"
|
51
|
+
raise ValueError(f"Source node not found: {source_node_id}")
|
52
52
|
|
53
53
|
# 检查目标节点是否存在
|
54
54
|
target_node_exists = any(node.id == target_node_id for node in self.nodes)
|
55
55
|
if not target_node_exists:
|
56
|
-
raise ValueError(f"
|
56
|
+
raise ValueError(f"Target node not found: {target_node_id}")
|
57
57
|
|
58
58
|
# 检查源节点的端口是否存在
|
59
59
|
source_node_obj = next(node for node in self.nodes if node.id == source_node_id)
|
60
60
|
if not source_node_obj.has_output_port(source_port):
|
61
|
-
raise ValueError(f"
|
61
|
+
raise ValueError(f"Source node {source_node_id} has no output port: {source_port}")
|
62
62
|
|
63
63
|
# 检查目标节点的端口是否存在
|
64
64
|
target_node_obj = next(node for node in self.nodes if node.id == target_node_id)
|
65
65
|
if not target_node_obj.has_input_port(target_port):
|
66
|
-
raise ValueError(f"
|
66
|
+
raise ValueError(f"Target node {target_node_id} has no input port: {target_port}")
|
67
67
|
|
68
68
|
# 检查目标端口是否已有被连接的线
|
69
69
|
for edge in self.edges:
|
70
70
|
if edge.target == target_node_id and edge.target_handle == target_port:
|
71
71
|
raise ValueError(
|
72
|
-
f"
|
72
|
+
f"The input port {target_port} of the target node {target_node_id} is already connected: {edge.source}({edge.source_handle}) → {edge.target}({edge.target_handle})"
|
73
73
|
)
|
74
74
|
|
75
75
|
# 创建并添加边
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{vectorvein-0.2.35 → vectorvein-0.2.36}/src/vectorvein/chat_clients/openai_compatible_client.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|