diff --git a/.circleci/config.templ.yml b/.circleci/config.templ.yml index a02d01e8665..dfe0f7c5746 100644 --- a/.circleci/config.templ.yml +++ b/.circleci/config.templ.yml @@ -1299,6 +1299,14 @@ jobs: pattern: "langchain" snapshot: true + anthropic: + <<: *machine_executor + parallelism: 3 + steps: + - run_test: + pattern: "anthropic" + snapshot: true + logbook: <<: *machine_executor steps: diff --git a/.riot/requirements/1e0e8e5.txt b/.riot/requirements/1e0e8e5.txt new file mode 100644 index 00000000000..3f78bcfab42 --- /dev/null +++ b/.riot/requirements/1e0e8e5.txt @@ -0,0 +1,48 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1e0e8e5.in +# +annotated-types==0.7.0 +anthropic==0.26.1 +anyio==4.4.0 +attrs==23.2.0 +certifi==2024.2.2 +charset-normalizer==3.3.2 +coverage[toml]==7.5.3 +distro==1.9.0 +exceptiongroup==1.2.1 +filelock==3.14.0 +fsspec==2024.5.0 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +huggingface-hub==0.23.2 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jiter==0.4.0 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.0 +pluggy==1.5.0 +pydantic==2.7.2 +pydantic-core==2.18.3 +pytest==8.2.1 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pyyaml==6.0.1 +requests==2.32.3 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tokenizers==0.19.1 +tomli==2.0.1 +tqdm==4.66.4 +typing-extensions==4.12.0 +urllib3==2.2.1 +vcrpy==6.0.1 +wrapt==1.16.0 +yarl==1.9.4 diff --git a/ddtrace/_monkey.py b/ddtrace/_monkey.py index 9c6947d116f..9868767f037 100644 --- a/ddtrace/_monkey.py +++ b/ddtrace/_monkey.py @@ -91,6 +91,7 @@ "tornado": False, "openai": True, "langchain": True, + "anthropic": True, "subprocess": True, "unittest": True, "coverage": False, diff --git a/ddtrace/contrib/anthropic/__init__.py b/ddtrace/contrib/anthropic/__init__.py new file mode 100644 index 00000000000..aeff9842012 --- /dev/null +++ b/ddtrace/contrib/anthropic/__init__.py @@ -0,0 +1,17 @@ +""" +Do later. +""" # noqa: E501 +from ...internal.utils.importlib import require_modules + + +required_modules = ["anthropic"] + +with require_modules(required_modules) as missing_modules: + if not missing_modules: + from . import patch as _patch + + patch = _patch.patch + unpatch = _patch.unpatch + get_version = _patch.get_version + + __all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/anthropic/patch.py b/ddtrace/contrib/anthropic/patch.py new file mode 100644 index 00000000000..dae24ffec14 --- /dev/null +++ b/ddtrace/contrib/anthropic/patch.py @@ -0,0 +1,174 @@ +import json +import os +import sys +from typing import Any + +import anthropic + +from ddtrace import config +from ddtrace.contrib.trace_utils import unwrap +from ddtrace.contrib.trace_utils import with_traced_module +from ddtrace.contrib.trace_utils import wrap +from ddtrace.internal.logger import get_logger +from ddtrace.internal.utils import get_argument_value +from ddtrace.llmobs._integrations import AnthropicIntegration +from ddtrace.pin import Pin + +from .utils import _get_attr +from .utils import handle_streamed_response + + +log = get_logger(__name__) + + +def get_version(): + # type: () -> str + return getattr(anthropic, "__version__", "") + + +config._add( + "anthropic", + { + "span_prompt_completion_sample_rate": float(os.getenv("DD_ANTHROPIC_SPAN_PROMPT_COMPLETION_SAMPLE_RATE", 1.0)), + "span_char_limit": int(os.getenv("DD_ANTHROPIC_SPAN_CHAR_LIMIT", 128)), + }, +) + + +def _extract_api_key(instance: Any) -> str: + """ + Extract and format LLM-provider API key from instance. + """ + client = getattr(instance, "_client", "") + if client: + return getattr(client, "api_key", None) + return None + + +@with_traced_module +def traced_chat_model_generate(anthropic, pin, func, instance, args, kwargs): + chat_messages = get_argument_value(args, kwargs, 0, "messages") + integration = anthropic._datadog_integration + is_stream = False + + operation_name = "stream" if "stream" in kwargs and kwargs["stream"] is True else func.__name__ + + span = integration.trace( + pin, + "%s.%s.%s" % (instance.__module__, instance.__class__.__name__, operation_name), + submit_to_llmobs=True, + interface_type="chat_model", + provider="anthropic", + model=kwargs.get("model", ""), + api_key=_extract_api_key(instance), + ) + + chat_completions = None + try: + for message_idx, message in enumerate(chat_messages): + if isinstance(message, dict): + if isinstance(message.get("content", None), str): + if integration.is_pc_sampled_span(span) and message.get("content", "") != "": + span.set_tag_str( + "anthropic.request.messages.%d.content.0.text" % (message_idx), + integration.trunc(message.get("content", "")), + ) + span.set_tag_str( + "anthropic.request.messages.%d.content.0.type" % (message_idx), + "text", + ) + elif isinstance(message.get("content", None), list): + for block_idx, block in enumerate(message.get("content", [])): + if integration.is_pc_sampled_span(span): + if block.get("type", None) == "text" and block.get("text", "") != "": + span.set_tag_str( + "anthropic.request.messages.%d.content.%d.text" % (message_idx, block_idx), + integration.trunc(str(block.get("text", ""))), + ) + elif block.get("type", None) == "image": + span.set_tag_str( + "anthropic.request.messages.%d.content.%d.text" % (message_idx, block_idx), + "([IMAGE DETECTED])", + ) + + span.set_tag_str( + "anthropic.request.messages.%d.content.%d.type" % (message_idx, block_idx), + block.get("type", "text"), + ) + span.set_tag_str( + "anthropic.request.messages.%d.role" % (message_idx), + message.get("role", ""), + ) + params_to_tag = {k: v for k, v in kwargs.items() if k != "messages"} + span.set_tag_str("anthropic.request.parameters", json.dumps(params_to_tag)) + + chat_completions = func(*args, **kwargs) + + if isinstance(chat_completions, anthropic.Stream) or isinstance( + chat_completions, anthropic.lib.streaming._messages.MessageStreamManager + ): + is_stream = True + return handle_streamed_response(integration, chat_completions, args, kwargs, span) + else: + handle_non_streamed_response(integration, chat_completions, args, kwargs, span) + except Exception: + span.set_exc_info(*sys.exc_info()) + if integration.is_pc_sampled_llmobs(span): + integration.llmobs_set_tags(span=span, resp=None, args=args, kwargs=kwargs, err=bool(span.error)) + span.finish() + raise + finally: + # only want to perform this for non-streamed responses, for streamed responses this is done once the generator + # iterator is exhausted + if not is_stream: + if integration.is_pc_sampled_llmobs(span): + integration.llmobs_set_tags(span=span, resp=chat_completions, args=args, kwargs=kwargs) + span.finish() + return chat_completions + + +def handle_non_streamed_response(integration, chat_completions, args, kwargs, span): + for idx, chat_completion in enumerate(chat_completions.content): + if integration.is_pc_sampled_span(span) and getattr(chat_completion, "text", "") != "": + span.set_tag_str( + "anthropic.response.completions.content.%d.text" % (idx), + integration.trunc(str(getattr(chat_completion, "text", ""))), + ) + span.set_tag_str( + "anthropic.response.completions.content.%d.type" % (idx), + chat_completion.type, + ) + + # set message level tags + if getattr(chat_completions, "stop_reason", None) is not None: + span.set_tag_str("anthropic.response.completions.finish_reason", chat_completions.stop_reason) + span.set_tag_str("anthropic.response.completions.role", chat_completions.role) + + usage = _get_attr(chat_completions, "usage", {}) + integration.record_usage(span, usage) + + +def patch(): + if getattr(anthropic, "_datadog_patch", False): + return + + anthropic._datadog_patch = True + + Pin().onto(anthropic) + integration = AnthropicIntegration(integration_config=config.anthropic) + anthropic._datadog_integration = integration + + wrap("anthropic", "resources.messages.Messages.create", traced_chat_model_generate(anthropic)) + wrap("anthropic", "resources.messages.Messages.stream", traced_chat_model_generate(anthropic)) + + +def unpatch(): + if not getattr(anthropic, "_datadog_patch", False): + return + + anthropic._datadog_patch = False + + unwrap(anthropic.resources.messages.Messages, "create") + unwrap(anthropic.resources.messages.Messages, "stream") + + delattr(anthropic, "_datadog_integration") diff --git a/ddtrace/contrib/anthropic/utils.py b/ddtrace/contrib/anthropic/utils.py new file mode 100644 index 00000000000..c808b80a86f --- /dev/null +++ b/ddtrace/contrib/anthropic/utils.py @@ -0,0 +1,260 @@ +import sys +from typing import Dict +from typing import Tuple + +from ddtrace.internal.logger import get_logger +from ddtrace.vendor import wrapt + + +log = get_logger(__name__) + + +def handle_streamed_response(integration, resp, args, kwargs, span): + if _is_async_stream(resp): + pass + elif _is_stream(resp): + return TracedAnthropicStream(resp, integration, span, args, kwargs) + elif _is_stream_manager(resp): + return TracedAnthropicStreamManager(resp, integration, span, args, kwargs) + + +class BaseTracedAnthropicStream(wrapt.ObjectProxy): + def __init__(self, wrapped, integration, span, args, kwargs): + super().__init__(wrapped) + n = kwargs.get("n", 1) or 1 + self._dd_span = span + self._streamed_chunks = [[] for _ in range(n)] + self._dd_integration = integration + self._kwargs = kwargs + self._args = args + + +class TracedAnthropicStream(BaseTracedAnthropicStream): + def __enter__(self): + self.__wrapped__.__enter__() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.__wrapped__.__exit__(exc_type, exc_val, exc_tb) + + def __iter__(self): + return self + + def __next__(self): + try: + chunk = self.__wrapped__.__next__() + self._streamed_chunks.append(chunk) + return chunk + except StopIteration: + _process_finished_stream( + self._dd_integration, self._dd_span, self._args, self._kwargs, self._streamed_chunks + ) + self._dd_span.finish() + raise + except Exception: + self._dd_span.set_exc_info(*sys.exc_info()) + self._dd_span.finish() + raise + + def _text_stream(self): + for chunk in self: + if chunk.type == "content_block_delta" and chunk.delta.type == "text_delta": + yield chunk.delta.text + + +class TracedAnthropicStreamManager(BaseTracedAnthropicStream): + def __enter__(self): + stream = self.__wrapped__.__enter__() + traced_stream = TracedAnthropicStream( + stream, + self._dd_integration, + self._dd_span, + self._args, + self._kwargs, + ) + traced_stream.text_stream = traced_stream._text_stream() + return traced_stream + + +def _process_finished_stream(integration, span, args, kwargs, streamed_chunks): + # builds the response message given streamed chunks and sets according span tags + resp_message = {} + try: + resp_message = _construct_message(streamed_chunks) + + if integration.is_pc_sampled_span(span): + _tag_streamed_chat_completion_response(integration, span, resp_message) + if integration.is_pc_sampled_llmobs(span): + integration.llmobs_set_tags( + span=span, + resp=resp_message, + args=args, + kwargs=kwargs, + ) + except Exception: + log.warning("Error processing streamed completion/chat response.", exc_info=True) + + +def _construct_message(streamed_chunks): + """Iteratively build up a response message from streamed chunks. + + The resulting message dictionary is of form: + {"content": [{"type": [TYPE], "text": "[TEXT]"}], "role": "...", "finish_reason": "...", "usage": ...} + """ + message = {"content": []} + for chunk in streamed_chunks: + message = _extract_from_chunk(chunk, message) + + if "finish_reason" in message: + return message + return message + + +def _extract_from_chunk(chunk, message={}) -> Tuple[Dict[str, str], bool]: + """Constructs a chat message dictionary from streamed chunks given chunk type""" + TRANSFORMATIONS_BY_BLOCK_TYPE = { + "message_start": _on_message_start_chunk, + "content_block_start": _on_content_block_start_chunk, + "content_block_delta": _on_content_block_delta_chunk, + "message_delta": _on_message_delta_chunk, + } + chunk_type = getattr(chunk, "type", "") + transformation = TRANSFORMATIONS_BY_BLOCK_TYPE.get(chunk_type) + if transformation is not None: + message = transformation(chunk, message) + + return message + + +def _on_message_start_chunk(chunk, message): + # this is the starting chunk of the message + if getattr(chunk, "type", "") != "message_start": + return message + + chunk_message = getattr(chunk, "message", "") + if chunk_message: + content_text = "" + contents = getattr(chunk.message, "content", []) + for content in contents: + if content.type == "text": + content_text += content.text + content_type = "text" + elif content.type == "image": + content_text = "([IMAGE DETECTED])" + content_type = "image" + message["content"].append({"text": content_text, "type": content_type}) + + chunk_role = getattr(chunk_message, "role", "") + chunk_usage = getattr(chunk_message, "usage", "") + chunk_finish_reason = getattr(chunk_message, "stop_reason", "") + if chunk_role: + message["role"] = chunk_role + if chunk_usage: + message["usage"] = {} + message["usage"]["input_tokens"] = getattr(chunk_usage, "input_tokens", 0) + message["usage"]["output_tokens"] = getattr(chunk_usage, "output_tokens", 0) + if chunk_finish_reason: + message["finish_reason"] = chunk_finish_reason + return message + + +def _on_content_block_start_chunk(chunk, message): + # this is the start to a message.content block (possibly 1 of several content blocks) + if getattr(chunk, "type", "") != "content_block_start": + return message + + message["content"].append({"type": "text", "text": ""}) + return message + + +def _on_content_block_delta_chunk(chunk, message): + # delta events contain new content for the current message.content block + if getattr(chunk, "type", "") != "content_block_delta": + return message + + delta_block = getattr(chunk, "delta", "") + chunk_content = getattr(delta_block, "text", "") + if chunk_content: + message["content"][-1]["text"] += chunk_content + return message + + +def _on_message_delta_chunk(chunk, message): + # message delta events signal the end of the message + if getattr(chunk, "type", "") != "message_delta": + return message + + delta_block = getattr(chunk, "delta", "") + chunk_finish_reason = getattr(delta_block, "stop_reason", "") + if chunk_finish_reason: + message["finish_reason"] = chunk_finish_reason + message["content"][-1]["text"] = message["content"][-1]["text"].strip() + + chunk_usage = getattr(chunk, "usage", {}) + if chunk_usage: + message_usage = message.get("usage", {"output_tokens": 0, "input_tokens": 0}) + message_usage["output_tokens"] += getattr(chunk_usage, "output_tokens", 0) + message_usage["input_tokens"] += getattr(chunk_usage, "input_tokens", 0) + message["usage"] = message_usage + + return message + + +# To-Do: Handle error blocks appropriately +# def _on_error_chunk(chunk, message): +# # this is the start to a message.content block (possibly 1 of several content blocks) +# if getattr(chunk, "type", "") != "error": +# return message + +# message["content"].append({"type": "text", "text": ""}) +# return message + + +def _tag_streamed_chat_completion_response(integration, span, message): + """Tagging logic for streamed chat completions.""" + if message is None: + return + for idx, block in enumerate(message["content"]): + span.set_tag_str("anthropic.response.completions.content.%d.type" % idx, str(integration.trunc(block["type"]))) + span.set_tag_str("anthropic.response.completions.content.%d.text" % idx, str(integration.trunc(block["text"]))) + span.set_tag_str("anthropic.response.completions.role", str(message["role"])) + if message.get("finish_reason") is not None: + span.set_tag_str("anthropic.response.completions.finish_reason", str(message["finish_reason"])) + + usage = _get_attr(message, "usage", {}) + integration.record_usage(span, usage) + + +def _is_stream(resp): + # type: (...) -> bool + import anthropic + + if hasattr(anthropic, "Stream") and isinstance(resp, anthropic.Stream): + return True + return False + + +def _is_async_stream(resp): + # type: (...) -> bool + import anthropic + + if hasattr(anthropic, "AsyncStream") and isinstance(resp, anthropic.AsyncStream): + return True + return False + + +def _is_stream_manager(resp): + # type: (...) -> bool + import anthropic + + if hasattr(anthropic, "MessageStreamManager") and isinstance(resp, anthropic.MessageStreamManager): + return True + return False + + +def _get_attr(o, attr, default): + # Since our response may be a dict or object, convenience method + if isinstance(o, dict): + return o.get(attr, default) + else: + return getattr(o, attr, default) diff --git a/ddtrace/llmobs/_integrations/__init__.py b/ddtrace/llmobs/_integrations/__init__.py index 7e96ff6648e..465cab1bb3d 100644 --- a/ddtrace/llmobs/_integrations/__init__.py +++ b/ddtrace/llmobs/_integrations/__init__.py @@ -1,7 +1,14 @@ +from .anthropic import AnthropicIntegration from .base import BaseLLMIntegration from .bedrock import BedrockIntegration from .langchain import LangChainIntegration from .openai import OpenAIIntegration -__all__ = ["BaseLLMIntegration", "BedrockIntegration", "LangChainIntegration", "OpenAIIntegration"] +__all__ = [ + "AnthropicIntegration", + "BaseLLMIntegration", + "BedrockIntegration", + "LangChainIntegration", + "OpenAIIntegration", +] diff --git a/ddtrace/llmobs/_integrations/anthropic.py b/ddtrace/llmobs/_integrations/anthropic.py new file mode 100644 index 00000000000..4da48c48b86 --- /dev/null +++ b/ddtrace/llmobs/_integrations/anthropic.py @@ -0,0 +1,147 @@ +import json +from typing import Any +from typing import Dict +from typing import Iterable +from typing import List +from typing import Optional + +from ddtrace._trace.span import Span +from ddtrace.contrib.anthropic.utils import _get_attr +from ddtrace.internal.logger import get_logger +from ddtrace.internal.utils import get_argument_value +from ddtrace.llmobs._constants import INPUT_MESSAGES +from ddtrace.llmobs._constants import METADATA +from ddtrace.llmobs._constants import METRICS +from ddtrace.llmobs._constants import MODEL_NAME +from ddtrace.llmobs._constants import OUTPUT_MESSAGES +from ddtrace.llmobs._constants import SPAN_KIND + +from .base import BaseLLMIntegration + + +log = get_logger(__name__) + + +API_KEY = "anthropic.request.api_key" +MODEL = "anthropic.request.model" + + +class AnthropicIntegration(BaseLLMIntegration): + _integration_name = "anthropic" + + def llmobs_set_tags( + self, + resp: Any, + span: Span, + args: List[Any], + kwargs: Dict[str, Any], + err: Optional[Any] = None, + ) -> None: + """Extract prompt/response tags from a completion and set them as temporary "_ml_obs.*" tags.""" + # if not self.llmobs_enabled: + # return + parameters = { + "temperature": float(span.get_tag("anthropic.request.parameters.temperature") or 1.0), + "max_tokens": int(span.get_tag("anthropic.request.parameters.max_tokens") or 0), + } + messages = get_argument_value(args, kwargs, 0, "messages") + input_messages = self._extract_input_message(messages) + + span.set_tag_str(SPAN_KIND, "llm") + span.set_tag_str(MODEL_NAME, span.get_tag("anthropic.request.model") or "") + span.set_tag_str(INPUT_MESSAGES, json.dumps(input_messages)) + span.set_tag_str(METADATA, json.dumps(parameters)) + if err or resp is None: + span.set_tag_str(OUTPUT_MESSAGES, json.dumps([{"content": ""}])) + else: + output_messages = self._extract_output_message(resp) + span.set_tag_str(OUTPUT_MESSAGES, json.dumps(output_messages)) + + span.set_tag_str(METRICS, json.dumps(_get_llmobs_metrics_tags(span))) + + def _set_base_span_tags( + self, + span: Span, + model: Optional[str] = None, + api_key: Optional[str] = None, + **kwargs: Dict[str, Any], + ) -> None: + """Set base level tags that should be present on all Anthropic spans (if they are not None).""" + if model is not None: + span.set_tag_str(MODEL, model) + if api_key is not None: + if len(api_key) >= 4: + span.set_tag_str(API_KEY, f"...{str(api_key[-4:])}") + else: + span.set_tag_str(API_KEY, api_key) + + def _extract_input_message(self, messages): + """Extract input messages from the stored prompt. + Anthropic allows for messages and multiple texts in a message, which requires some special casing. + """ + if not isinstance(messages, Iterable): + log.warning("Anthropic input must be a list of messages.") + + input_messages = [] + for message in messages: + if not isinstance(message, dict): + log.warning("Anthropic message input must be a list of message param dicts.") + continue + + content = message.get("content", None) + role = message.get("role", None) + + if role is None or content is None: + log.warning("Anthropic input message must have content and role.") + + if isinstance(content, str): + input_messages.append({"content": content, "role": role}) + + elif isinstance(content, list): + for block in content: + if block.get("type") == "text": + input_messages.append({"content": block.get("text", ""), "role": role}) + elif block.get("type") == "image": + # Store a placeholder for potentially enormous binary image data. + input_messages.append({"content": "([IMAGE DETECTED])", "role": role}) + else: + input_messages.append({"content": str(block), "role": role}) + + return input_messages + + def _extract_output_message(self, response): + """Extract output messages from the stored response.""" + output_messages = [] + content = _get_attr(response, "content", None) + role = _get_attr(response, "role", "") + + if isinstance(content, str): + return [{"content": self.trunc(content), "role": role}] + + elif isinstance(content, list): + for completion in content: + text = _get_attr(completion, "text", None) + if isinstance(text, str): + output_messages.append({"content": self.trunc(text), "role": role}) + return output_messages + + def record_usage(self, span: Span, usage: Dict[str, Any]) -> None: + if not usage: + return + for token_type in ("input", "output"): + num_tokens = _get_attr(usage, "%s_tokens" % token_type, None) + if num_tokens is None: + continue + span.set_metric("anthropic.response.usage.%s_tokens" % token_type, num_tokens) + + if "input" in usage and "output" in usage: + total_tokens = usage["output"] + usage["input"] + span.set_metric("anthropic.response.usage.total_tokens", total_tokens) + + +def _get_llmobs_metrics_tags(span): + return { + "input_tokens": span.get_metric("anthropic.response.usage.input_tokens"), + "output_tokens": span.get_metric("anthropic.response.usage.output_tokens"), + "total_tokens": span.get_metric("anthropic.response.usage.total_tokens"), + } diff --git a/riotfile.py b/riotfile.py index dcdffe51162..817122169a3 100644 --- a/riotfile.py +++ b/riotfile.py @@ -2515,6 +2515,16 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): ), ], ), + Venv( + name="anthropic", + command="pytest {cmdargs} tests/contrib/anthropic", + pys=select_pys(min_version="3.7", max_version="3.11"), + pkgs={ + "pytest-asyncio": latest, + "vcrpy": latest, + "anthropic": latest, + }, + ), Venv( name="logbook", pys=select_pys(), diff --git a/tests/.suitespec.json b/tests/.suitespec.json index 2637c4d9b3b..f38cecfebf2 100644 --- a/tests/.suitespec.json +++ b/tests/.suitespec.json @@ -246,6 +246,9 @@ "langchain": [ "ddtrace/contrib/langchain/*" ], + "anthropic": [ + "ddtrace/contrib/anthropic/*" + ], "subprocess": [ "ddtrace/contrib/subprocess/*" ], @@ -1378,6 +1381,17 @@ "tests/contrib/langchain/*", "tests/snapshots/tests.contrib.{suite}.*" ], + "anthropic": [ + "@bootstrap", + "@core", + "@tracing", + "@contrib", + "@anthropic", + "@requests", + "@llmobs", + "tests/contrib/anthropic/*", + "tests/snapshots/tests.contrib.anthropic.*" + ], "runtime": [ "@core", "@runtime", diff --git a/tests/contrib/anthropic/__init__.py b/tests/contrib/anthropic/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/contrib/anthropic/cassettes/anthropic_completion_error.yaml b/tests/contrib/anthropic/cassettes/anthropic_completion_error.yaml new file mode 100644 index 00000000000..8ead2fb5244 --- /dev/null +++ b/tests/contrib/anthropic/cassettes/anthropic_completion_error.yaml @@ -0,0 +1,67 @@ +interactions: +- request: + body: '{"max_tokens": 1024, "messages": ["Invalid content"], "model": "claude-3-opus-20240229"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + anthropic-version: + - '2023-06-01' + connection: + - keep-alive + content-length: + - '88' + content-type: + - application/json + host: + - api.anthropic.com + user-agent: + - Anthropic/Python 0.26.1 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.26.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.10.13 + method: POST + uri: https://api.anthropic.com/v1/messages + response: + body: + string: '{"type":"error","error":{"type":"invalid_request_error","message":"messages.0: + Input does not match the expected shape."}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 88c85bd75e437274-EWR + Connection: + - keep-alive + Content-Length: + - '122' + Content-Type: + - application/json + Date: + - Fri, 31 May 2024 16:32:14 GMT + Server: + - cloudflare + request-id: + - req_01N7iW6qh7wHr9je4z3FDn2n + via: + - 1.1 google + x-cloud-trace-context: + - cf561ed8cbadcfc1748718321572db36 + x-should-retry: + - 'false' + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/contrib/anthropic/cassettes/anthropic_completion_sync.yaml b/tests/contrib/anthropic/cassettes/anthropic_completion_sync.yaml new file mode 100644 index 00000000000..1f8d5f0500b --- /dev/null +++ b/tests/contrib/anthropic/cassettes/anthropic_completion_sync.yaml @@ -0,0 +1,95 @@ +interactions: +- request: + body: '{"max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": + "text", "text": "Can you explain what Descartes meant by ''I think, therefore + I am''?"}]}], "model": "claude-3-opus-20240229"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + anthropic-version: + - '2023-06-01' + connection: + - keep-alive + content-length: + - '196' + content-type: + - application/json + host: + - api.anthropic.com + user-agent: + - Anthropic/Python 0.26.1 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.26.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.10.13 + method: POST + uri: https://api.anthropic.com/v1/messages + response: + body: + string: !!binary | + H4sIAAAAAAAAA3xU224cNwz9FUIvaYHxwlkHNbqPberaRQoURZAC6RaGVuKsVGvEiUjtemP4g/od + /bGAmr0Bbvo0wIg8PDw85JOJ3izMwOv7y9e/ucz05u/rYfdhc/PLx3efw/Vt+MF0RnYjahQy2zWa + zhRK+sMyRxabxXRmII/JLIxLtnq8uLqgsfLF/HL+5nI+/950xlEWzGIWfz4dAAUfNbV9FuZ9QBhD + sYywNHcgIeaHDiRgwZ4Kwh3YYWkgMliQYjMnK5EyUK9B8M5KzCeAH2kdhTrAsibgOnRLA9sQXYCt + ZXAUM3pY7VrqTcHsAowhJmIaAxb4HfO//8BbZGeLIEPMECLDlsoDLM3byI5qYQTKDeFXlEB+aeCb + 199dXX87g/cazWIFB8yipDWsp5r9kfUR/dWp9A5s9lOPjkrGwkIZNfoPZMGSz0Jny7zMJ4raF6Mt + LsS8hp4K2AyxFOyr2FVCkFIlgAQr4KgmD4xlg2C12BmzlpkSkEoPD5m2Cf0aZ3CLgMOYaIceLAyt + ZWXGOxYcrEQHnupKOvhUkRVLieAGy04ap4CwwhRxgx6EYNUoYQcxu1S9RqhI+BhZMDs8TBYftXGb + VP3km0C4wWkgtM2wIj9pcUtbrdadza2gTfGz1tO2m5maUCrqkdSkRiaZ+C+mWVknU1aYUpohY17P + 4CetHnt9aAnoz7vExNh8C/oPFIb6KVCfqRyRYCy0OXAL+6T2qE0MlWUSYwZ3eT+OLRXPU+Ae+AgW + hTH16p2xEPX6Rhlf8UnQJtJNoUGTDtq0oZ9L5qiN40yz/1JrheCwiI3NyqrPYRyn+TVnHfmtsInX + NmOFzg7YsFfoC7kHqCPl/YaeitSYfAM+uj46m/aOm5zAau7I4aV3JsUab+6AqwvK6GeaLPTSWU2e + u6zXYrBl1/3vGcLs7Mg1WZXsbJM3Ebcn4V7MaLoDA7FArxun18Gmr05sz7ShaW7b4JfH5Gsra57/ + 6gwLjfcFLVM2C4PZ30st2ewfGD9VrWQWuabUmdpO/OLJxDxWuRd6wMxmMb/uDFU5/3V1efX8/AUA + AP//AwAfgEAQQQYAAA== + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 88c85b052be7428b-EWR + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Fri, 31 May 2024 16:31:57 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + anthropic-ratelimit-requests-limit: + - '5' + anthropic-ratelimit-requests-remaining: + - '5' + anthropic-ratelimit-requests-reset: + - '2024-05-31T16:32:57Z' + anthropic-ratelimit-tokens-limit: + - '10000' + anthropic-ratelimit-tokens-remaining: + - '10000' + anthropic-ratelimit-tokens-reset: + - '2024-05-31T16:32:57Z' + request-id: + - req_01Ybd82xxyNova6PBsMeHobV + via: + - 1.1 google + x-cloud-trace-context: + - 1ba1eaa11fc86ede89ae23d3ae4aefe1 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/contrib/anthropic/cassettes/anthropic_completion_sync_39.yaml b/tests/contrib/anthropic/cassettes/anthropic_completion_sync_39.yaml new file mode 100644 index 00000000000..878732b5f56 --- /dev/null +++ b/tests/contrib/anthropic/cassettes/anthropic_completion_sync_39.yaml @@ -0,0 +1,96 @@ +interactions: +- request: + body: '{"max_tokens": 1024, "messages": [{"role": "user", "content": "What does + Nietzsche mean by ''God is dead''?"}], "model": "claude-3-opus-20240229"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + anthropic-version: + - '2023-06-01' + connection: + - keep-alive + content-length: + - '144' + content-type: + - application/json + host: + - api.anthropic.com + user-agent: + - Anthropic/Python 0.26.1 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.26.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.10.13 + method: POST + uri: https://api.anthropic.com/v1/messages + response: + body: + string: !!binary | + H4sIAAAAAAAAA5SV3W4jRRCFX6XUNyzSJEqchd319ULgBoQI5AKjqDxdM9NyT9VsV7cdE+VNeBte + DFWP7ST7I8GV5fmpPvWdqjMPLni3dKP2dxeXv0j/4bfF7fvv3l39Tjffvnnf9fkmuMbl/UT2FKli + T65xSaJdQNWgGTm7xo3iKbqlayMWT2dXZzIVPVtcLF5fLBbvXONa4Uyc3fKPh2PBTPf2av1ZutuB + GH4KlP/SdiDocJSicQ+e2oiJPKzctXgICp7QrxwEhiEorEU2sHI3A8E17uHXNhC3tHLw6vLt28XX + DQwEO1RgyaCl70lz4B7ygBkQYsiUMIKnkPcwoAfhloDug2bysC65XmTZgQ/kz+FH1kzoT2VH3Fg5 + hFbGKdI9TEOIojINocUIyB7aEnOxQ2StlLaYgzDgWkqGPFBtMDCBdJAT+mC3MUKiGPogRWFNMVBX + S4WsEMYphrZWUegkwS1ppsSg0gbK+/MVr/gHSgSYCFRGgg3tYZLAWSELFPaUzDh/UHGi/pWCZsw0 + Euellbk8h5uXEg+yePnMqypwS36G+vkmOgx5qMSiqBGzVvoUJhD+uIMGIqaezPxCptgwpaBVgM4G + N5AIVbipXJTaEjE9wZ8pLGb5UVTtVVyrxJIJthgL6RK+l/TURlOPWTlPmAd7/FpszEZCno36pMwo + 6WDxPC+cA8ZD8ZmFzc6aiKFPYti9Te3HzprIoBCpyzCUEVntKZytsAOfV29T0KCNGd8acYFWuEty + 1Ijtxl4JPFAizlV+xc31fuGwpaRU8VzNeJjI10Fi2p3QPLmLqS9Hb3dm4n8a2rlOMzdku7WTEv18 + lolOZM09nTjbuNdMY4V81G26QlaKR0xBYcKU4x52lTAdHFrvq7DgCauq6uU/f68pjcTaDisHkmDl + tEyURuSVgzNAmCipMOwGA2kKsetCGiGGjubtnZUe9RgB25lEcW//hb8AQNJhPrqEI+0kbbRCf31Y + KeSekinlMIQYdHzO3PaktSRKfFqrzw3nLDkSVqgIU5LOBg2UeF6XY/XaiyedMCQIHUwkUyTYWU4U + xnWkL9ty6H1OmzzQqBS3NLfz89byMzYvQmTO7DnojtmL0FKk9eGqrVEeyIRZxib7kwBhh6liforH + U0unGDVJL1O2HTBG4p4UJlHL7f3/itbDcthHLDHsJEV/7h7/bJxmme7moHFLR+zvcknsDjeUPhTL + IrfkEmPjSv0+Lh9c4KnkuywbYnXLxaJxUvLzS1ffvHl8/BcAAP//AwCnuOcIfgcAAA== + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 88c87a3dfe767cfc-EWR + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Fri, 31 May 2024 16:53:18 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + anthropic-ratelimit-requests-limit: + - '5' + anthropic-ratelimit-requests-remaining: + - '4' + anthropic-ratelimit-requests-reset: + - '2024-05-31T16:53:57Z' + anthropic-ratelimit-tokens-limit: + - '10000' + anthropic-ratelimit-tokens-remaining: + - '10000' + anthropic-ratelimit-tokens-reset: + - '2024-05-31T16:53:57Z' + request-id: + - req_01TtGXjngAMam3Lsu13Uo93K + via: + - 1.1 google + x-cloud-trace-context: + - d680d03f800501d611121906b77d36da;o=1 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/contrib/anthropic/cassettes/anthropic_completion_sync_multi_prompt.yaml b/tests/contrib/anthropic/cassettes/anthropic_completion_sync_multi_prompt.yaml new file mode 100644 index 00000000000..a2d005f0677 --- /dev/null +++ b/tests/contrib/anthropic/cassettes/anthropic_completion_sync_multi_prompt.yaml @@ -0,0 +1,97 @@ +interactions: +- request: + body: '{"max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": + "text", "text": "Hello, I am looking for information about some books!"}, {"type": + "text", "text": "Can you explain what Descartes meant by ''I think, therefore + I am''?"}]}], "model": "claude-3-opus-20240229"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + anthropic-version: + - '2023-06-01' + connection: + - keep-alive + content-length: + - '279' + content-type: + - application/json + host: + - api.anthropic.com + user-agent: + - Anthropic/Python 0.26.1 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.26.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.10.13 + method: POST + uri: https://api.anthropic.com/v1/messages + response: + body: + string: !!binary | + H4sIAAAAAAAAA3xV224bRwz9FWJeagNrwZfGSfRWNBe7bV6KJIVRFcZol6tlNUtuhhwpW8Mf1O/o + jwUzK1l2kPRFC81yeA4PD7l3jho3d72ubk/Pfvn4xzs5f/uBbq4uPtRvf7188frmZu0qZ+OAOQpV + /Qpd5aKEfOBVSc2zucr10mBwc1cHnxo8uTiRIenJ+en5j6fn5y9d5WphQzY3//Nun9Dwc75aHnP3 + vkMYuugVYeGuwTridQXWYcRWIsI1+H7h4EgirYh9CCMQw2/eiMErLNzPsiKTCjCuBDT1C3cMpOBh + 6CiIytBR7QOoecMe2WA55vTwJiLX3SEKI/yO/N+/8Aq19tFQ4ejs2cvLk7PLZ6fHM7g28MOAPmom + 0JHCVuIaFu4VaS0pKoJwyfwOrZMmkz67vHh+DJ6bidEaR8AwsZC25HiAH2cLXvABe+sVFHFNvAIP + rSRuvJGwD2AxWQdpEIZtR3UHHUItKTSwTBQa8KCjGvYZo8ZonhjWLNuAzQpncIWA/RBkxBzaF7I5 + dLrkjWpoJC2tgk8JNWNmDrmwjQ/UkI052odQClhiIGy1FCkDMQlrwSiUwTpvB34lLzD6GEbADcYx + 93tVAXEdUrPHiRjILynsoDKMIitqMQbgZ1JDrjG/nA4MY1ZmKzE0VeGCG2TovXVTSXvZtMh8JduM + Xj3qdUQf6B/8mjGL7VhnoNbX9hCQO1TsSryaweuMR5MBcpS0071S3i5ajUJ4dOdNlD7/1WoCLCI8 + UMiW2YlgMt3aYWanYTlZPeo9PjRb2hn8pBAke0e/5lrAOt/krEXKGbzPYAEb6KifwHKtvSSFVmKf + QrFe9f0JnS1c1rXkOUyaYtxkk+m3HdxKPDSg+p+6NMXS69zX79v+yThNM18cXUYX1fwykHZF3m94 + SDG0E9O9TrDE/Hs0OVKhzovGs1Yg8RBU2E4zvsTa95jHz3zMjYdBiK3Umcm1KWbVoMeGrEih+5XB + 3nY1Fh/aWB0mdufnPeGne+IHoAZ96S9xGxKykQ97Iza4wSDDfuHkbR350c6poPdxt2K0o9bAZOtj + MzWsToWfpuXfWBttshM9T/rlb8FeugctiobEkLjBmD8RZaJ3Fc3c/V+VU5PhNqJXYTd3yM2tpchu + 90LxU8o1ujmnECqXypdnfueIh2S3JmtkdfOLF5WTZE+OLp7f338BAAD//wMAFHVJ9tgGAAA= + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 88c85b706a4f5e76-EWR + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Fri, 31 May 2024 16:32:13 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + anthropic-ratelimit-requests-limit: + - '5' + anthropic-ratelimit-requests-remaining: + - '4' + anthropic-ratelimit-requests-reset: + - '2024-05-31T16:32:57Z' + anthropic-ratelimit-tokens-limit: + - '10000' + anthropic-ratelimit-tokens-remaining: + - '10000' + anthropic-ratelimit-tokens-reset: + - '2024-05-31T16:32:57Z' + request-id: + - req_01T5fqMvSyUMwwDMphBKC7Ba + via: + - 1.1 google + x-cloud-trace-context: + - 62a976e4f5e79017b5e9a1a54801766b + status: + code: 200 + message: OK +version: 1 diff --git a/tests/contrib/anthropic/cassettes/anthropic_completion_sync_stream.yaml b/tests/contrib/anthropic/cassettes/anthropic_completion_sync_stream.yaml new file mode 100644 index 00000000000..a874e26792c --- /dev/null +++ b/tests/contrib/anthropic/cassettes/anthropic_completion_sync_stream.yaml @@ -0,0 +1,371 @@ +interactions: +- request: + body: '{"max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": + "text", "text": "Can you explain what Descartes meant by ''I think, therefore + I am''?"}]}], "model": "claude-3-opus-20240229", "stream": true}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + anthropic-version: + - '2023-06-01' + connection: + - keep-alive + content-length: + - '212' + content-type: + - application/json + host: + - api.anthropic.com + user-agent: + - Anthropic/Python 0.26.1 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.26.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.10.13 + method: POST + uri: https://api.anthropic.com/v1/messages + response: + body: + string: "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"id\":\"msg_014hE65fK2P1jCGL9LfzR7Yi\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-opus-20240229\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":27,\"output_tokens\":1}} + \ }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} + \ }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: + {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"The\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + famous\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosophical\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + statement\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + \\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"I\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + think\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + therefore\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + I\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + am\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\\"\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + (\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"originally\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + in\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Latin\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + as\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + \\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Cog\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ito\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + er\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"go\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + sum\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\\")\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + was\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + coine\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + by\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + French\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosopher\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Ren\xE9\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Des\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"car\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"tes\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + in\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + work\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + \\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Discourse\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + on\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Metho\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d\\\"\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + (\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"1\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"637\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\").\"} + }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\nDes\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"car\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"tes\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + was\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + seeking\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + foun\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"dational\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + truth\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + upon\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + which\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + to\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + buil\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosophical\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + system\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + He\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + employe\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + metho\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"dological\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + skept\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"icism\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + doub\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ting\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + everything\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + that\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + coul\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + be\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + doub\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"te\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d,\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + including\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + reality\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + own\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + body\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + external\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + worl\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d.\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + However\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + conclude\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + that\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + coul\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + not\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + doubt\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + existence\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + own\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + min\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + fact\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + that\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + was\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + thinking\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + being\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\nEven\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + if\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + were\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + being\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + dece\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ive\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + by\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + \\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"evil\"} + }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + demon\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\\"\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + or\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + his\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + s\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"enses\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + were\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + failing\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + him\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + very\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + act\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + doub\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ting\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + or\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + thinking\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + prove\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + to\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Des\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"car\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"tes\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + that\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + existe\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + as\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + thinking\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + entity\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + In\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + other\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + words\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + one\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + thing\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + coul\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + be\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + certain\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + was\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + own\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + existence\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + as\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + conscious\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + thinking\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + being\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\nFrom\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + this\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + foun\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"dational\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + certain\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ty\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + \\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"I\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + think\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + therefore\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + I\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + am\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\\\"\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Des\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"car\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"tes\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + then\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + attempte\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + to\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + reason\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + way\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + to\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + other\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosophical\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + tru\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ths\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + knowledge\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + about\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + external\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + worl\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d,\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Go\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d,\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + more\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\nThe\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + statement\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + has\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + been\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + influential\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + in\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + development\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Western\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosophy\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + marking\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + significant\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + break\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + from\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + medieval\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Schol\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ast\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"icism\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + helping\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + to\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + establish\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + basis\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + for\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Des\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"car\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"tes\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"'\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + ration\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"alist\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + epis\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"tem\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ology\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + min\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d-\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"body\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + du\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"alism\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + It\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + also\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + playe\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + role\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + in\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + shifting\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosophical\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + attention\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + towar\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + sub\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ject\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ivity\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + nature\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + self\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 + \ }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"output_tokens\":303} + \ }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 88c85bd89bdf3338-EWR + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - text/event-stream; charset=utf-8 + Date: + - Fri, 31 May 2024 16:32:15 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + anthropic-ratelimit-requests-limit: + - '5' + anthropic-ratelimit-requests-remaining: + - '3' + anthropic-ratelimit-requests-reset: + - '2024-05-31T16:32:57Z' + anthropic-ratelimit-tokens-limit: + - '10000' + anthropic-ratelimit-tokens-remaining: + - '9000' + anthropic-ratelimit-tokens-reset: + - '2024-05-31T16:32:57Z' + request-id: + - req_016TzbM5eWoxbBvUzatZXPEz + via: + - 1.1 google + status: + code: 200 + message: OK +version: 1 diff --git a/tests/contrib/anthropic/cassettes/anthropic_completion_sync_stream_helper.yaml b/tests/contrib/anthropic/cassettes/anthropic_completion_sync_stream_helper.yaml new file mode 100644 index 00000000000..674a23f730a --- /dev/null +++ b/tests/contrib/anthropic/cassettes/anthropic_completion_sync_stream_helper.yaml @@ -0,0 +1,396 @@ +interactions: +- request: + body: '{"max_tokens": 1024, "messages": [{"role": "user", "content": "Can you + explain what Descartes meant by ''I think, therefore I am''?"}], "model": "claude-3-opus-20240229", + "stream": true}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + anthropic-version: + - '2023-06-01' + connection: + - keep-alive + content-length: + - '184' + content-type: + - application/json + host: + - api.anthropic.com + user-agent: + - Anthropic/Python 0.26.1 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-custom-event-handler: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 0.26.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.10.13 + x-stainless-stream-helper: + - messages + method: POST + uri: https://api.anthropic.com/v1/messages + response: + body: + string: "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"id\":\"msg_01LEsbYGkzwcf2hRVc7K5t1a\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-opus-20240229\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":27,\"output_tokens\":1}} + }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} + \ }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: + {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\\"\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"I\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + think\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + therefore\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + I\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + am\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\\"\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + (\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"originally\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + in\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Latin\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + as\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + \\\"\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Cog\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ito\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + er\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"go\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + sum\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\\")\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + is\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + famous\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosophical\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + statement\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + by\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + French\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosopher\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Ren\xE9\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Des\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"car\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"tes\"} + }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + (\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"1\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"596\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"-\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"1\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"650\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\").\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + It\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + appears\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + in\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + work\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + \\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Discourse\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + on\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Metho\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d\\\"\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + (\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"1\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"637\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\")\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + is\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + key\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + element\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosophy\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\nIn\"} + }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosophical\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + work\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Des\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"car\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"tes\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + sought\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + to\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + fin\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + foun\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"dational\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + truth\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + that\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + coul\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + not\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + be\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + doub\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"te\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d.\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + He\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + engage\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + in\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + process\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + metho\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"dical\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + doubt\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + questioning\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + reliability\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + sens\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ory\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + experience\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + existence\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + external\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + worl\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d,\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + even\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + certain\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ty\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + mathematical\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + tru\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ths\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\nHowever\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Des\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"car\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"tes\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + conclude\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + that\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + even\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + if\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + doub\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"te\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + everything\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + coul\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + not\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + doubt\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + fact\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + that\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + was\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + thinking\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + The\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + very\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + act\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + doub\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ting\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + or\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + questioning\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + existence\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + serve\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + as\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + proof\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + that\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + was\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + thinking\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + being\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + From\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + this\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Des\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"car\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"tes\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + de\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"duce\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + that\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + ability\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + to\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + think\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + was\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + one\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + thing\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + coul\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + be\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + certain\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + therefore\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + it\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + prove\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + his\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + existence\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\nIn\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + other\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + words\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + \\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"I\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + think\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + therefore\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + I\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + am\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\\"\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + means\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + that\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + act\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + thinking\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + itself\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + is\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + evidence\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + one\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"'s\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + existence\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Even\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + if\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + all\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + other\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + aspects\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + reality\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + are\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + uncertain\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + fact\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + that\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + one\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + is\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + thinking\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + is\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + un\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"deni\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"able\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + proof\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + one\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"'s\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + own\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + existence\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + as\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + conscious\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + being\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\nThis\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + statement\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + serves\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + as\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + foundation\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + for\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Des\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"car\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"tes\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"'\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosophical\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + system\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\",\"}}\n\nevent: + content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + which\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + he\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + builds\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + upon\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + to\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + establish\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + existence\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Go\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + reliability\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + clear\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + distinct\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + ideas\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + It\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + is\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + central\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + t\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"enet\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + of\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Cart\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"esian\"} + \ }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosophy\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + an\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + has\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + ha\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"d + a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + significant\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + impact\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + on\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + Western\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + philosophical\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" + thought\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\".\"} + \ }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 + \ }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"output_tokens\":324} + \ }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 88c8602e19ea423e-EWR + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - text/event-stream; charset=utf-8 + Date: + - Fri, 31 May 2024 16:35:12 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + anthropic-ratelimit-requests-limit: + - '5' + anthropic-ratelimit-requests-remaining: + - '4' + anthropic-ratelimit-requests-reset: + - '2024-05-31T16:35:57Z' + anthropic-ratelimit-tokens-limit: + - '10000' + anthropic-ratelimit-tokens-remaining: + - '9000' + anthropic-ratelimit-tokens-reset: + - '2024-05-31T16:35:57Z' + request-id: + - req_01ArV6mPZwGLd3pbX4Siv9Wk + via: + - 1.1 google + status: + code: 200 + message: OK +version: 1 diff --git a/tests/contrib/anthropic/conftest.py b/tests/contrib/anthropic/conftest.py new file mode 100644 index 00000000000..fe0010849e6 --- /dev/null +++ b/tests/contrib/anthropic/conftest.py @@ -0,0 +1,48 @@ +import os + +import pytest + +from ddtrace import Pin +from ddtrace.contrib.anthropic.patch import patch +from ddtrace.contrib.anthropic.patch import unpatch +from tests.utils import DummyTracer +from tests.utils import DummyWriter +from tests.utils import override_config +from tests.utils import override_env +from tests.utils import override_global_config + + +@pytest.fixture +def ddtrace_config_anthropic(): + return {} + + +@pytest.fixture +def snapshot_tracer(anthropic): + pin = Pin.get_from(anthropic) + yield pin.tracer + + +@pytest.fixture +def mock_tracer(anthropic): + pin = Pin.get_from(anthropic) + mock_tracer = DummyTracer(writer=DummyWriter(trace_flush_enabled=False)) + pin.override(anthropic, tracer=mock_tracer) + pin.tracer.configure() + yield mock_tracer + + +@pytest.fixture +def anthropic(ddtrace_config_anthropic): + with override_global_config({"_dd_api_key": ""}): + with override_config("anthropic", ddtrace_config_anthropic): + with override_env( + dict( + ANTHROPIC_API_KEY=os.getenv("ANTHROPIC_API_KEY", ""), + ) + ): + patch() + import anthropic + + yield anthropic + unpatch() diff --git a/tests/contrib/anthropic/test_anthropic.py b/tests/contrib/anthropic/test_anthropic.py new file mode 100644 index 00000000000..26d3bbf0e51 --- /dev/null +++ b/tests/contrib/anthropic/test_anthropic.py @@ -0,0 +1,164 @@ +import pytest + +from tests.contrib.anthropic.utils import get_request_vcr +from tests.utils import override_global_config + + +@pytest.fixture(scope="session") +def request_vcr(): + yield get_request_vcr() + + +def test_global_tags(ddtrace_config_anthropic, anthropic, request_vcr, mock_tracer): + """ + When the global config UST tags are set + The service name should be used for all data + The env should be used for all data + The version should be used for all data + """ + llm = anthropic.Anthropic() + with override_global_config(dict(service="test-svc", env="staging", version="1234")): + cassette_name = "anthropic_completion_sync_39.yaml" + with request_vcr.use_cassette(cassette_name): + llm.messages.create( + model="claude-3-opus-20240229", + max_tokens=1024, + messages=[{"role": "user", "content": "What does Nietzsche mean by 'God is dead'?"}], + ) + + span = mock_tracer.pop_traces()[0][0] + assert span.resource == "anthropic.resources.messages.Messages.create" + assert span.service == "test-svc" + assert span.get_tag("env") == "staging" + assert span.get_tag("version") == "1234" + assert span.get_tag("anthropic.request.model") == "claude-3-opus-20240229" + assert span.get_tag("anthropic.request.api_key") == "...key>" + + +# @pytest.mark.snapshot(ignores=["metrics.anthropic.tokens.total_cost", "resource"]) +@pytest.mark.snapshot() +def test_anthropic_llm_sync(anthropic, request_vcr): + llm = anthropic.Anthropic() + with request_vcr.use_cassette("anthropic_completion_sync.yaml"): + llm.messages.create( + model="claude-3-opus-20240229", + max_tokens=1024, + messages=[ + { + "role": "user", + "content": [ + { + "type": "text", + "text": "Can you explain what Descartes meant by 'I think, therefore I am'?", + } + ], + } + ], + ) + + +@pytest.mark.snapshot() +def test_anthropic_llm_sync_multiple_prompts(anthropic, request_vcr): + llm = anthropic.Anthropic() + with request_vcr.use_cassette("anthropic_completion_sync_multi_prompt.yaml"): + llm.messages.create( + model="claude-3-opus-20240229", + max_tokens=1024, + messages=[ + { + "role": "user", + "content": [ + {"type": "text", "text": "Hello, I am looking for information about some books!"}, + {"type": "text", "text": "Can you explain what Descartes meant by 'I think, therefore I am'?"}, + ], + } + ], + ) + + +@pytest.mark.snapshot(ignores=["meta.error.stack"]) +def test_anthropic_llm_error(anthropic, request_vcr): + llm = anthropic.Anthropic() + invalid_error = anthropic.BadRequestError + with pytest.raises(invalid_error): + with request_vcr.use_cassette("anthropic_completion_error.yaml"): + llm.messages.create(model="claude-3-opus-20240229", max_tokens=1024, messages=["Invalid content"]) + + +# @pytest.mark.asyncio +# @pytest.mark.snapshot() +# async def test_anthropic_llm_async(anthropic, request_vcr): +# llm = anthropic.Anthropic() +# with request_vcr.use_cassette("anthropic_completion_async.yaml"): +# await llm.messages.create(model="claude-3-opus-20240229", max_tokens=1024, messages=[ +# { +# "role": "user", +# "content": { +# "type": "text", +# "text": "Can you explain what Descartes meant by 'I think, therefore I am'?", +# }, +# } +# ],) + + +@pytest.mark.snapshot() +def test_anthropic_llm_sync_stream(anthropic, request_vcr): + llm = anthropic.Anthropic() + with request_vcr.use_cassette("anthropic_completion_sync_stream.yaml"): + stream = llm.messages.create( + model="claude-3-opus-20240229", + max_tokens=1024, + messages=[ + { + "role": "user", + "content": [ + { + "type": "text", + "text": "Can you explain what Descartes meant by 'I think, therefore I am'?", + } + ], + }, + ], + stream=True, + ) + for chunk in stream: + print(chunk.type) + + +@pytest.mark.snapshot() +def test_anthropic_llm_sync_stream_helper(anthropic, request_vcr): + llm = anthropic.Anthropic() + with request_vcr.use_cassette("anthropic_completion_sync_stream_helper.yaml"): + with llm.messages.stream( + max_tokens=1024, + messages=[ + { + "role": "user", + "content": "Can you explain what Descartes meant by 'I think, therefore I am'?", + } + ], + model="claude-3-opus-20240229", + ) as stream: + for text in stream.text_stream: + print(text, end="", flush=True) + + +# @pytest.mark.asyncio +# @pytest.mark.snapshot(ignores=["resource"]) +# async def test_anthropic_llm_async_stream(anthropic, request_vcr): +# llm = anthropic.AsyncAnthropic() +# with request_vcr.use_cassette("anthropic_completion_async_stream.yaml"): +# async with llm.messages.stream( +# model="claude-3-opus-20240229", +# max_tokens=1024, +# messages=[ +# { +# "role": "user", +# "content": { +# "type": "text", +# "text": "Can you explain what Descartes meant by 'I think, therefore I am'?", +# }, +# } +# ],) as stream: +# async for text in stream.text_stream: +# print(text, end="", flush=True) diff --git a/tests/contrib/anthropic/test_anthropic_patch.py b/tests/contrib/anthropic/test_anthropic_patch.py new file mode 100644 index 00000000000..a5732bf5902 --- /dev/null +++ b/tests/contrib/anthropic/test_anthropic_patch.py @@ -0,0 +1,21 @@ +from ddtrace.contrib.anthropic import get_version +from ddtrace.contrib.anthropic import patch +from ddtrace.contrib.anthropic import unpatch +from tests.contrib.patch import PatchTestCase + + +class TestAnthropicPatch(PatchTestCase.Base): + __integration_name__ = "anthropic" + __module_name__ = "anthropic" + __patch_func__ = patch + __unpatch_func__ = unpatch + __get_version__ = get_version + + def assert_module_patched(self, anthropic): + self.assert_wrapped(anthropic.resources.messages.Messages.create) + + def assert_not_module_patched(self, anthropic): + self.assert_not_wrapped(anthropic.resources.messages.Messages.create) + + def assert_not_module_double_patched(self, anthropic): + self.assert_not_double_wrapped(anthropic.resources.messages.Messages.create) diff --git a/tests/contrib/anthropic/utils.py b/tests/contrib/anthropic/utils.py new file mode 100644 index 00000000000..c47812650cd --- /dev/null +++ b/tests/contrib/anthropic/utils.py @@ -0,0 +1,30 @@ +import os + +import vcr + + +def iswrapped(obj): + return hasattr(obj, "__dd_wrapped__") + + +# VCR is used to capture and store network requests made to Anthropic. +# This is done to avoid making real calls to the API which could introduce +# flakiness and cost. + + +# To (re)-generate the cassettes: pass a real Anthropic API key with +# ANTHROPIC_API_KEY, delete the old cassettes and re-run the tests. +# NOTE: be sure to check that the generated cassettes don't contain your +# API key. Keys should be redacted by the filter_headers option below. +# NOTE: that different cassettes have to be used between sync and async +# due to this issue: https://github.com/kevin1024/vcrpy/issues/463 +# between cassettes generated for requests and aiohttp. +def get_request_vcr(): + return vcr.VCR( + cassette_library_dir=os.path.join(os.path.dirname(__file__), "cassettes"), + record_mode="once", + match_on=["path"], + filter_headers=["authorization", "x-api-key", "api-key"], + # Ignore requests to the agent + ignore_localhost=True, + ) diff --git a/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_error.json b/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_error.json new file mode 100644 index 00000000000..bebe5094e73 --- /dev/null +++ b/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_error.json @@ -0,0 +1,32 @@ +[[ + { + "name": "anthropic.request", + "service": "", + "resource": "anthropic.resources.messages.Messages.create", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "llm", + "error": 1, + "meta": { + "_dd.p.dm": "-0", + "_dd.p.tid": "665de86c00000000", + "anthropic.request.api_key": "...key>", + "anthropic.request.model": "claude-3-opus-20240229", + "anthropic.request.parameters": "{\"model\": \"claude-3-opus-20240229\", \"max_tokens\": 1024}", + "error.message": "Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'messages.0: Input does not match the expected shape.'}}", + "error.stack": "Traceback (most recent call last):\n File \"/Users/william.conti/Documents/dd-trace/dd-trace-py/ddtrace/contrib/anthropic/patch.py\", line 106, in traced_chat_model_generate\n chat_completions = func(*args, **kwargs)\n File \"/Users/william.conti/Documents/dd-trace/dd-trace-py/.riot/venv_py31013_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_vcrpy_anthropic/lib/python3.10/site-packages/anthropic/_utils/_utils.py\", line 277, in wrapper\n return func(*args, **kwargs)\n File \"/Users/william.conti/Documents/dd-trace/dd-trace-py/.riot/venv_py31013_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_vcrpy_anthropic/lib/python3.10/site-packages/anthropic/resources/messages.py\", line 681, in create\n return self._post(\n File \"/Users/william.conti/Documents/dd-trace/dd-trace-py/.riot/venv_py31013_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_vcrpy_anthropic/lib/python3.10/site-packages/anthropic/_base_client.py\", line 1239, in post\n return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))\n File \"/Users/william.conti/Documents/dd-trace/dd-trace-py/.riot/venv_py31013_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_vcrpy_anthropic/lib/python3.10/site-packages/anthropic/_base_client.py\", line 921, in request\n return self._request(\n File \"/Users/william.conti/Documents/dd-trace/dd-trace-py/.riot/venv_py31013_mock_pytest_pytest-mock_coverage_pytest-cov_opentracing_hypothesis6451_pytest-asyncio_vcrpy_anthropic/lib/python3.10/site-packages/anthropic/_base_client.py\", line 1019, in _request\n raise self._make_status_error_from_response(err.response) from None\nanthropic.BadRequestError: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'messages.0: Input does not match the expected shape.'}}\n", + "error.type": "anthropic.BadRequestError", + "language": "python", + "runtime-id": "8e2ce3f9d69c4b6393f8f97d17bc43d3" + }, + "metrics": { + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 1, + "process_id": 37192 + }, + "duration": 2603000, + "start": 1717430380420422000 + }]] diff --git a/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync.json b/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync.json new file mode 100644 index 00000000000..776617bdb3f --- /dev/null +++ b/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync.json @@ -0,0 +1,38 @@ +[[ + { + "name": "anthropic.request", + "service": "", + "resource": "anthropic.resources.messages.Messages.create", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "llm", + "error": 0, + "meta": { + "_dd.p.dm": "-0", + "_dd.p.tid": "665de86c00000000", + "anthropic.request.api_key": "...key>", + "anthropic.request.messages.0.content.0.text": "Can you explain what Descartes meant by 'I think, therefore I am'?", + "anthropic.request.messages.0.content.0.type": "text", + "anthropic.request.messages.0.role": "user", + "anthropic.request.model": "claude-3-opus-20240229", + "anthropic.request.parameters": "{\"model\": \"claude-3-opus-20240229\", \"max_tokens\": 1024}", + "anthropic.response.completions.content.0.text": "The phrase \"I think, therefore I am\" is a translation of the Latin phrase \"Cogito, ergo sum,\" which was coined by the French phi...", + "anthropic.response.completions.content.0.type": "text", + "anthropic.response.completions.finish_reason": "end_turn", + "anthropic.response.completions.role": "assistant", + "language": "python", + "runtime-id": "8e2ce3f9d69c4b6393f8f97d17bc43d3" + }, + "metrics": { + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 1, + "anthropic.response.usage.input_tokens": 27, + "anthropic.response.usage.output_tokens": 303, + "process_id": 37192 + }, + "duration": 2370000, + "start": 1717430380355108000 + }]] diff --git a/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync_multiple_prompts.json b/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync_multiple_prompts.json new file mode 100644 index 00000000000..7039c73bddb --- /dev/null +++ b/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync_multiple_prompts.json @@ -0,0 +1,40 @@ +[[ + { + "name": "anthropic.request", + "service": "", + "resource": "anthropic.resources.messages.Messages.create", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "llm", + "error": 0, + "meta": { + "_dd.p.dm": "-0", + "_dd.p.tid": "665de86c00000000", + "anthropic.request.api_key": "...key>", + "anthropic.request.messages.0.content.0.text": "Hello, I am looking for information about some books!", + "anthropic.request.messages.0.content.0.type": "text", + "anthropic.request.messages.0.content.1.text": "Can you explain what Descartes meant by 'I think, therefore I am'?", + "anthropic.request.messages.0.content.1.type": "text", + "anthropic.request.messages.0.role": "user", + "anthropic.request.model": "claude-3-opus-20240229", + "anthropic.request.parameters": "{\"model\": \"claude-3-opus-20240229\", \"max_tokens\": 1024}", + "anthropic.response.completions.content.0.text": "The phrase \"I think, therefore I am\" (originally in Latin as \"Cogito, ergo sum\") is a philosophical statement by the French phil...", + "anthropic.response.completions.content.0.type": "text", + "anthropic.response.completions.finish_reason": "end_turn", + "anthropic.response.completions.role": "assistant", + "language": "python", + "runtime-id": "8e2ce3f9d69c4b6393f8f97d17bc43d3" + }, + "metrics": { + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 1, + "anthropic.response.usage.input_tokens": 38, + "anthropic.response.usage.output_tokens": 337, + "process_id": 37192 + }, + "duration": 2667000, + "start": 1717430380393742000 + }]] diff --git a/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync_stream.json b/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync_stream.json new file mode 100644 index 00000000000..b213896c26c --- /dev/null +++ b/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync_stream.json @@ -0,0 +1,38 @@ +[[ + { + "name": "anthropic.request", + "service": "", + "resource": "anthropic.resources.messages.Messages.stream", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "llm", + "error": 0, + "meta": { + "_dd.p.dm": "-0", + "_dd.p.tid": "665de86c00000000", + "anthropic.request.api_key": "...key>", + "anthropic.request.messages.0.content.0.text": "Can you explain what Descartes meant by 'I think, therefore I am'?", + "anthropic.request.messages.0.content.0.type": "text", + "anthropic.request.messages.0.role": "user", + "anthropic.request.model": "claude-3-opus-20240229", + "anthropic.request.parameters": "{\"model\": \"claude-3-opus-20240229\", \"max_tokens\": 1024, \"stream\": true}", + "anthropic.response.completions.content.0.text": "The famous philosophical statement \"I think, therefore I am\" (originally in Latin as \"Cogito, ergo sum\") was coined by the Frenc...", + "anthropic.response.completions.content.0.type": "text", + "anthropic.response.completions.finish_reason": "end_turn", + "anthropic.response.completions.role": "assistant", + "language": "python", + "runtime-id": "8e2ce3f9d69c4b6393f8f97d17bc43d3" + }, + "metrics": { + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 1, + "anthropic.response.usage.input_tokens": 27, + "anthropic.response.usage.output_tokens": 304, + "process_id": 37192 + }, + "duration": 15980000, + "start": 1717430380445405000 + }]] diff --git a/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync_stream_helper.json b/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync_stream_helper.json new file mode 100644 index 00000000000..e17dfb3b9cc --- /dev/null +++ b/tests/snapshots/tests.contrib.anthropic.test_anthropic.test_anthropic_llm_sync_stream_helper.json @@ -0,0 +1,38 @@ +[[ + { + "name": "anthropic.request", + "service": "", + "resource": "anthropic.resources.messages.Messages.stream", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "llm", + "error": 0, + "meta": { + "_dd.p.dm": "-0", + "_dd.p.tid": "665de86c00000000", + "anthropic.request.api_key": "...key>", + "anthropic.request.messages.0.content.0.text": "Can you explain what Descartes meant by 'I think, therefore I am'?", + "anthropic.request.messages.0.content.0.type": "text", + "anthropic.request.messages.0.role": "user", + "anthropic.request.model": "claude-3-opus-20240229", + "anthropic.request.parameters": "{\"max_tokens\": 1024, \"model\": \"claude-3-opus-20240229\"}", + "anthropic.response.completions.content.0.text": "\"I think, therefore I am\" (originally in Latin as \"Cogito, ergo sum\") is a famous philosophical statement by the French philosop...", + "anthropic.response.completions.content.0.type": "text", + "anthropic.response.completions.finish_reason": "end_turn", + "anthropic.response.completions.role": "assistant", + "language": "python", + "runtime-id": "8e2ce3f9d69c4b6393f8f97d17bc43d3" + }, + "metrics": { + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 1, + "anthropic.response.usage.input_tokens": 27, + "anthropic.response.usage.output_tokens": 324, + "process_id": 37192 + }, + "duration": 13447000, + "start": 1717430380487421000 + }]]