diff --git a/examples/quick_start/anthropic_example_chat.py b/examples/quick_start/anthropic_example_chat.py index 5bba83fb0..03dbb0a45 100644 --- a/examples/quick_start/anthropic_example_chat.py +++ b/examples/quick_start/anthropic_example_chat.py @@ -52,7 +52,7 @@ def batch(): if __name__ == "__main__": - sgl.set_default_backend(sgl.Anthropic("claude-2")) + sgl.set_default_backend(sgl.Anthropic("claude-3-haiku-20240307")) # Run a single request print("\n========== single ==========\n") diff --git a/examples/quick_start/anthropic_example_complete.py b/examples/quick_start/anthropic_example_complete.py index 5a28a99c5..3065b2950 100644 --- a/examples/quick_start/anthropic_example_complete.py +++ b/examples/quick_start/anthropic_example_complete.py @@ -19,7 +19,7 @@ def few_shot_qa(s, question): \n\nAssistant: Rome """) s += "\n\nHuman: " + question + "\n" - s += "\n\nAssistant:" + sgl.gen("answer", stop="\n", temperature=0) + s += "\n\nAssistant:" + sgl.gen("answer", stop="\\n", temperature=0) def single(): @@ -52,7 +52,7 @@ def batch(): if __name__ == "__main__": - sgl.set_default_backend(sgl.Anthropic("claude-2")) + sgl.set_default_backend(sgl.Anthropic("claude-3-haiku-20240307")) # Run a single request print("\n========== single ==========\n") diff --git a/python/pyproject.toml b/python/pyproject.toml index 35d82a2d6..2e4ea0dc4 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -22,7 +22,7 @@ srt = ["aiohttp", "fastapi", "psutil", "rpyc", "torch", "uvloop", "uvicorn", "zmq", "vllm>=0.3.3", "interegular", "lark", "numba", "pydantic", "referencing", "diskcache", "cloudpickle", "pillow", "outlines>=0.0.27"] openai = ["openai>=1.0", "numpy"] -anthropic = ["anthropic", "numpy"] +anthropic = ["anthropic>=0.20.0", "numpy"] all = ["sglang[srt]", "sglang[openai]", "sglang[anthropic]"] [project.urls] diff --git a/python/sglang/backend/anthropic.py b/python/sglang/backend/anthropic.py index c561f3b5d..aa03cb5b6 100644 --- a/python/sglang/backend/anthropic.py +++ b/python/sglang/backend/anthropic.py @@ -30,13 +30,17 @@ class Anthropic(BaseBackend): s: StreamExecutor, sampling_params: SglSamplingParams, ): - prompt = s.text_ - ret = anthropic.Anthropic().completions.create( + if s.messages_: + messages = s.messages_ + else: + messages = [{"role": "user", "content": s.text_}] + + ret = anthropic.Anthropic().messages.create( model=self.model_name, - prompt=prompt, + messages=messages, **sampling_params.to_anthropic_kwargs(), ) - comp = ret.completion + comp = ret.content[0].text return comp, {} @@ -45,13 +49,15 @@ class Anthropic(BaseBackend): s: StreamExecutor, sampling_params: SglSamplingParams, ): - prompt = s.text_ - generator = anthropic.Anthropic().completions.create( - model=self.model_name, - prompt=prompt, - stream=True, - **sampling_params.to_anthropic_kwargs(), - ) + if s.messages_: + messages = s.messages_ + else: + messages = [{"role": "user", "content": s.text_}] - for ret in generator: - yield ret.completion, {} + with anthropic.Anthropic().messages.stream( + model=self.model_name, + messages=messages, + **sampling_params.to_anthropic_kwargs(), + ) as stream: + for text in stream.text_stream: + yield text, {} diff --git a/python/sglang/lang/ir.py b/python/sglang/lang/ir.py index 15b06ec69..9895786dc 100644 --- a/python/sglang/lang/ir.py +++ b/python/sglang/lang/ir.py @@ -73,7 +73,7 @@ class SglSamplingParams: "Regular expression is not supported in the Anthropic backend." ) return { - "max_tokens_to_sample": self.max_new_tokens, + "max_tokens": self.max_new_tokens, "stop_sequences": ( self.stop if isinstance(self.stop, (list, tuple)) else [self.stop] ), diff --git a/test/lang/test_anthropic_backend.py b/test/lang/test_anthropic_backend.py index 988007289..b0da88838 100644 --- a/test/lang/test_anthropic_backend.py +++ b/test/lang/test_anthropic_backend.py @@ -14,7 +14,7 @@ class TestAnthropicBackend(unittest.TestCase): cls = type(self) if cls.backend is None: - cls.backend = Anthropic("claude-2") + cls.backend = Anthropic("claude-3-haiku-20240307") set_default_backend(cls.backend) def test_mt_bench(self):