mirror of https://github.com/hwchase17/langchain
Added prompt wrapping for Claude with Bedrock (#11090)
- **Description:** Prompt wrapping requirements have been implemented on the service side of AWS Bedrock for the Anthropic Claude models to provide parity between Anthropic's offering and Bedrock's offering. This overnight change broke most existing implementations of Claude, Bedrock and Langchain. This PR just steals the the Anthropic LLM implementation to enforce alias/role wrapping and implements it in the existing mechanism for building the request body. This has also been tested to fix the chat_model implementation as well. Happy to answer any further questions or make changes where necessary to get things patched and up to PyPi ASAP, TY. - **Issue:** No issue opened at the moment, though will update when these roll in. - **Dependencies:** None --------- Co-authored-by: Harrison Chase <hw.chase.17@gmail.com> Co-authored-by: Bagatur <baskaryan@gmail.com>pull/11147/head
parent
b87cc8b31e
commit
23065f54c0
@ -0,0 +1,252 @@
|
||||
import pytest
|
||||
|
||||
from langchain.llms.bedrock import ALTERNATION_ERROR, _human_assistant_format
|
||||
|
||||
TEST_CASES = {
|
||||
"""Hey""": """
|
||||
|
||||
Human: Hey
|
||||
|
||||
Assistant:""",
|
||||
"""
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant:""": """
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant:""",
|
||||
"""Human: Hello
|
||||
|
||||
Assistant:""": """
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant:""",
|
||||
"""
|
||||
Human: Hello
|
||||
|
||||
Assistant:""": """
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant:""",
|
||||
"""
|
||||
|
||||
Human: Human: Hello
|
||||
|
||||
Assistant:""": (
|
||||
"Error: Prompt must alternate between '\n\nHuman:' and '\n\nAssistant:'."
|
||||
),
|
||||
"""Human: Hello
|
||||
|
||||
Assistant: Hello
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant:""": """
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant: Hello
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant:""",
|
||||
"""
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant: Hello
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant:""": """
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant: Hello
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant:""",
|
||||
"""
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant: Hello
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant: Hello
|
||||
|
||||
Assistant: Hello""": ALTERNATION_ERROR,
|
||||
"""
|
||||
|
||||
Human: Hi.
|
||||
|
||||
Assistant: Hi.
|
||||
|
||||
Human: Hi.
|
||||
|
||||
Human: Hi.
|
||||
|
||||
Assistant:""": ALTERNATION_ERROR,
|
||||
"""
|
||||
Human: Hello""": """
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant:""",
|
||||
"""
|
||||
|
||||
Human: Hello
|
||||
Hello
|
||||
|
||||
Assistant""": """
|
||||
|
||||
Human: Hello
|
||||
Hello
|
||||
|
||||
Assistant
|
||||
|
||||
Assistant:""",
|
||||
"""Hello
|
||||
|
||||
Assistant:""": """
|
||||
|
||||
Human: Hello
|
||||
|
||||
Assistant:""",
|
||||
"""Hello
|
||||
|
||||
Human: Hello
|
||||
|
||||
""": """Hello
|
||||
|
||||
Human: Hello
|
||||
|
||||
|
||||
|
||||
Assistant:""",
|
||||
"""
|
||||
|
||||
Human: Assistant: Hello""": """
|
||||
|
||||
Human:
|
||||
|
||||
Assistant: Hello""",
|
||||
"""
|
||||
|
||||
Human: Human
|
||||
|
||||
Assistant: Assistant
|
||||
|
||||
Human: Assistant
|
||||
|
||||
Assistant: Human""": """
|
||||
|
||||
Human: Human
|
||||
|
||||
Assistant: Assistant
|
||||
|
||||
Human: Assistant
|
||||
|
||||
Assistant: Human""",
|
||||
"""
|
||||
Assistant: Hello there, your name is:
|
||||
|
||||
Human.
|
||||
|
||||
Human: Hello there, your name is:
|
||||
|
||||
Assistant.""": """
|
||||
|
||||
Human:
|
||||
|
||||
Assistant: Hello there, your name is:
|
||||
|
||||
Human.
|
||||
|
||||
Human: Hello there, your name is:
|
||||
|
||||
Assistant.
|
||||
|
||||
Assistant:""",
|
||||
"""
|
||||
|
||||
Human: Human: Hi
|
||||
|
||||
Assistant: Hi""": ALTERNATION_ERROR,
|
||||
"""Human: Hi
|
||||
|
||||
Human: Hi""": ALTERNATION_ERROR,
|
||||
"""
|
||||
|
||||
Assistant: Hi
|
||||
|
||||
Human: Hi""": """
|
||||
|
||||
Human:
|
||||
|
||||
Assistant: Hi
|
||||
|
||||
Human: Hi
|
||||
|
||||
Assistant:""",
|
||||
"""
|
||||
|
||||
Human: Hi
|
||||
|
||||
Assistant: Yo
|
||||
|
||||
Human: Hey
|
||||
|
||||
Assistant: Sup
|
||||
|
||||
Human: Hi
|
||||
|
||||
Assistant: Hi
|
||||
Human: Hi
|
||||
Assistant:""": """
|
||||
|
||||
Human: Hi
|
||||
|
||||
Assistant: Yo
|
||||
|
||||
Human: Hey
|
||||
|
||||
Assistant: Sup
|
||||
|
||||
Human: Hi
|
||||
|
||||
Assistant: Hi
|
||||
|
||||
Human: Hi
|
||||
|
||||
Assistant:""",
|
||||
"""
|
||||
|
||||
Hello.
|
||||
|
||||
Human: Hello.
|
||||
|
||||
Assistant:""": """
|
||||
|
||||
Hello.
|
||||
|
||||
Human: Hello.
|
||||
|
||||
Assistant:""",
|
||||
}
|
||||
|
||||
|
||||
def test__human_assistant_format() -> None:
|
||||
for input_text, expected_output in TEST_CASES.items():
|
||||
if expected_output == ALTERNATION_ERROR:
|
||||
with pytest.raises(ValueError):
|
||||
_human_assistant_format(input_text)
|
||||
else:
|
||||
output = _human_assistant_format(input_text)
|
||||
assert output == expected_output
|
Loading…
Reference in New Issue