Bagatur
5fd1e67808
core[minor], integrations...[patch]: Support ToolCall as Tool input and ToolMessage as Tool output ( #24038 )
...
Changes:
- ToolCall, InvalidToolCall and ToolCallChunk can all accept a "type"
parameter now
- LLM integration packages add "type" to all the above
- Tool supports ToolCall inputs that have "type" specified
- Tool outputs ToolMessage when a ToolCall is passed as input
- Tools can separately specify ToolMessage.content and
ToolMessage.raw_output
- Tools emit events for validation errors (using on_tool_error and
on_tool_end)
Example:
```python
@tool("structured_api", response_format="content_and_raw_output")
def _mock_structured_tool_with_raw_output(
arg1: int, arg2: bool, arg3: Optional[dict] = None
) -> Tuple[str, dict]:
"""A Structured Tool"""
return f"{arg1} {arg2}", {"arg1": arg1, "arg2": arg2, "arg3": arg3}
def test_tool_call_input_tool_message_with_raw_output() -> None:
tool_call: Dict = {
"name": "structured_api",
"args": {"arg1": 1, "arg2": True, "arg3": {"img": "base64string..."}},
"id": "123",
"type": "tool_call",
}
expected = ToolMessage("1 True", raw_output=tool_call["args"], tool_call_id="123")
tool = _mock_structured_tool_with_raw_output
actual = tool.invoke(tool_call)
assert actual == expected
tool_call.pop("type")
with pytest.raises(ValidationError):
tool.invoke(tool_call)
actual_content = tool.invoke(tool_call["args"])
assert actual_content == expected.content
```
---------
Co-authored-by: Erick Friis <erick@langchain.dev>
2024-07-11 14:54:02 -07:00
Bagatur
7a6c06cadd
anthropic[patch]: tool output parser fix ( #23647 )
2024-07-02 16:33:22 -04:00
Bagatur
d96f67b06f
standard-tests[patch]: Update chat model standard tests ( #22378 )
...
- Refactor standard test classes to make them easier to configure
- Update openai to support stop_sequences init param
- Update groq to support stop_sequences init param
- Update fireworks to support max_retries init param
- Update ChatModel.bind_tools to type tool_choice
- Update groq to handle tool_choice="any". **this may be controversial**
---------
Co-authored-by: Chester Curme <chester.curme@gmail.com>
2024-06-17 13:37:41 -07:00
ccurme
73c76b9628
anthropic[patch]: always add tool_result type to ToolMessage content ( #22721 )
...
Anthropic tool results can contain image data, which are typically
represented with content blocks having `"type": "image"`. Currently,
these content blocks are passed as-is as human/user messages to
Anthropic, which raises BadRequestError as it expects a tool_result
block to follow a tool_use.
Here we update ChatAnthropic to nest the content blocks inside a
tool_result content block.
Example:
```python
import base64
import httpx
from langchain_anthropic import ChatAnthropic
from langchain_core.messages import AIMessage, HumanMessage, ToolMessage
from langchain_core.pydantic_v1 import BaseModel, Field
# Fetch image
image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg "
image_data = base64.b64encode(httpx.get(image_url).content).decode("utf-8")
class FetchImage(BaseModel):
should_fetch: bool = Field(..., description="Whether an image is requested.")
llm = ChatAnthropic(model="claude-3-sonnet-20240229").bind_tools([FetchImage])
messages = [
HumanMessage(content="Could you summon a beautiful image please?"),
AIMessage(
content=[
{
"type": "tool_use",
"id": "toolu_01Rn6Qvj5m7955x9m9Pfxbcx",
"name": "FetchImage",
"input": {"should_fetch": True},
},
],
tool_calls=[
{
"name": "FetchImage",
"args": {"should_fetch": True},
"id": "toolu_01Rn6Qvj5m7955x9m9Pfxbcx",
},
],
),
ToolMessage(
name="FetchImage",
content=[
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": image_data,
},
},
],
tool_call_id="toolu_01Rn6Qvj5m7955x9m9Pfxbcx",
),
]
llm.invoke(messages)
```
Trace:
https://smith.langchain.com/public/d27e4fc1-a96d-41e1-9f52-54f5004122db/r
2024-06-13 20:14:23 -07:00
Bagatur
cb183a9bf1
docs: update anthropic chat model ( #22483 )
...
Related to #22296
And update anthropic to accept base_url
2024-06-04 12:42:06 -07:00
Bagatur
678a19a5f7
infra: bump anthropic mypy 1 ( #22373 )
2024-06-03 08:21:55 -07:00
Bagatur
a8098f5ddb
anthropic[patch]: Release 0.1.15, fix sdk tools break ( #22369 )
2024-05-31 12:10:22 -07:00
Bagatur
baa3c975cb
anthropic[patch]: allow tool call mutation ( #22130 )
...
If tool_use blocks and tool_calls with overlapping IDs are present,
prefer the values of the tool_calls. Allows for mutating AIMessages just
via tool_calls.
2024-05-24 08:18:14 -07:00
Eugene Yurtsev
2d693c484e
docs: fix some spelling mistakes caught by newest version of code spell ( #22090 )
...
Going to merge this even though it doesn't pass all tests, and open a
separate PR for the remaining spelling mistakes.
2024-05-23 16:59:11 -04:00
ccurme
fbfed65fb1
core, partners: add token usage attribute to AIMessage ( #21944 )
...
```python
class UsageMetadata(TypedDict):
"""Usage metadata for a message, such as token counts.
Attributes:
input_tokens: (int) count of input (or prompt) tokens
output_tokens: (int) count of output (or completion) tokens
total_tokens: (int) total token count
"""
input_tokens: int
output_tokens: int
total_tokens: int
```
```python
class AIMessage(BaseMessage):
...
usage_metadata: Optional[UsageMetadata] = None
"""If provided, token usage information associated with the message."""
...
```
2024-05-23 14:21:58 -04:00
Bagatur
6416d16d39
anthropic[patch]: Release 0.1.13, tool_choice support ( #21773 )
2024-05-16 17:56:29 +00:00
aditya thomas
b868c78a12
partners[anthropic]: update unit test for key passed in from the environment ( #21290 )
...
**Description:** Update unit test for ChatAnthropic
**Issue:** Test for key passed in from the environment should not have
the key initialized in the constructor
**Dependencies:** None
2024-05-05 16:19:10 -04:00
aditya thomas
8b59bddc03
anthropic[patch]: add tests for secret_str for api key ( #20986 )
...
**Description:** Add tests to check API keys are masked
**Issue:** Resolves
https://github.com/langchain-ai/langchain/issues/12165 for Anthropic
models
**Dependencies:** None
2024-04-29 10:39:14 -04:00
Bagatur
54e9271504
anthropic[patch]: fix msg mutation ( #20572 )
2024-04-17 15:47:19 -07:00
Bagatur
96d8769eae
anthropic[patch]: release 0.1.9, use tool calls if content is empty ( #20535 )
2024-04-16 15:27:29 -07:00
Erick Friis
e6806a08d4
multiple: standard chat model tests ( #20359 )
2024-04-11 18:23:13 -07:00
Bagatur
a27d88f12a
anthropic[patch]: standardize init args ( #20161 )
...
Related to #20085
2024-04-08 12:09:06 -05:00
Bagatur
209de0a561
anthropic[minor]: tool use ( #20016 )
2024-04-04 13:22:48 -07:00
Bagatur
b15c7fdde6
anthropic[patch]: fix response metadata type ( #19683 )
2024-03-27 23:16:26 -07:00
Erick Friis
3b5bdbfee8
anthropic[minor]: package move ( #17974 )
2024-02-25 21:57:26 -08:00
Bagatur
5c2538b9f7
anthropic[patch]: allow pop by field name ( #16544 )
...
allow `ChatAnthropicMessages(model=...)`
2024-01-24 15:48:31 -07:00
Erick Friis
8a3360edf6
anthropic: beta messages integration ( #14928 )
2023-12-19 18:55:19 -08:00