vectorvein 0.2.2__tar.gz → 0.2.3__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.
Files changed (61) hide show
  1. {vectorvein-0.2.2 → vectorvein-0.2.3}/PKG-INFO +1 -1
  2. {vectorvein-0.2.2 → vectorvein-0.2.3}/pyproject.toml +1 -1
  3. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/api/client.py +68 -22
  4. {vectorvein-0.2.2 → vectorvein-0.2.3}/README.md +0 -0
  5. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/__init__.py +0 -0
  6. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/api/__init__.py +0 -0
  7. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/api/exceptions.py +0 -0
  8. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/api/models.py +0 -0
  9. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/__init__.py +0 -0
  10. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/anthropic_client.py +0 -0
  11. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/baichuan_client.py +0 -0
  12. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/base_client.py +0 -0
  13. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/deepseek_client.py +0 -0
  14. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/gemini_client.py +0 -0
  15. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/groq_client.py +0 -0
  16. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/local_client.py +0 -0
  17. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/minimax_client.py +0 -0
  18. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/mistral_client.py +0 -0
  19. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/moonshot_client.py +0 -0
  20. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/openai_client.py +0 -0
  21. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/openai_compatible_client.py +0 -0
  22. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/py.typed +0 -0
  23. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/qwen_client.py +0 -0
  24. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/stepfun_client.py +0 -0
  25. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/utils.py +0 -0
  26. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/xai_client.py +0 -0
  27. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/yi_client.py +0 -0
  28. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/chat_clients/zhipuai_client.py +0 -0
  29. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/py.typed +0 -0
  30. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/server/token_server.py +0 -0
  31. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/settings/__init__.py +0 -0
  32. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/settings/py.typed +0 -0
  33. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/types/defaults.py +0 -0
  34. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/types/enums.py +0 -0
  35. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/types/exception.py +0 -0
  36. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/types/llm_parameters.py +0 -0
  37. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/types/py.typed +0 -0
  38. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/utilities/media_processing.py +0 -0
  39. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/utilities/rate_limiter.py +0 -0
  40. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/utilities/retry.py +0 -0
  41. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/graph/edge.py +0 -0
  42. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/graph/node.py +0 -0
  43. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/graph/port.py +0 -0
  44. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/graph/workflow.py +0 -0
  45. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/__init__.py +0 -0
  46. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/audio_generation.py +0 -0
  47. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/control_flows.py +0 -0
  48. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/file_processing.py +0 -0
  49. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/image_generation.py +0 -0
  50. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/llms.py +0 -0
  51. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/media_editing.py +0 -0
  52. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/media_processing.py +0 -0
  53. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/output.py +0 -0
  54. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/relational_db.py +0 -0
  55. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/text_processing.py +0 -0
  56. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/tools.py +0 -0
  57. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/triggers.py +0 -0
  58. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/vector_db.py +0 -0
  59. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/video_generation.py +0 -0
  60. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/nodes/web_crawlers.py +0 -0
  61. {vectorvein-0.2.2 → vectorvein-0.2.3}/src/vectorvein/workflow/utils/json_to_code.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vectorvein
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: VectorVein python SDK
5
5
  Author-Email: Anderson <andersonby@163.com>
6
6
  License: MIT
@@ -18,7 +18,7 @@ description = "VectorVein python SDK"
18
18
  name = "vectorvein"
19
19
  readme = "README.md"
20
20
  requires-python = ">=3.10"
21
- version = "0.2.2"
21
+ version = "0.2.3"
22
22
 
23
23
  [project.license]
24
24
  text = "MIT"
@@ -48,12 +48,11 @@ class VectorVeinClient:
48
48
 
49
49
  self.api_key = api_key
50
50
  self.base_url = base_url or self.BASE_URL
51
- self._client = httpx.Client(
52
- headers={
53
- "VECTORVEIN-API-KEY": api_key,
54
- "VECTORVEIN-API-VERSION": self.API_VERSION,
55
- }
56
- )
51
+ self.default_headers = {
52
+ "VECTORVEIN-API-KEY": api_key,
53
+ "VECTORVEIN-API-VERSION": self.API_VERSION,
54
+ }
55
+ self._client = httpx.Client(timeout=60)
57
56
 
58
57
  def __enter__(self):
59
58
  return self
@@ -67,6 +66,7 @@ class VectorVeinClient:
67
66
  endpoint: str,
68
67
  params: Optional[Dict[str, Any]] = None,
69
68
  json: Optional[Dict[str, Any]] = None,
69
+ api_key_type: Literal["WORKFLOW", "VAPP"] = "WORKFLOW",
70
70
  **kwargs,
71
71
  ) -> Dict[str, Any]:
72
72
  """发送HTTP请求
@@ -87,8 +87,18 @@ class VectorVeinClient:
87
87
  APIKeyError: API密钥无效或已过期
88
88
  """
89
89
  url = f"{self.base_url}/{endpoint}"
90
+ headers = self.default_headers.copy()
91
+ if api_key_type == "VAPP":
92
+ headers["VECTORVEIN-API-KEY-TYPE"] = "VAPP"
90
93
  try:
91
- response = self._client.request(method=method, url=url, params=params, json=json, **kwargs)
94
+ response = self._client.request(
95
+ method=method,
96
+ url=url,
97
+ params=params,
98
+ json=json,
99
+ headers=headers,
100
+ **kwargs,
101
+ )
92
102
  response.raise_for_status()
93
103
  result = response.json()
94
104
 
@@ -107,6 +117,7 @@ class VectorVeinClient:
107
117
  input_fields: List[WorkflowInputField],
108
118
  output_scope: Literal["all", "output_fields_only"] = "output_fields_only",
109
119
  wait_for_completion: Literal[False] = False,
120
+ api_key_type: Literal["WORKFLOW", "VAPP"] = "WORKFLOW",
110
121
  timeout: int = 30,
111
122
  ) -> str: ...
112
123
 
@@ -117,6 +128,7 @@ class VectorVeinClient:
117
128
  input_fields: List[WorkflowInputField],
118
129
  output_scope: Literal["all", "output_fields_only"] = "output_fields_only",
119
130
  wait_for_completion: Literal[True] = True,
131
+ api_key_type: Literal["WORKFLOW", "VAPP"] = "WORKFLOW",
120
132
  timeout: int = 30,
121
133
  ) -> WorkflowRunResult: ...
122
134
 
@@ -126,6 +138,7 @@ class VectorVeinClient:
126
138
  input_fields: List[WorkflowInputField],
127
139
  output_scope: Literal["all", "output_fields_only"] = "output_fields_only",
128
140
  wait_for_completion: bool = False,
141
+ api_key_type: Literal["WORKFLOW", "VAPP"] = "WORKFLOW",
129
142
  timeout: int = 30,
130
143
  ) -> Union[str, WorkflowRunResult]:
131
144
  """运行工作流
@@ -135,6 +148,7 @@ class VectorVeinClient:
135
148
  input_fields: 输入字段列表
136
149
  output_scope: 输出范围,可选值:'all' 或 'output_fields_only'
137
150
  wait_for_completion: 是否等待完成
151
+ api_key_type: 密钥类型,可选值:'WORKFLOW' 或 'VAPP'
138
152
  timeout: 超时时间(秒)
139
153
 
140
154
  Returns:
@@ -154,7 +168,7 @@ class VectorVeinClient:
154
168
  ],
155
169
  }
156
170
 
157
- result = self._request("POST", "workflow/run", json=payload)
171
+ result = self._request("POST", "workflow/run", json=payload, api_key_type=api_key_type)
158
172
 
159
173
  if not wait_for_completion:
160
174
  return result["data"]["rid"]
@@ -166,7 +180,10 @@ class VectorVeinClient:
166
180
  if time.time() - start_time > timeout:
167
181
  raise TimeoutError(f"Workflow execution timed out after {timeout} seconds")
168
182
 
169
- result = self.check_workflow_status(rid)
183
+ if api_key_type == "WORKFLOW":
184
+ result = self.check_workflow_status(rid, api_key_type=api_key_type)
185
+ else:
186
+ result = self.check_workflow_status(rid, wid=wid, api_key_type=api_key_type)
170
187
  if result.status == 200:
171
188
  return result
172
189
  elif result.status == 500:
@@ -174,17 +191,23 @@ class VectorVeinClient:
174
191
 
175
192
  time.sleep(5)
176
193
 
177
- def check_workflow_status(self, rid: str) -> WorkflowRunResult:
194
+ def check_workflow_status(
195
+ self, rid: str, wid: Optional[str] = None, api_key_type: Literal["WORKFLOW", "VAPP"] = "WORKFLOW"
196
+ ) -> WorkflowRunResult:
178
197
  """检查工作流运行状态
179
198
 
180
199
  Args:
181
200
  rid: 工作流运行记录ID
201
+ wid: 工作流ID,非必填
202
+ api_key_type: 密钥类型,可选值:'WORKFLOW' 或 'VAPP'
182
203
 
183
204
  Returns:
184
205
  WorkflowRunResult: 工作流运行结果
185
206
  """
186
207
  payload = {"rid": rid}
187
- response = self._request("POST", "workflow/check-status", json=payload)
208
+ if wid:
209
+ payload["wid"] = wid
210
+ response = self._request("POST", "workflow/check-status", json=payload, api_key_type=api_key_type)
188
211
  if response["status"] in [200, 202]:
189
212
  return WorkflowRunResult(
190
213
  rid=rid,
@@ -452,12 +475,11 @@ class AsyncVectorVeinClient:
452
475
 
453
476
  self.api_key = api_key
454
477
  self.base_url = base_url or self.BASE_URL
455
- self._client = httpx.AsyncClient(
456
- headers={
457
- "VECTORVEIN-API-KEY": api_key,
458
- "VECTORVEIN-API-VERSION": self.API_VERSION,
459
- }
460
- )
478
+ self.default_headers = {
479
+ "VECTORVEIN-API-KEY": api_key,
480
+ "VECTORVEIN-API-VERSION": self.API_VERSION,
481
+ }
482
+ self._client = httpx.AsyncClient(timeout=60)
461
483
 
462
484
  async def __aenter__(self):
463
485
  return self
@@ -471,6 +493,7 @@ class AsyncVectorVeinClient:
471
493
  endpoint: str,
472
494
  params: Optional[Dict[str, Any]] = None,
473
495
  json: Optional[Dict[str, Any]] = None,
496
+ api_key_type: Literal["WORKFLOW", "VAPP"] = "WORKFLOW",
474
497
  **kwargs,
475
498
  ) -> Dict[str, Any]:
476
499
  """发送异步HTTP请求
@@ -491,8 +514,18 @@ class AsyncVectorVeinClient:
491
514
  APIKeyError: API密钥无效或已过期
492
515
  """
493
516
  url = f"{self.base_url}/{endpoint}"
517
+ headers = self.default_headers.copy()
518
+ if api_key_type == "VAPP":
519
+ headers["VECTORVEIN-API-KEY-TYPE"] = "VAPP"
494
520
  try:
495
- response = await self._client.request(method=method, url=url, params=params, json=json, **kwargs)
521
+ response = await self._client.request(
522
+ method=method,
523
+ url=url,
524
+ params=params,
525
+ json=json,
526
+ headers=headers,
527
+ **kwargs,
528
+ )
496
529
  response.raise_for_status()
497
530
  result = response.json()
498
531
 
@@ -511,6 +544,7 @@ class AsyncVectorVeinClient:
511
544
  input_fields: List[WorkflowInputField],
512
545
  output_scope: Literal["all", "output_fields_only"] = "output_fields_only",
513
546
  wait_for_completion: Literal[False] = False,
547
+ api_key_type: Literal["WORKFLOW", "VAPP"] = "WORKFLOW",
514
548
  timeout: int = 30,
515
549
  ) -> str: ...
516
550
 
@@ -521,6 +555,7 @@ class AsyncVectorVeinClient:
521
555
  input_fields: List[WorkflowInputField],
522
556
  output_scope: Literal["all", "output_fields_only"] = "output_fields_only",
523
557
  wait_for_completion: Literal[True] = True,
558
+ api_key_type: Literal["WORKFLOW", "VAPP"] = "WORKFLOW",
524
559
  timeout: int = 30,
525
560
  ) -> WorkflowRunResult: ...
526
561
 
@@ -530,6 +565,7 @@ class AsyncVectorVeinClient:
530
565
  input_fields: List[WorkflowInputField],
531
566
  output_scope: Literal["all", "output_fields_only"] = "output_fields_only",
532
567
  wait_for_completion: bool = False,
568
+ api_key_type: Literal["WORKFLOW", "VAPP"] = "WORKFLOW",
533
569
  timeout: int = 30,
534
570
  ) -> Union[str, WorkflowRunResult]:
535
571
  """异步运行工作流
@@ -539,6 +575,7 @@ class AsyncVectorVeinClient:
539
575
  input_fields: 输入字段列表
540
576
  output_scope: 输出范围,可选值:'all' 或 'output_fields_only'
541
577
  wait_for_completion: 是否等待完成
578
+ api_key_type: 密钥类型,可选值:'WORKFLOW' 或 'VAPP'
542
579
  timeout: 超时时间(秒)
543
580
 
544
581
  Returns:
@@ -558,7 +595,7 @@ class AsyncVectorVeinClient:
558
595
  ],
559
596
  }
560
597
 
561
- result = await self._request("POST", "workflow/run", json=payload)
598
+ result = await self._request("POST", "workflow/run", json=payload, api_key_type=api_key_type)
562
599
 
563
600
  if not wait_for_completion:
564
601
  return result["data"]["rid"]
@@ -570,7 +607,10 @@ class AsyncVectorVeinClient:
570
607
  if time.time() - start_time > timeout:
571
608
  raise TimeoutError(f"Workflow execution timed out after {timeout} seconds")
572
609
 
573
- result = await self.check_workflow_status(rid)
610
+ if api_key_type == "WORKFLOW":
611
+ result = await self.check_workflow_status(rid, api_key_type=api_key_type)
612
+ else:
613
+ result = await self.check_workflow_status(rid, wid=wid, api_key_type=api_key_type)
574
614
  if result.status == 200:
575
615
  return result
576
616
  elif result.status == 500:
@@ -578,17 +618,23 @@ class AsyncVectorVeinClient:
578
618
 
579
619
  await asyncio.sleep(5)
580
620
 
581
- async def check_workflow_status(self, rid: str) -> WorkflowRunResult:
621
+ async def check_workflow_status(
622
+ self, rid: str, wid: Optional[str] = None, api_key_type: Literal["WORKFLOW", "VAPP"] = "WORKFLOW"
623
+ ) -> WorkflowRunResult:
582
624
  """异步检查工作流运行状态
583
625
 
584
626
  Args:
585
627
  rid: 工作流运行记录ID
628
+ wid: 工作流ID,非必填
629
+ api_key_type: 密钥类型,可选值:'WORKFLOW' 或 'VAPP'
586
630
 
587
631
  Returns:
588
632
  WorkflowRunResult: 工作流运行结果
589
633
  """
590
634
  payload = {"rid": rid}
591
- response = await self._request("POST", "workflow/check-status", json=payload)
635
+ if wid:
636
+ payload["wid"] = wid
637
+ response = await self._request("POST", "workflow/check-status", json=payload, api_key_type=api_key_type)
592
638
  if response["status"] in [200, 202]:
593
639
  return WorkflowRunResult(
594
640
  rid=rid,
File without changes