vectorvein 0.2.69__tar.gz → 0.2.71__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.69 → vectorvein-0.2.71}/PKG-INFO +1 -1
- {vectorvein-0.2.69 → vectorvein-0.2.71}/pyproject.toml +1 -1
- vectorvein-0.2.71/src/vectorvein/workflow/utils/analyse.py +115 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/utils/json_to_code.py +8 -2
- {vectorvein-0.2.69 → vectorvein-0.2.71}/README.md +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/__init__.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/api/__init__.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/api/client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/api/exceptions.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/api/models.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/__init__.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/anthropic_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/baichuan_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/base_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/deepseek_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/ernie_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/gemini_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/groq_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/local_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/minimax_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/mistral_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/moonshot_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/openai_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/openai_compatible_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/py.typed +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/qwen_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/stepfun_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/utils.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/xai_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/yi_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/chat_clients/zhipuai_client.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/py.typed +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/server/token_server.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/settings/__init__.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/settings/py.typed +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/types/__init__.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/types/defaults.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/types/enums.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/types/exception.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/types/llm_parameters.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/types/py.typed +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/types/settings.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/utilities/media_processing.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/utilities/rate_limiter.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/utilities/retry.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/graph/edge.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/graph/node.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/graph/port.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/graph/workflow.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/__init__.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/audio_generation.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/control_flows.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/file_processing.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/image_generation.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/llms.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/media_editing.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/media_processing.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/output.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/relational_db.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/text_processing.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/tools.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/triggers.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/vector_db.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/video_generation.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/nodes/web_crawlers.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/utils/check.py +0 -0
- {vectorvein-0.2.69 → vectorvein-0.2.71}/src/vectorvein/workflow/utils/layout.py +0 -0
@@ -0,0 +1,115 @@
|
|
1
|
+
import json
|
2
|
+
from typing import TypedDict, Any
|
3
|
+
|
4
|
+
|
5
|
+
class PortRecord(TypedDict):
|
6
|
+
"""
|
7
|
+
端口记录
|
8
|
+
"""
|
9
|
+
|
10
|
+
name: str
|
11
|
+
type: str
|
12
|
+
show: bool
|
13
|
+
value: Any
|
14
|
+
connected: bool
|
15
|
+
|
16
|
+
|
17
|
+
class NodeRecord(TypedDict):
|
18
|
+
"""
|
19
|
+
节点记录
|
20
|
+
"""
|
21
|
+
|
22
|
+
id: str
|
23
|
+
name: str
|
24
|
+
type: str
|
25
|
+
category: str
|
26
|
+
ports: list[PortRecord]
|
27
|
+
|
28
|
+
|
29
|
+
class AnalyseResult(TypedDict):
|
30
|
+
"""
|
31
|
+
分析结果
|
32
|
+
"""
|
33
|
+
|
34
|
+
nodes: list[NodeRecord]
|
35
|
+
|
36
|
+
|
37
|
+
def analyse_workflow_record(
|
38
|
+
json_str: str, connected_only: bool = False, reserver_programming_function_ports: bool = False
|
39
|
+
) -> AnalyseResult:
|
40
|
+
"""
|
41
|
+
分析工作流JSON字符串,提取节点和端口信息
|
42
|
+
|
43
|
+
Args:
|
44
|
+
json_str: 工作流JSON字符串
|
45
|
+
|
46
|
+
Returns:
|
47
|
+
分析结果
|
48
|
+
"""
|
49
|
+
# 解析JSON
|
50
|
+
workflow_data = json.loads(json_str)
|
51
|
+
|
52
|
+
# 收集所有连接的端口
|
53
|
+
connected_ports = set()
|
54
|
+
for edge in workflow_data["edges"]:
|
55
|
+
source_id = edge["source"]
|
56
|
+
target_id = edge["target"]
|
57
|
+
source_handle = edge["sourceHandle"]
|
58
|
+
target_handle = edge["targetHandle"]
|
59
|
+
connected_ports.add((source_id, source_handle))
|
60
|
+
connected_ports.add((target_id, target_handle))
|
61
|
+
|
62
|
+
# 分析节点
|
63
|
+
nodes_records = []
|
64
|
+
|
65
|
+
for node in workflow_data["nodes"]:
|
66
|
+
node_id = node["id"]
|
67
|
+
node_type = node["type"]
|
68
|
+
category = node["category"]
|
69
|
+
|
70
|
+
# 跳过辅助节点
|
71
|
+
if category == "assistedNodes":
|
72
|
+
continue
|
73
|
+
|
74
|
+
# 获取任务名称
|
75
|
+
task_name = node["data"]["task_name"].split(".")[-1] if "task_name" in node["data"] else ""
|
76
|
+
|
77
|
+
# 收集端口信息
|
78
|
+
ports_records = []
|
79
|
+
|
80
|
+
if "template" in node["data"]:
|
81
|
+
for port_name, port in node["data"]["template"].items():
|
82
|
+
if "name" not in port:
|
83
|
+
continue
|
84
|
+
|
85
|
+
port_is_connected = (node_id, port["name"]) in connected_ports
|
86
|
+
|
87
|
+
if node_type != "ProgrammingFunction" or not reserver_programming_function_ports:
|
88
|
+
if connected_only and not port_is_connected:
|
89
|
+
continue
|
90
|
+
|
91
|
+
port_record: PortRecord = {
|
92
|
+
"name": port["name"],
|
93
|
+
"type": port.get("field_type", port.get("type", "")),
|
94
|
+
"show": port.get("show", False),
|
95
|
+
"value": port.get("value", None),
|
96
|
+
"connected": port_is_connected,
|
97
|
+
}
|
98
|
+
|
99
|
+
ports_records.append(port_record)
|
100
|
+
|
101
|
+
# 创建节点记录
|
102
|
+
node_record: NodeRecord = {
|
103
|
+
"id": node_id,
|
104
|
+
"name": task_name,
|
105
|
+
"type": node_type,
|
106
|
+
"category": category,
|
107
|
+
"ports": ports_records,
|
108
|
+
}
|
109
|
+
|
110
|
+
nodes_records.append(node_record)
|
111
|
+
|
112
|
+
# 返回分析结果
|
113
|
+
result: AnalyseResult = {"nodes": nodes_records}
|
114
|
+
|
115
|
+
return result
|
@@ -135,12 +135,18 @@ def generate_python_code(
|
|
135
135
|
port_value = port["value"]
|
136
136
|
default_value = node_instance.ports[port_name].value if port_name in node_instance.ports else None
|
137
137
|
|
138
|
-
#
|
138
|
+
# 判断端口是否有值且值与默认不同,并且端口满足以下条件之一:
|
139
|
+
# 有连接、是输入端口、在UI上显示、是编程节点
|
139
140
|
port_is_connected = (node["id"], port["name"]) in connected_ports
|
140
141
|
if (
|
141
142
|
port_value
|
142
143
|
and port_value != default_value
|
143
|
-
and (
|
144
|
+
and (
|
145
|
+
port_is_connected
|
146
|
+
or not port.get("is_output", False)
|
147
|
+
or port.get("show", False)
|
148
|
+
or node_type == "ProgrammingFunction"
|
149
|
+
)
|
144
150
|
):
|
145
151
|
values.append(port)
|
146
152
|
|
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.69 → vectorvein-0.2.71}/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
|
File without changes
|
File without changes
|
File without changes
|