langchain-dev-utils 1.2.12__py3-none-any.whl → 1.2.13__py3-none-any.whl

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.
@@ -1 +1 @@
1
- __version__ = "1.2.12"
1
+ __version__ = "1.2.13"
@@ -20,7 +20,13 @@ from langchain_core.callbacks import (
20
20
  CallbackManagerForLLMRun,
21
21
  )
22
22
  from langchain_core.language_models import LangSmithParams, LanguageModelInput
23
- from langchain_core.messages import AIMessage, AIMessageChunk, BaseMessage, HumanMessage
23
+ from langchain_core.messages import (
24
+ AIMessage,
25
+ AIMessageChunk,
26
+ BaseMessage,
27
+ HumanMessage,
28
+ ToolMessage,
29
+ )
24
30
  from langchain_core.outputs import ChatGenerationChunk, ChatResult
25
31
  from langchain_core.runnables import Runnable
26
32
  from langchain_core.tools import BaseTool
@@ -63,6 +69,58 @@ def _get_last_human_message_index(messages: list[BaseMessage]) -> int:
63
69
  )
64
70
 
65
71
 
72
+ def _transform_video_block(block: dict[str, Any]) -> dict:
73
+ """Transform video block to video_url block."""
74
+ if "url" in block:
75
+ return {
76
+ "type": "video_url",
77
+ "video_url": {
78
+ "url": block["url"],
79
+ },
80
+ }
81
+ if "base64" in block or block.get("source_type") == "base64":
82
+ if "mime_type" not in block:
83
+ error_message = "mime_type key is required for base64 data."
84
+ raise ValueError(error_message)
85
+ mime_type = block["mime_type"]
86
+ base64_data = block["data"] if "data" in block else block["base64"]
87
+ return {
88
+ "type": "video_url",
89
+ "video_url": {
90
+ "url": f"data:{mime_type};base64,{base64_data}",
91
+ },
92
+ }
93
+ error_message = "Unsupported source type. Only 'url' and 'base64' are supported."
94
+ raise ValueError(error_message)
95
+
96
+
97
+ def _process_video_input(message: BaseMessage):
98
+ """
99
+ Process BaseMessage with video input.
100
+
101
+ Args:
102
+ message (BaseMessage): The HumanMessage instance to process.
103
+
104
+ Returns:
105
+ None: The method modifies the message in-place.
106
+ """
107
+ if not message.content:
108
+ return message
109
+ content = message.content
110
+
111
+ if not isinstance(content, list):
112
+ return message
113
+
114
+ formatted_content = []
115
+ for block in content:
116
+ if isinstance(block, dict) and block.get("type") == "video":
117
+ formatted_content.append(_transform_video_block(block))
118
+ else:
119
+ formatted_content.append(block)
120
+ message = message.model_copy(update={"content": formatted_content})
121
+ return message
122
+
123
+
66
124
  class _BaseChatOpenAICompatible(BaseChatOpenAI):
67
125
  """
68
126
  Base template class for OpenAI-compatible chat model implementations.
@@ -183,6 +241,10 @@ class _BaseChatOpenAICompatible(BaseChatOpenAI):
183
241
  )
184
242
  payload_messages.append(msg_dict)
185
243
  else:
244
+ if (
245
+ isinstance(m, HumanMessage) or isinstance(m, ToolMessage)
246
+ ) and isinstance(m.content, list):
247
+ m = _process_video_input(m)
186
248
  payload_messages.append(_convert_message_to_dict(m))
187
249
 
188
250
  payload["messages"] = payload_messages
@@ -11,7 +11,6 @@ from langchain_dev_utils._utils import (
11
11
 
12
12
  from .types import ChatModelProvider, ChatModelType, CompatibilityOptions
13
13
 
14
-
15
14
  _MODEL_PROVIDERS_DICT = {}
16
15
 
17
16
 
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langchain-dev-utils
3
- Version: 1.2.12
3
+ Version: 1.2.13
4
4
  Summary: A practical utility library for LangChain and LangGraph development
5
5
  Project-URL: Source Code, https://github.com/TBice123123/langchain-dev-utils
6
6
  Project-URL: repository, https://github.com/TBice123123/langchain-dev-utils
7
- Project-URL: documentation, https://tbice123123.github.io/langchain-dev-utils-docs/en/
7
+ Project-URL: documentation, https://tbice123123.github.io/langchain-dev-utils
8
8
  Author-email: tiebingice <tiebingice123@outlook.com>
9
9
  License-File: LICENSE
10
10
  Requires-Python: >=3.11
@@ -1,4 +1,4 @@
1
- langchain_dev_utils/__init__.py,sha256=dbW85A2PinQCZabwD2DNDTfOE9315GDtQQKAsJP8IXk,23
1
+ langchain_dev_utils/__init__.py,sha256=rQSlPcfj4yT4krIq6epTVQyBzIX4etVOgfupVkM-RnU,23
2
2
  langchain_dev_utils/_utils.py,sha256=MFEzR1BjXMj6HEVwt2x2omttFuDJ_rYAEbNqe99r9pM,1338
3
3
  langchain_dev_utils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  langchain_dev_utils/agents/__init__.py,sha256=PJ-lSDZv_AXMYA3H4fx-HzJa14tPbkGmq1HX8LNfaPo,125
@@ -16,10 +16,10 @@ langchain_dev_utils/agents/middleware/tool_call_repair.py,sha256=oZF0Oejemqs9kSn
16
16
  langchain_dev_utils/agents/middleware/tool_emulator.py,sha256=OgtPhqturaWzF4fRSJ3f_IXvIrYrrAjlpOC5zmLtrkY,2031
17
17
  langchain_dev_utils/agents/middleware/tool_selection.py,sha256=dRH5ejR6N02Djwxt6Gd63MYkg6SV5pySlzaRt53OoZk,3113
18
18
  langchain_dev_utils/chat_models/__init__.py,sha256=YSLUyHrWEEj4y4DtGFCOnDW02VIYZdfAH800m4Klgeg,224
19
- langchain_dev_utils/chat_models/base.py,sha256=t-tjNMX4BSyNxvBCLX-BKfJzJcnzhUzJY4NTHhVhnPA,11627
19
+ langchain_dev_utils/chat_models/base.py,sha256=BzaoCIv145eE8b5wNDsbZDHn4EAxe4vdlptp7qXPWKk,11625
20
20
  langchain_dev_utils/chat_models/types.py,sha256=MD3cv_ZIe9fCdgwisNfuxAOhy-j4YSs1ZOQYyCjlNKs,927
21
21
  langchain_dev_utils/chat_models/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- langchain_dev_utils/chat_models/adapters/openai_compatible.py,sha256=v9ewQFn75Fl6urtVo4fZgg2RRrzRXGluKf-egYAI5A0,22658
22
+ langchain_dev_utils/chat_models/adapters/openai_compatible.py,sha256=4iJgMGAReiJ668O9ZGAZbduxNY2PhEJJonDhQDBge44,24596
23
23
  langchain_dev_utils/embeddings/__init__.py,sha256=zbEOaV86TUi9Zrg_dH9dpdgacWg31HMJTlTQknA9EKk,244
24
24
  langchain_dev_utils/embeddings/base.py,sha256=BGoWY0L7nG9iRV3d4sSagXhECXrwvS1xA-A_OVltn3k,9406
25
25
  langchain_dev_utils/message_convert/__init__.py,sha256=ZGrHGXPKMrZ_p9MqfIVZ4jgbEyb7aC4Q7X-muuThIYU,457
@@ -32,7 +32,7 @@ langchain_dev_utils/pipeline/types.py,sha256=T3aROKKXeWvd0jcH5XkgMDQfEkLfPaiOhhV
32
32
  langchain_dev_utils/tool_calling/__init__.py,sha256=mu_WxKMcu6RoTf4vkTPbA1WSBSNc6YIqyBtOQ6iVQj4,322
33
33
  langchain_dev_utils/tool_calling/human_in_the_loop.py,sha256=7Z_QO5OZUR6K8nLoIcafc6osnvX2IYNorOJcbx6bVso,9672
34
34
  langchain_dev_utils/tool_calling/utils.py,sha256=S4-KXQ8jWmpGTXYZitovF8rxKpaSSUkFruM8LDwvcvE,2765
35
- langchain_dev_utils-1.2.12.dist-info/METADATA,sha256=5MjLniCOhGN8a0L6cNLD69PUMNzf5K0nS4Cfifdl5CI,11853
36
- langchain_dev_utils-1.2.12.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
37
- langchain_dev_utils-1.2.12.dist-info/licenses/LICENSE,sha256=AWAOzNEcsvCEzHOF0qby5OKxviVH_eT9Yce1sgJTico,1084
38
- langchain_dev_utils-1.2.12.dist-info/RECORD,,
35
+ langchain_dev_utils-1.2.13.dist-info/METADATA,sha256=SUHFdkF4J5_VxYmZGL7Aqv_79JTXRBoCn--gMTrSjHw,11844
36
+ langchain_dev_utils-1.2.13.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
37
+ langchain_dev_utils-1.2.13.dist-info/licenses/LICENSE,sha256=AWAOzNEcsvCEzHOF0qby5OKxviVH_eT9Yce1sgJTico,1084
38
+ langchain_dev_utils-1.2.13.dist-info/RECORD,,