vectorvein 0.2.78__tar.gz → 0.2.80__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 (67) hide show
  1. {vectorvein-0.2.78 → vectorvein-0.2.80}/PKG-INFO +1 -1
  2. {vectorvein-0.2.78 → vectorvein-0.2.80}/pyproject.toml +1 -1
  3. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/anthropic_client.py +8 -2
  4. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/openai_compatible_client.py +8 -2
  5. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/utils.py +7 -3
  6. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/types/defaults.py +8 -0
  7. {vectorvein-0.2.78 → vectorvein-0.2.80}/README.md +0 -0
  8. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/__init__.py +0 -0
  9. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/api/__init__.py +0 -0
  10. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/api/client.py +0 -0
  11. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/api/exceptions.py +0 -0
  12. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/api/models.py +0 -0
  13. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/__init__.py +0 -0
  14. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/baichuan_client.py +0 -0
  15. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/base_client.py +0 -0
  16. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/deepseek_client.py +0 -0
  17. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/ernie_client.py +0 -0
  18. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/gemini_client.py +0 -0
  19. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/groq_client.py +0 -0
  20. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/local_client.py +0 -0
  21. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/minimax_client.py +0 -0
  22. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/mistral_client.py +0 -0
  23. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/moonshot_client.py +0 -0
  24. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/openai_client.py +0 -0
  25. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/py.typed +0 -0
  26. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/qwen_client.py +0 -0
  27. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/stepfun_client.py +0 -0
  28. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/xai_client.py +0 -0
  29. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/yi_client.py +0 -0
  30. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/chat_clients/zhipuai_client.py +0 -0
  31. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/py.typed +0 -0
  32. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/server/token_server.py +0 -0
  33. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/settings/__init__.py +0 -0
  34. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/settings/py.typed +0 -0
  35. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/types/__init__.py +0 -0
  36. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/types/enums.py +0 -0
  37. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/types/exception.py +0 -0
  38. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/types/llm_parameters.py +0 -0
  39. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/types/py.typed +0 -0
  40. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/types/settings.py +0 -0
  41. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/utilities/media_processing.py +0 -0
  42. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/utilities/rate_limiter.py +0 -0
  43. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/utilities/retry.py +0 -0
  44. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/graph/edge.py +0 -0
  45. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/graph/node.py +0 -0
  46. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/graph/port.py +0 -0
  47. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/graph/workflow.py +0 -0
  48. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/__init__.py +0 -0
  49. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/audio_generation.py +0 -0
  50. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/control_flows.py +0 -0
  51. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/file_processing.py +0 -0
  52. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/image_generation.py +0 -0
  53. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/llms.py +0 -0
  54. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/media_editing.py +0 -0
  55. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/media_processing.py +0 -0
  56. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/output.py +0 -0
  57. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/relational_db.py +0 -0
  58. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/text_processing.py +0 -0
  59. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/tools.py +0 -0
  60. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/triggers.py +0 -0
  61. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/vector_db.py +0 -0
  62. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/video_generation.py +0 -0
  63. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/nodes/web_crawlers.py +0 -0
  64. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/utils/analyse.py +0 -0
  65. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/utils/check.py +0 -0
  66. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/utils/json_to_code.py +0 -0
  67. {vectorvein-0.2.78 → vectorvein-0.2.80}/src/vectorvein/workflow/utils/layout.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vectorvein
3
- Version: 0.2.78
3
+ Version: 0.2.80
4
4
  Summary: VectorVein Python SDK
5
5
  Author-Email: Anderson <andersonby@163.com>
6
6
  License: MIT
@@ -17,7 +17,7 @@ description = "VectorVein Python SDK"
17
17
  name = "vectorvein"
18
18
  readme = "README.md"
19
19
  requires-python = ">=3.10"
20
- version = "0.2.78"
20
+ version = "0.2.80"
21
21
 
22
22
  [project.license]
23
23
  text = "MIT"
@@ -596,7 +596,10 @@ class AnthropicChatClient(BaseChatClient):
596
596
 
597
597
  if max_tokens is None:
598
598
  max_output_tokens = self.model_setting.max_output_tokens
599
- token_counts = get_message_token_counts(messages=messages, tools=tools_params, model=self.model)
599
+ native_multimodal = self.model_setting.native_multimodal
600
+ token_counts = get_message_token_counts(
601
+ messages=messages, tools=tools, model=self.model, native_multimodal=native_multimodal
602
+ )
600
603
  if max_output_tokens is not None:
601
604
  max_tokens = self.model_setting.context_length - token_counts
602
605
  max_tokens = min(max(max_tokens, 1), max_output_tokens)
@@ -1207,7 +1210,10 @@ class AsyncAnthropicChatClient(BaseAsyncChatClient):
1207
1210
 
1208
1211
  if max_tokens is None:
1209
1212
  max_output_tokens = self.model_setting.max_output_tokens
1210
- token_counts = get_message_token_counts(messages=messages, tools=tools_params, model=self.model)
1213
+ native_multimodal = self.model_setting.native_multimodal
1214
+ token_counts = get_message_token_counts(
1215
+ messages=messages, tools=tools, model=self.model, native_multimodal=native_multimodal
1216
+ )
1211
1217
  if max_output_tokens is not None:
1212
1218
  max_tokens = self.model_setting.context_length - token_counts
1213
1219
  max_tokens = min(max(max_tokens, 1), max_output_tokens)
@@ -326,7 +326,10 @@ class OpenAICompatibleChatClient(BaseChatClient):
326
326
 
327
327
  if not max_tokens and not max_completion_tokens:
328
328
  max_output_tokens = self.model_setting.max_output_tokens
329
- token_counts = get_message_token_counts(messages=messages, tools=tools, model=self.model)
329
+ native_multimodal = self.model_setting.native_multimodal
330
+ token_counts = get_message_token_counts(
331
+ messages=messages, tools=tools, model=self.model, native_multimodal=native_multimodal
332
+ )
330
333
  if max_output_tokens is not None:
331
334
  max_tokens = self.model_setting.context_length - token_counts - 64
332
335
  max_tokens = min(max(max_tokens, 1), max_output_tokens)
@@ -805,7 +808,10 @@ class AsyncOpenAICompatibleChatClient(BaseAsyncChatClient):
805
808
 
806
809
  if not max_tokens and not max_completion_tokens:
807
810
  max_output_tokens = self.model_setting.max_output_tokens
808
- token_counts = get_message_token_counts(messages=messages, tools=tools, model=self.model)
811
+ native_multimodal = self.model_setting.native_multimodal
812
+ token_counts = get_message_token_counts(
813
+ messages=messages, tools=tools, model=self.model, native_multimodal=native_multimodal
814
+ )
809
815
  if max_output_tokens is not None:
810
816
  max_tokens = self.model_setting.context_length - token_counts - 64
811
817
  max_tokens = min(max(max_tokens, 1), max_output_tokens)
@@ -348,9 +348,10 @@ def get_message_token_counts(
348
348
  messages: list,
349
349
  tools: list | Iterable[ToolParam] | NotGiven = NOT_GIVEN,
350
350
  model: str = "gpt-4o",
351
+ native_multimodal: bool = True,
351
352
  ) -> int:
352
353
  tokens = 0
353
- formatted_messages = format_messages(messages, backend=BackendType.OpenAI, native_multimodal=True)
354
+ formatted_messages = format_messages(messages, backend=BackendType.OpenAI, native_multimodal=native_multimodal)
354
355
  for message in formatted_messages:
355
356
  content = message["content"]
356
357
  if isinstance(content, str):
@@ -360,8 +361,11 @@ def get_message_token_counts(
360
361
  if isinstance(item, dict) and item["type"] == "text":
361
362
  tokens += get_token_counts(item["text"], model)
362
363
  elif isinstance(item, dict) and item["type"].startswith("image"):
363
- # TODO: Get real image size
364
- tokens += calculate_image_tokens(2048, 2048, model)
364
+ if native_multimodal:
365
+ # TODO: Get real image size
366
+ tokens += calculate_image_tokens(2048, 2048, model)
367
+ else:
368
+ tokens += 1
365
369
  if tools:
366
370
  tokens += get_token_counts(str(tools), model)
367
371
 
@@ -607,6 +607,14 @@ OPENAI_MODELS: Final[Dict[str, ModelSettingDict]] = {
607
607
  "response_format_available": True,
608
608
  "native_multimodal": False,
609
609
  },
610
+ "gpt-4.1": {
611
+ "id": "gpt-4.1",
612
+ "context_length": 1047576,
613
+ "max_output_tokens": 32768,
614
+ "function_call_available": True,
615
+ "response_format_available": True,
616
+ "native_multimodal": True,
617
+ },
610
618
  }
611
619
 
612
620
  # Anthropic models
File without changes