langchain-core 1.0.0a5__py3-none-any.whl → 1.0.3__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.
- langchain_core/__init__.py +1 -1
- langchain_core/_api/__init__.py +3 -4
- langchain_core/_api/beta_decorator.py +23 -26
- langchain_core/_api/deprecation.py +51 -64
- langchain_core/_api/path.py +3 -6
- langchain_core/_import_utils.py +3 -4
- langchain_core/agents.py +20 -22
- langchain_core/caches.py +65 -66
- langchain_core/callbacks/__init__.py +1 -8
- langchain_core/callbacks/base.py +321 -336
- langchain_core/callbacks/file.py +44 -44
- langchain_core/callbacks/manager.py +436 -513
- langchain_core/callbacks/stdout.py +29 -30
- langchain_core/callbacks/streaming_stdout.py +32 -32
- langchain_core/callbacks/usage.py +60 -57
- langchain_core/chat_history.py +53 -68
- langchain_core/document_loaders/base.py +27 -25
- langchain_core/document_loaders/blob_loaders.py +1 -1
- langchain_core/document_loaders/langsmith.py +44 -48
- langchain_core/documents/__init__.py +23 -3
- langchain_core/documents/base.py +98 -90
- langchain_core/documents/compressor.py +10 -10
- langchain_core/documents/transformers.py +34 -35
- langchain_core/embeddings/fake.py +50 -54
- langchain_core/example_selectors/length_based.py +1 -1
- langchain_core/example_selectors/semantic_similarity.py +28 -32
- langchain_core/exceptions.py +21 -20
- langchain_core/globals.py +3 -151
- langchain_core/indexing/__init__.py +1 -1
- langchain_core/indexing/api.py +121 -126
- langchain_core/indexing/base.py +73 -75
- langchain_core/indexing/in_memory.py +4 -6
- langchain_core/language_models/__init__.py +14 -29
- langchain_core/language_models/_utils.py +58 -61
- langchain_core/language_models/base.py +53 -162
- langchain_core/language_models/chat_models.py +298 -387
- langchain_core/language_models/fake.py +11 -11
- langchain_core/language_models/fake_chat_models.py +42 -36
- langchain_core/language_models/llms.py +125 -235
- langchain_core/load/dump.py +9 -12
- langchain_core/load/load.py +18 -28
- langchain_core/load/mapping.py +2 -4
- langchain_core/load/serializable.py +42 -40
- langchain_core/messages/__init__.py +10 -16
- langchain_core/messages/ai.py +148 -148
- langchain_core/messages/base.py +58 -52
- langchain_core/messages/block_translators/__init__.py +27 -17
- langchain_core/messages/block_translators/anthropic.py +6 -6
- langchain_core/messages/block_translators/bedrock_converse.py +5 -5
- langchain_core/messages/block_translators/google_genai.py +505 -20
- langchain_core/messages/block_translators/google_vertexai.py +4 -32
- langchain_core/messages/block_translators/groq.py +117 -21
- langchain_core/messages/block_translators/langchain_v0.py +5 -5
- langchain_core/messages/block_translators/openai.py +11 -11
- langchain_core/messages/chat.py +2 -6
- langchain_core/messages/content.py +337 -328
- langchain_core/messages/function.py +6 -10
- langchain_core/messages/human.py +24 -31
- langchain_core/messages/modifier.py +2 -2
- langchain_core/messages/system.py +19 -29
- langchain_core/messages/tool.py +74 -90
- langchain_core/messages/utils.py +474 -504
- langchain_core/output_parsers/__init__.py +13 -10
- langchain_core/output_parsers/base.py +61 -61
- langchain_core/output_parsers/format_instructions.py +9 -4
- langchain_core/output_parsers/json.py +12 -10
- langchain_core/output_parsers/list.py +21 -23
- langchain_core/output_parsers/openai_functions.py +49 -47
- langchain_core/output_parsers/openai_tools.py +16 -21
- langchain_core/output_parsers/pydantic.py +13 -14
- langchain_core/output_parsers/string.py +5 -5
- langchain_core/output_parsers/transform.py +15 -17
- langchain_core/output_parsers/xml.py +35 -34
- langchain_core/outputs/__init__.py +1 -1
- langchain_core/outputs/chat_generation.py +18 -18
- langchain_core/outputs/chat_result.py +1 -3
- langchain_core/outputs/generation.py +10 -11
- langchain_core/outputs/llm_result.py +10 -10
- langchain_core/prompt_values.py +11 -17
- langchain_core/prompts/__init__.py +3 -27
- langchain_core/prompts/base.py +48 -56
- langchain_core/prompts/chat.py +275 -325
- langchain_core/prompts/dict.py +5 -5
- langchain_core/prompts/few_shot.py +81 -88
- langchain_core/prompts/few_shot_with_templates.py +11 -13
- langchain_core/prompts/image.py +12 -14
- langchain_core/prompts/loading.py +4 -6
- langchain_core/prompts/message.py +3 -3
- langchain_core/prompts/prompt.py +24 -39
- langchain_core/prompts/string.py +26 -10
- langchain_core/prompts/structured.py +49 -53
- langchain_core/rate_limiters.py +51 -60
- langchain_core/retrievers.py +61 -198
- langchain_core/runnables/base.py +1478 -1630
- langchain_core/runnables/branch.py +53 -57
- langchain_core/runnables/config.py +72 -89
- langchain_core/runnables/configurable.py +120 -137
- langchain_core/runnables/fallbacks.py +83 -79
- langchain_core/runnables/graph.py +91 -97
- langchain_core/runnables/graph_ascii.py +27 -28
- langchain_core/runnables/graph_mermaid.py +38 -50
- langchain_core/runnables/graph_png.py +15 -16
- langchain_core/runnables/history.py +135 -148
- langchain_core/runnables/passthrough.py +124 -150
- langchain_core/runnables/retry.py +46 -51
- langchain_core/runnables/router.py +25 -30
- langchain_core/runnables/schema.py +75 -80
- langchain_core/runnables/utils.py +60 -67
- langchain_core/stores.py +85 -121
- langchain_core/structured_query.py +8 -8
- langchain_core/sys_info.py +27 -29
- langchain_core/tools/__init__.py +1 -14
- langchain_core/tools/base.py +285 -229
- langchain_core/tools/convert.py +160 -155
- langchain_core/tools/render.py +10 -10
- langchain_core/tools/retriever.py +12 -11
- langchain_core/tools/simple.py +19 -24
- langchain_core/tools/structured.py +32 -39
- langchain_core/tracers/__init__.py +1 -9
- langchain_core/tracers/base.py +97 -99
- langchain_core/tracers/context.py +29 -52
- langchain_core/tracers/core.py +49 -53
- langchain_core/tracers/evaluation.py +11 -11
- langchain_core/tracers/event_stream.py +65 -64
- langchain_core/tracers/langchain.py +21 -21
- langchain_core/tracers/log_stream.py +45 -45
- langchain_core/tracers/memory_stream.py +3 -3
- langchain_core/tracers/root_listeners.py +16 -16
- langchain_core/tracers/run_collector.py +2 -4
- langchain_core/tracers/schemas.py +0 -129
- langchain_core/tracers/stdout.py +3 -3
- langchain_core/utils/__init__.py +1 -4
- langchain_core/utils/_merge.py +2 -2
- langchain_core/utils/aiter.py +57 -61
- langchain_core/utils/env.py +9 -9
- langchain_core/utils/function_calling.py +89 -186
- langchain_core/utils/html.py +7 -8
- langchain_core/utils/input.py +6 -6
- langchain_core/utils/interactive_env.py +1 -1
- langchain_core/utils/iter.py +36 -40
- langchain_core/utils/json.py +4 -3
- langchain_core/utils/json_schema.py +9 -9
- langchain_core/utils/mustache.py +8 -10
- langchain_core/utils/pydantic.py +33 -35
- langchain_core/utils/strings.py +6 -9
- langchain_core/utils/usage.py +1 -1
- langchain_core/utils/utils.py +66 -62
- langchain_core/vectorstores/base.py +182 -216
- langchain_core/vectorstores/in_memory.py +101 -176
- langchain_core/vectorstores/utils.py +5 -5
- langchain_core/version.py +1 -1
- langchain_core-1.0.3.dist-info/METADATA +69 -0
- langchain_core-1.0.3.dist-info/RECORD +172 -0
- {langchain_core-1.0.0a5.dist-info → langchain_core-1.0.3.dist-info}/WHEEL +1 -1
- langchain_core/memory.py +0 -120
- langchain_core/messages/block_translators/ollama.py +0 -47
- langchain_core/prompts/pipeline.py +0 -138
- langchain_core/pydantic_v1/__init__.py +0 -30
- langchain_core/pydantic_v1/dataclasses.py +0 -23
- langchain_core/pydantic_v1/main.py +0 -23
- langchain_core/tracers/langchain_v1.py +0 -31
- langchain_core/utils/loading.py +0 -35
- langchain_core-1.0.0a5.dist-info/METADATA +0 -77
- langchain_core-1.0.0a5.dist-info/RECORD +0 -181
- langchain_core-1.0.0a5.dist-info/entry_points.txt +0 -4
|
@@ -15,11 +15,11 @@ from langchain_core.utils._merge import merge_dicts
|
|
|
15
15
|
class FunctionMessage(BaseMessage):
|
|
16
16
|
"""Message for passing the result of executing a tool back to a model.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
do not contain the
|
|
18
|
+
`FunctionMessage` are an older version of the `ToolMessage` schema, and
|
|
19
|
+
do not contain the `tool_call_id` field.
|
|
20
20
|
|
|
21
|
-
The
|
|
22
|
-
tool call response.
|
|
21
|
+
The `tool_call_id` field is used to associate the tool call request with the
|
|
22
|
+
tool call response. Useful in situations where a chat model is able
|
|
23
23
|
to request multiple tool calls in parallel.
|
|
24
24
|
|
|
25
25
|
"""
|
|
@@ -28,7 +28,7 @@ class FunctionMessage(BaseMessage):
|
|
|
28
28
|
"""The name of the function that was executed."""
|
|
29
29
|
|
|
30
30
|
type: Literal["function"] = "function"
|
|
31
|
-
"""The type of the message (used for serialization).
|
|
31
|
+
"""The type of the message (used for serialization)."""
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class FunctionMessageChunk(FunctionMessage, BaseMessageChunk):
|
|
@@ -38,11 +38,7 @@ class FunctionMessageChunk(FunctionMessage, BaseMessageChunk):
|
|
|
38
38
|
# to make sure that the chunk variant can be discriminated from the
|
|
39
39
|
# non-chunk variant.
|
|
40
40
|
type: Literal["FunctionMessageChunk"] = "FunctionMessageChunk" # type: ignore[assignment]
|
|
41
|
-
"""The type of the message (used for serialization).
|
|
42
|
-
|
|
43
|
-
Defaults to ``'FunctionMessageChunk'``.
|
|
44
|
-
|
|
45
|
-
"""
|
|
41
|
+
"""The type of the message (used for serialization)."""
|
|
46
42
|
|
|
47
43
|
@override
|
|
48
44
|
def __add__(self, other: Any) -> BaseMessageChunk: # type: ignore[override]
|
langchain_core/messages/human.py
CHANGED
|
@@ -1,65 +1,59 @@
|
|
|
1
1
|
"""Human message."""
|
|
2
2
|
|
|
3
|
-
from typing import Any, Literal,
|
|
3
|
+
from typing import Any, Literal, cast, overload
|
|
4
4
|
|
|
5
5
|
from langchain_core.messages import content as types
|
|
6
6
|
from langchain_core.messages.base import BaseMessage, BaseMessageChunk
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class HumanMessage(BaseMessage):
|
|
10
|
-
"""Message from
|
|
10
|
+
"""Message from the user.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
A `HumanMessage` is a message that is passed in from a user to the model.
|
|
13
13
|
|
|
14
14
|
Example:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
print(model.invoke(messages))
|
|
28
|
-
|
|
15
|
+
```python
|
|
16
|
+
from langchain_core.messages import HumanMessage, SystemMessage
|
|
17
|
+
|
|
18
|
+
messages = [
|
|
19
|
+
SystemMessage(content="You are a helpful assistant! Your name is Bob."),
|
|
20
|
+
HumanMessage(content="What is your name?"),
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
# Instantiate a chat model and invoke it with the messages
|
|
24
|
+
model = ...
|
|
25
|
+
print(model.invoke(messages))
|
|
26
|
+
```
|
|
29
27
|
"""
|
|
30
28
|
|
|
31
29
|
type: Literal["human"] = "human"
|
|
32
|
-
"""The type of the message (used for serialization).
|
|
33
|
-
|
|
34
|
-
Defaults to ``'human'``.
|
|
35
|
-
|
|
36
|
-
"""
|
|
30
|
+
"""The type of the message (used for serialization)."""
|
|
37
31
|
|
|
38
32
|
@overload
|
|
39
33
|
def __init__(
|
|
40
34
|
self,
|
|
41
|
-
content:
|
|
35
|
+
content: str | list[str | dict],
|
|
42
36
|
**kwargs: Any,
|
|
43
37
|
) -> None: ...
|
|
44
38
|
|
|
45
39
|
@overload
|
|
46
40
|
def __init__(
|
|
47
41
|
self,
|
|
48
|
-
content:
|
|
49
|
-
content_blocks:
|
|
42
|
+
content: str | list[str | dict] | None = None,
|
|
43
|
+
content_blocks: list[types.ContentBlock] | None = None,
|
|
50
44
|
**kwargs: Any,
|
|
51
45
|
) -> None: ...
|
|
52
46
|
|
|
53
47
|
def __init__(
|
|
54
48
|
self,
|
|
55
|
-
content:
|
|
56
|
-
content_blocks:
|
|
49
|
+
content: str | list[str | dict] | None = None,
|
|
50
|
+
content_blocks: list[types.ContentBlock] | None = None,
|
|
57
51
|
**kwargs: Any,
|
|
58
52
|
) -> None:
|
|
59
|
-
"""Specify
|
|
53
|
+
"""Specify `content` as positional arg or `content_blocks` for typing."""
|
|
60
54
|
if content_blocks is not None:
|
|
61
55
|
super().__init__(
|
|
62
|
-
content=cast("
|
|
56
|
+
content=cast("str | list[str | dict]", content_blocks),
|
|
63
57
|
**kwargs,
|
|
64
58
|
)
|
|
65
59
|
else:
|
|
@@ -73,5 +67,4 @@ class HumanMessageChunk(HumanMessage, BaseMessageChunk):
|
|
|
73
67
|
# to make sure that the chunk variant can be discriminated from the
|
|
74
68
|
# non-chunk variant.
|
|
75
69
|
type: Literal["HumanMessageChunk"] = "HumanMessageChunk" # type: ignore[assignment]
|
|
76
|
-
"""The type of the message (used for serialization).
|
|
77
|
-
Defaults to "HumanMessageChunk"."""
|
|
70
|
+
"""The type of the message (used for serialization)."""
|
|
@@ -9,7 +9,7 @@ class RemoveMessage(BaseMessage):
|
|
|
9
9
|
"""Message responsible for deleting other messages."""
|
|
10
10
|
|
|
11
11
|
type: Literal["remove"] = "remove"
|
|
12
|
-
"""The type of the message (used for serialization).
|
|
12
|
+
"""The type of the message (used for serialization)."""
|
|
13
13
|
|
|
14
14
|
def __init__(
|
|
15
15
|
self,
|
|
@@ -20,7 +20,7 @@ class RemoveMessage(BaseMessage):
|
|
|
20
20
|
|
|
21
21
|
Args:
|
|
22
22
|
id: The ID of the message to remove.
|
|
23
|
-
kwargs: Additional fields to pass to the message.
|
|
23
|
+
**kwargs: Additional fields to pass to the message.
|
|
24
24
|
|
|
25
25
|
Raises:
|
|
26
26
|
ValueError: If the 'content' field is passed in kwargs.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""System message."""
|
|
2
2
|
|
|
3
|
-
from typing import Any, Literal,
|
|
3
|
+
from typing import Any, Literal, cast, overload
|
|
4
4
|
|
|
5
5
|
from langchain_core.messages import content as types
|
|
6
6
|
from langchain_core.messages.base import BaseMessage, BaseMessageChunk
|
|
@@ -13,53 +13,47 @@ class SystemMessage(BaseMessage):
|
|
|
13
13
|
of input messages.
|
|
14
14
|
|
|
15
15
|
Example:
|
|
16
|
+
```python
|
|
17
|
+
from langchain_core.messages import HumanMessage, SystemMessage
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
messages = [
|
|
22
|
-
SystemMessage(content="You are a helpful assistant! Your name is Bob."),
|
|
23
|
-
HumanMessage(content="What is your name?"),
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
# Define a chat model and invoke it with the messages
|
|
27
|
-
print(model.invoke(messages))
|
|
19
|
+
messages = [
|
|
20
|
+
SystemMessage(content="You are a helpful assistant! Your name is Bob."),
|
|
21
|
+
HumanMessage(content="What is your name?"),
|
|
22
|
+
]
|
|
28
23
|
|
|
24
|
+
# Define a chat model and invoke it with the messages
|
|
25
|
+
print(model.invoke(messages))
|
|
26
|
+
```
|
|
29
27
|
"""
|
|
30
28
|
|
|
31
29
|
type: Literal["system"] = "system"
|
|
32
|
-
"""The type of the message (used for serialization).
|
|
33
|
-
|
|
34
|
-
Defaults to ``'system'``.
|
|
35
|
-
|
|
36
|
-
"""
|
|
30
|
+
"""The type of the message (used for serialization)."""
|
|
37
31
|
|
|
38
32
|
@overload
|
|
39
33
|
def __init__(
|
|
40
34
|
self,
|
|
41
|
-
content:
|
|
35
|
+
content: str | list[str | dict],
|
|
42
36
|
**kwargs: Any,
|
|
43
37
|
) -> None: ...
|
|
44
38
|
|
|
45
39
|
@overload
|
|
46
40
|
def __init__(
|
|
47
41
|
self,
|
|
48
|
-
content:
|
|
49
|
-
content_blocks:
|
|
42
|
+
content: str | list[str | dict] | None = None,
|
|
43
|
+
content_blocks: list[types.ContentBlock] | None = None,
|
|
50
44
|
**kwargs: Any,
|
|
51
45
|
) -> None: ...
|
|
52
46
|
|
|
53
47
|
def __init__(
|
|
54
48
|
self,
|
|
55
|
-
content:
|
|
56
|
-
content_blocks:
|
|
49
|
+
content: str | list[str | dict] | None = None,
|
|
50
|
+
content_blocks: list[types.ContentBlock] | None = None,
|
|
57
51
|
**kwargs: Any,
|
|
58
52
|
) -> None:
|
|
59
|
-
"""Specify
|
|
53
|
+
"""Specify `content` as positional arg or `content_blocks` for typing."""
|
|
60
54
|
if content_blocks is not None:
|
|
61
55
|
super().__init__(
|
|
62
|
-
content=cast("
|
|
56
|
+
content=cast("str | list[str | dict]", content_blocks),
|
|
63
57
|
**kwargs,
|
|
64
58
|
)
|
|
65
59
|
else:
|
|
@@ -73,8 +67,4 @@ class SystemMessageChunk(SystemMessage, BaseMessageChunk):
|
|
|
73
67
|
# to make sure that the chunk variant can be discriminated from the
|
|
74
68
|
# non-chunk variant.
|
|
75
69
|
type: Literal["SystemMessageChunk"] = "SystemMessageChunk" # type: ignore[assignment]
|
|
76
|
-
"""The type of the message (used for serialization).
|
|
77
|
-
|
|
78
|
-
Defaults to ``'SystemMessageChunk'``.
|
|
79
|
-
|
|
80
|
-
"""
|
|
70
|
+
"""The type of the message (used for serialization)."""
|
langchain_core/messages/tool.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Messages for tools."""
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
|
-
from typing import Any, Literal,
|
|
4
|
+
from typing import Any, Literal, cast, overload
|
|
5
5
|
from uuid import UUID
|
|
6
6
|
|
|
7
7
|
from pydantic import Field, model_validator
|
|
@@ -16,9 +16,9 @@ from langchain_core.utils._merge import merge_dicts, merge_obj
|
|
|
16
16
|
class ToolOutputMixin:
|
|
17
17
|
"""Mixin for objects that tools can return directly.
|
|
18
18
|
|
|
19
|
-
If a custom BaseTool is invoked with a
|
|
20
|
-
not an instance of
|
|
21
|
-
a string and wrapped in a
|
|
19
|
+
If a custom BaseTool is invoked with a `ToolCall` and the output of custom code is
|
|
20
|
+
not an instance of `ToolOutputMixin`, the output will automatically be coerced to
|
|
21
|
+
a string and wrapped in a `ToolMessage`.
|
|
22
22
|
|
|
23
23
|
"""
|
|
24
24
|
|
|
@@ -26,42 +26,39 @@ class ToolOutputMixin:
|
|
|
26
26
|
class ToolMessage(BaseMessage, ToolOutputMixin):
|
|
27
27
|
"""Message for passing the result of executing a tool back to a model.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
is encoded inside the
|
|
29
|
+
`ToolMessage` objects contain the result of a tool invocation. Typically, the result
|
|
30
|
+
is encoded inside the `content` field.
|
|
31
31
|
|
|
32
|
-
Example: A
|
|
32
|
+
Example: A `ToolMessage` representing a result of `42` from a tool call with id
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
```python
|
|
35
|
+
from langchain_core.messages import ToolMessage
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
ToolMessage(content="42", tool_call_id="call_Jja7J89XsjrOLA5r!MEOW!SL")
|
|
38
|
+
```
|
|
37
39
|
|
|
38
|
-
|
|
40
|
+
Example: A `ToolMessage` where only part of the tool output is sent to the model
|
|
41
|
+
and the full output is passed in to artifact.
|
|
39
42
|
|
|
43
|
+
```python
|
|
44
|
+
from langchain_core.messages import ToolMessage
|
|
40
45
|
|
|
41
|
-
|
|
42
|
-
|
|
46
|
+
tool_output = {
|
|
47
|
+
"stdout": "From the graph we can see that the correlation between "
|
|
48
|
+
"x and y is ...",
|
|
49
|
+
"stderr": None,
|
|
50
|
+
"artifacts": {"type": "image", "base64_data": "/9j/4gIcSU..."},
|
|
51
|
+
}
|
|
43
52
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
tool_output = {
|
|
51
|
-
"stdout": "From the graph we can see that the correlation between "
|
|
52
|
-
"x and y is ...",
|
|
53
|
-
"stderr": None,
|
|
54
|
-
"artifacts": {"type": "image", "base64_data": "/9j/4gIcSU..."},
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
ToolMessage(
|
|
58
|
-
content=tool_output["stdout"],
|
|
59
|
-
artifact=tool_output,
|
|
60
|
-
tool_call_id="call_Jja7J89XsjrOLA5r!MEOW!SL",
|
|
61
|
-
)
|
|
53
|
+
ToolMessage(
|
|
54
|
+
content=tool_output["stdout"],
|
|
55
|
+
artifact=tool_output,
|
|
56
|
+
tool_call_id="call_Jja7J89XsjrOLA5r!MEOW!SL",
|
|
57
|
+
)
|
|
58
|
+
```
|
|
62
59
|
|
|
63
|
-
The
|
|
64
|
-
tool call response.
|
|
60
|
+
The `tool_call_id` field is used to associate the tool call request with the
|
|
61
|
+
tool call response. Useful in situations where a chat model is able
|
|
65
62
|
to request multiple tool calls in parallel.
|
|
66
63
|
|
|
67
64
|
"""
|
|
@@ -70,11 +67,7 @@ class ToolMessage(BaseMessage, ToolOutputMixin):
|
|
|
70
67
|
"""Tool call that this message is responding to."""
|
|
71
68
|
|
|
72
69
|
type: Literal["tool"] = "tool"
|
|
73
|
-
"""The type of the message (used for serialization).
|
|
74
|
-
|
|
75
|
-
Defaults to ``'tool'``.
|
|
76
|
-
|
|
77
|
-
"""
|
|
70
|
+
"""The type of the message (used for serialization)."""
|
|
78
71
|
|
|
79
72
|
artifact: Any = None
|
|
80
73
|
"""Artifact of the Tool execution which is not meant to be sent to the model.
|
|
@@ -83,21 +76,15 @@ class ToolMessage(BaseMessage, ToolOutputMixin):
|
|
|
83
76
|
a subset of the full tool output is being passed as message content but the full
|
|
84
77
|
output is needed in other parts of the code.
|
|
85
78
|
|
|
86
|
-
.. versionadded:: 0.2.17
|
|
87
|
-
|
|
88
79
|
"""
|
|
89
80
|
|
|
90
81
|
status: Literal["success", "error"] = "success"
|
|
91
|
-
"""Status of the tool invocation.
|
|
92
|
-
|
|
93
|
-
.. versionadded:: 0.2.24
|
|
94
|
-
|
|
95
|
-
"""
|
|
82
|
+
"""Status of the tool invocation."""
|
|
96
83
|
|
|
97
84
|
additional_kwargs: dict = Field(default_factory=dict, repr=False)
|
|
98
|
-
"""Currently inherited from BaseMessage
|
|
85
|
+
"""Currently inherited from `BaseMessage`, but not used."""
|
|
99
86
|
response_metadata: dict = Field(default_factory=dict, repr=False)
|
|
100
|
-
"""Currently inherited from BaseMessage
|
|
87
|
+
"""Currently inherited from `BaseMessage`, but not used."""
|
|
101
88
|
|
|
102
89
|
@model_validator(mode="before")
|
|
103
90
|
@classmethod
|
|
@@ -147,36 +134,36 @@ class ToolMessage(BaseMessage, ToolOutputMixin):
|
|
|
147
134
|
@overload
|
|
148
135
|
def __init__(
|
|
149
136
|
self,
|
|
150
|
-
content:
|
|
137
|
+
content: str | list[str | dict],
|
|
151
138
|
**kwargs: Any,
|
|
152
139
|
) -> None: ...
|
|
153
140
|
|
|
154
141
|
@overload
|
|
155
142
|
def __init__(
|
|
156
143
|
self,
|
|
157
|
-
content:
|
|
158
|
-
content_blocks:
|
|
144
|
+
content: str | list[str | dict] | None = None,
|
|
145
|
+
content_blocks: list[types.ContentBlock] | None = None,
|
|
159
146
|
**kwargs: Any,
|
|
160
147
|
) -> None: ...
|
|
161
148
|
|
|
162
149
|
def __init__(
|
|
163
150
|
self,
|
|
164
|
-
content:
|
|
165
|
-
content_blocks:
|
|
151
|
+
content: str | list[str | dict] | None = None,
|
|
152
|
+
content_blocks: list[types.ContentBlock] | None = None,
|
|
166
153
|
**kwargs: Any,
|
|
167
154
|
) -> None:
|
|
168
|
-
"""Initialize
|
|
155
|
+
"""Initialize a `ToolMessage`.
|
|
169
156
|
|
|
170
|
-
Specify
|
|
157
|
+
Specify `content` as positional arg or `content_blocks` for typing.
|
|
171
158
|
|
|
172
159
|
Args:
|
|
173
|
-
content: The
|
|
160
|
+
content: The contents of the message.
|
|
174
161
|
content_blocks: Typed standard content.
|
|
175
162
|
**kwargs: Additional fields.
|
|
176
163
|
"""
|
|
177
164
|
if content_blocks is not None:
|
|
178
165
|
super().__init__(
|
|
179
|
-
content=cast("
|
|
166
|
+
content=cast("str | list[str | dict]", content_blocks),
|
|
180
167
|
**kwargs,
|
|
181
168
|
)
|
|
182
169
|
else:
|
|
@@ -216,16 +203,15 @@ class ToolMessageChunk(ToolMessage, BaseMessageChunk):
|
|
|
216
203
|
|
|
217
204
|
|
|
218
205
|
class ToolCall(TypedDict):
|
|
219
|
-
"""Represents
|
|
206
|
+
"""Represents an AI's request to call a tool.
|
|
220
207
|
|
|
221
208
|
Example:
|
|
209
|
+
```python
|
|
210
|
+
{"name": "foo", "args": {"a": 1}, "id": "123"}
|
|
211
|
+
```
|
|
222
212
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
{"name": "foo", "args": {"a": 1}, "id": "123"}
|
|
226
|
-
|
|
227
|
-
This represents a request to call the tool named ``'foo'`` with arguments
|
|
228
|
-
``{"a": 1}`` and an identifier of ``'123'``.
|
|
213
|
+
This represents a request to call the tool named `'foo'` with arguments
|
|
214
|
+
`{"a": 1}` and an identifier of `'123'`.
|
|
229
215
|
|
|
230
216
|
"""
|
|
231
217
|
|
|
@@ -233,7 +219,7 @@ class ToolCall(TypedDict):
|
|
|
233
219
|
"""The name of the tool to be called."""
|
|
234
220
|
args: dict[str, Any]
|
|
235
221
|
"""The arguments to the tool call."""
|
|
236
|
-
id:
|
|
222
|
+
id: str | None
|
|
237
223
|
"""An identifier associated with the tool call.
|
|
238
224
|
|
|
239
225
|
An identifier is needed to associate a tool call request with a tool
|
|
@@ -247,7 +233,7 @@ def tool_call(
|
|
|
247
233
|
*,
|
|
248
234
|
name: str,
|
|
249
235
|
args: dict[str, Any],
|
|
250
|
-
id:
|
|
236
|
+
id: str | None,
|
|
251
237
|
) -> ToolCall:
|
|
252
238
|
"""Create a tool call.
|
|
253
239
|
|
|
@@ -263,43 +249,41 @@ def tool_call(
|
|
|
263
249
|
|
|
264
250
|
|
|
265
251
|
class ToolCallChunk(TypedDict):
|
|
266
|
-
"""A chunk of a tool call (
|
|
252
|
+
"""A chunk of a tool call (yielded when streaming).
|
|
267
253
|
|
|
268
|
-
When merging
|
|
254
|
+
When merging `ToolCallChunk`s (e.g., via `AIMessageChunk.__add__`),
|
|
269
255
|
all string attributes are concatenated. Chunks are only merged if their
|
|
270
|
-
values of
|
|
256
|
+
values of `index` are equal and not None.
|
|
271
257
|
|
|
272
258
|
Example:
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
(
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
).tool_call_chunks == [ToolCallChunk(name="foo", args='{"a":1}', index=0)]
|
|
283
|
-
|
|
259
|
+
```python
|
|
260
|
+
left_chunks = [ToolCallChunk(name="foo", args='{"a":', index=0)]
|
|
261
|
+
right_chunks = [ToolCallChunk(name=None, args="1}", index=0)]
|
|
262
|
+
|
|
263
|
+
(
|
|
264
|
+
AIMessageChunk(content="", tool_call_chunks=left_chunks)
|
|
265
|
+
+ AIMessageChunk(content="", tool_call_chunks=right_chunks)
|
|
266
|
+
).tool_call_chunks == [ToolCallChunk(name="foo", args='{"a":1}', index=0)]
|
|
267
|
+
```
|
|
284
268
|
"""
|
|
285
269
|
|
|
286
|
-
name:
|
|
270
|
+
name: str | None
|
|
287
271
|
"""The name of the tool to be called."""
|
|
288
|
-
args:
|
|
272
|
+
args: str | None
|
|
289
273
|
"""The arguments to the tool call."""
|
|
290
|
-
id:
|
|
274
|
+
id: str | None
|
|
291
275
|
"""An identifier associated with the tool call."""
|
|
292
|
-
index:
|
|
276
|
+
index: int | None
|
|
293
277
|
"""The index of the tool call in a sequence."""
|
|
294
278
|
type: NotRequired[Literal["tool_call_chunk"]]
|
|
295
279
|
|
|
296
280
|
|
|
297
281
|
def tool_call_chunk(
|
|
298
282
|
*,
|
|
299
|
-
name:
|
|
300
|
-
args:
|
|
301
|
-
id:
|
|
302
|
-
index:
|
|
283
|
+
name: str | None = None,
|
|
284
|
+
args: str | None = None,
|
|
285
|
+
id: str | None = None,
|
|
286
|
+
index: int | None = None,
|
|
303
287
|
) -> ToolCallChunk:
|
|
304
288
|
"""Create a tool call chunk.
|
|
305
289
|
|
|
@@ -319,10 +303,10 @@ def tool_call_chunk(
|
|
|
319
303
|
|
|
320
304
|
def invalid_tool_call(
|
|
321
305
|
*,
|
|
322
|
-
name:
|
|
323
|
-
args:
|
|
324
|
-
id:
|
|
325
|
-
error:
|
|
306
|
+
name: str | None = None,
|
|
307
|
+
args: str | None = None,
|
|
308
|
+
id: str | None = None,
|
|
309
|
+
error: str | None = None,
|
|
326
310
|
) -> InvalidToolCall:
|
|
327
311
|
"""Create an invalid tool call.
|
|
328
312
|
|