diff --git a/examples/jupyter/observability/annotate-traces-tutorial.ipynb b/examples/jupyter/observability/annotate-traces-tutorial.ipynb index 46d1446930..1530d256cc 100644 --- a/examples/jupyter/observability/annotate-traces-tutorial.ipynb +++ b/examples/jupyter/observability/annotate-traces-tutorial.ipynb @@ -134,7 +134,7 @@ " Tuple of (answer, trace_id, span_id)\n", " \"\"\"\n", " response = openai.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-5\",\n", " messages=[\n", " {\n", " \"role\": \"system\",\n", diff --git a/examples/jupyter/observability/capture_user_feedback.ipynb b/examples/jupyter/observability/capture_user_feedback.ipynb index b623586adb..d29ba897d5 100644 --- a/examples/jupyter/observability/capture_user_feedback.ipynb +++ b/examples/jupyter/observability/capture_user_feedback.ipynb @@ -225,7 +225,7 @@ "\n", " # Generate a story about the provided topic\n", " response = client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-5\",\n", " messages=[\n", " {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n", " {\n", diff --git a/examples/jupyter/observability/quickstart.ipynb b/examples/jupyter/observability/quickstart.ipynb index 333ba7f875..07bac801f9 100644 --- a/examples/jupyter/observability/quickstart.ipynb +++ b/examples/jupyter/observability/quickstart.ipynb @@ -236,7 +236,7 @@ "@ag.instrument()\n", "def generate():\n", " response = openai.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-5\",\n", " messages=[\n", " {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n", " {\"role\": \"user\", \"content\": \"Write a short story about AI Engineering.\"},\n", diff --git a/examples/jupyter/observability/trace-with-python-sdk-tutorial.ipynb b/examples/jupyter/observability/trace-with-python-sdk-tutorial.ipynb index 5834b87936..a46865b77b 100644 --- a/examples/jupyter/observability/trace-with-python-sdk-tutorial.ipynb +++ b/examples/jupyter/observability/trace-with-python-sdk-tutorial.ipynb @@ -1,597 +1,597 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Trace with Python SDK - Tutorial\n", - "\n", - "This tutorial demonstrates how to use the Agenta Python SDK to trace your LLM applications. You'll learn how to:\n", - "\n", - "- Set up tracing with the Agenta SDK\n", - "- Instrument functions and OpenAI calls automatically\n", - "- Start and end spans manually to capture internals\n", - "- Reference prompt versions in your traces\n", - "- Redact sensitive data from traces\n", - "\n", - "## What You'll Build\n", - "\n", - "We'll create a simple LLM application that:\n", - "1. Uses OpenAI auto-instrumentation to trace API calls\n", - "2. Instruments custom functions to capture workflow steps\n", - "3. Stores internal data like retrieved context\n", - "4. Links traces to deployed prompt versions\n", - "5. Redacts sensitive information from traces" - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Trace with Python SDK - Tutorial\n", + "\n", + "This tutorial demonstrates how to use the Agenta Python SDK to trace your LLM applications. You'll learn how to:\n", + "\n", + "- Set up tracing with the Agenta SDK\n", + "- Instrument functions and OpenAI calls automatically\n", + "- Start and end spans manually to capture internals\n", + "- Reference prompt versions in your traces\n", + "- Redact sensitive data from traces\n", + "\n", + "## What You'll Build\n", + "\n", + "We'll create a simple LLM application that:\n", + "1. Uses OpenAI auto-instrumentation to trace API calls\n", + "2. Instruments custom functions to capture workflow steps\n", + "3. Stores internal data like retrieved context\n", + "4. Links traces to deployed prompt versions\n", + "5. Redacts sensitive information from traces" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Install Dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pip install -U agenta openai opentelemetry-instrumentation-openai" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup\n", + "\n", + "Before using the SDK, we need to initialize it with your API keys. The SDK requires:\n", + "- **Agenta API Key**: For sending traces to Agenta\n", + "- **OpenAI API Key**: For making LLM calls\n", + "\n", + "You can get your Agenta API key from the [API Keys page](https://cloud.agenta.ai/settings?tab=apiKeys)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ[\"AGENTA_HOST\"] = (\n", + " \"https://cloud.agenta.ai/\" # Default value, change for self-hosted\n", + ")\n", + "os.environ[\"AGENTA_API_KEY\"] = \"\"\n", + "os.environ[\"OPENAI_API_KEY\"] = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import agenta as ag\n", + "from getpass import getpass\n", + "\n", + "# Initialize the SDK with your API key\n", + "api_key = os.getenv(\"AGENTA_API_KEY\")\n", + "if not api_key:\n", + " os.environ[\"AGENTA_API_KEY\"] = getpass(\"Enter your Agenta API key: \")\n", + "\n", + "openai_api_key = os.getenv(\"OPENAI_API_KEY\")\n", + "if not openai_api_key:\n", + " os.environ[\"OPENAI_API_KEY\"] = getpass(\"Enter your OpenAI API key: \")\n", + "\n", + "# Initialize the SDK\n", + "ag.init()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Part 1: Setup Tracing with OpenAI Auto-Instrumentation\n", + "\n", + "The Agenta SDK provides two powerful mechanisms for tracing:\n", + "\n", + "1. **Auto-instrumentation**: Automatically traces third-party libraries like OpenAI\n", + "2. **Function decorators**: Manually instrument your custom functions\n", + "\n", + "Let's start by setting up OpenAI auto-instrumentation, which will capture all OpenAI API calls automatically." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from opentelemetry.instrumentation.openai import OpenAIInstrumentor\n", + "import openai\n", + "\n", + "# Instrument OpenAI to automatically trace all API calls\n", + "OpenAIInstrumentor().instrument()\n", + "\n", + "print(\"OpenAI auto-instrumentation enabled!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Part 2: Instrument Functions\n", + "\n", + "Now let's create a simple function and instrument it using the `@ag.instrument()` decorator. This will create a span for the function and automatically capture its inputs and outputs.\n", + "\n", + "The decorator accepts a `spankind` parameter to categorize the span. Available types include: `agent`, `chain`, `workflow`, `tool`, `embedding`, `query`, `completion`, `chat`, `rerank`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@ag.instrument(spankind=\"workflow\")\n", + "def generate_story(topic: str):\n", + " \"\"\"Generate a short story about the given topic.\"\"\"\n", + " response = openai.chat.completions.create(\n", + " model=\"gpt-5\",\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": \"You are a creative storyteller.\"},\n", + " {\"role\": \"user\", \"content\": f\"Write a short story about {topic}.\"},\n", + " ],\n", + " )\n", + " return response.choices[0].message.content\n", + "\n", + "\n", + "# Test the instrumented function\n", + "story = generate_story(\"AI Engineering\")\n", + "print(\"Generated story:\")\n", + "print(story)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Part 3: Starting Spans and Storing Internals\n", + "\n", + "Sometimes you need to capture intermediate data that isn't part of the function's inputs or outputs. The SDK provides two methods:\n", + "\n", + "- `ag.tracing.store_meta()`: Add metadata to a span (saved under `ag.meta`)\n", + "- `ag.tracing.store_internals()`: Store internal data (saved under `ag.data.internals`)\n", + "\n", + "Internals are especially useful because they:\n", + "1. Are searchable using plain text queries\n", + "2. Appear in the overview tab of the observability drawer\n", + "\n", + "Let's create a RAG (Retrieval-Augmented Generation) example that captures the retrieved context:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@ag.instrument(spankind=\"tool\")\n", + "def retrieve_context(query: str):\n", + " \"\"\"Simulate retrieving context from a knowledge base.\"\"\"\n", + " # In a real application, this would query a vector database\n", + " context = [\n", + " \"Agenta is an open-source LLM developer platform.\",\n", + " \"Agenta provides tools for prompt management, evaluation, and observability.\",\n", + " \"The Agenta SDK supports tracing with OpenTelemetry.\",\n", + " ]\n", + "\n", + " # Store metadata about the retrieval\n", + " ag.tracing.store_meta(\n", + " {\"retrieval_method\": \"vector_search\", \"num_results\": len(context)}\n", + " )\n", + "\n", + " return context\n", + "\n", + "\n", + "@ag.instrument(spankind=\"workflow\")\n", + "def rag_workflow(query: str):\n", + " \"\"\"Answer a question using retrieved context.\"\"\"\n", + " # Retrieve context\n", + " context = retrieve_context(query)\n", + "\n", + " # Store the retrieved context as internals\n", + " # This makes it visible in the UI and searchable\n", + " ag.tracing.store_internals({\"retrieved_context\": context})\n", + "\n", + " # Generate answer using context\n", + " context_str = \"\\n\".join(context)\n", + " prompt = f\"Answer the following question based on the context:\\n\\nContext:\\n{context_str}\\n\\nQuestion: {query}\"\n", + "\n", + " response = openai.chat.completions.create(\n", + " model=\"gpt-5\",\n", + " messages=[\n", + " {\n", + " \"role\": \"system\",\n", + " \"content\": \"You are a helpful assistant. Answer questions based only on the provided context.\",\n", + " },\n", + " {\"role\": \"user\", \"content\": prompt},\n", + " ],\n", + " )\n", + "\n", + " return response.choices[0].message.content\n", + "\n", + "\n", + "# Test the RAG workflow\n", + "answer = rag_workflow(\"What is Agenta?\")\n", + "print(\"Answer:\")\n", + "print(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Part 4: Reference Prompt Versions\n", + "\n", + "One of Agenta's powerful features is linking traces to specific prompt versions. This allows you to:\n", + "- Filter traces by application, variant, or environment\n", + "- Compare performance across different variants\n", + "- Track production behavior\n", + "\n", + "Let's create a prompt using the SDK, deploy it, and then reference it in our traces." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create and Deploy a Prompt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from agenta.sdk.types import PromptTemplate, Message, ModelConfig\n", + "from pydantic import BaseModel\n", + "\n", + "\n", + "# Define the prompt configuration\n", + "class Config(BaseModel):\n", + " prompt: PromptTemplate\n", + "\n", + "\n", + "config = Config(\n", + " prompt=PromptTemplate(\n", + " messages=[\n", + " Message(\n", + " role=\"system\",\n", + " content=\"You are a helpful assistant that explains topics clearly.\",\n", + " ),\n", + " Message(role=\"user\", content=\"Explain {{topic}} in simple terms.\"),\n", + " ],\n", + " llm_config=ModelConfig(\n", + " model=\"gpt-5\",\n", + " max_tokens=200,\n", + " temperature=0.7,\n", + " top_p=1.0,\n", + " frequency_penalty=0.0,\n", + " presence_penalty=0.0,\n", + " ),\n", + " template_format=\"curly\",\n", + " )\n", + ")\n", + "\n", + "# Create an application and variant\n", + "app = ag.AppManager.create(\n", + " app_slug=\"topic-explainer-traced\",\n", + " template_key=\"SERVICE:completion\",\n", + ")\n", + "\n", + "print(f\"Created application: {app.app_name}\")\n", + "\n", + "# Create a variant with the prompt configuration\n", + "variant = ag.VariantManager.create(\n", + " parameters=config.model_dump(),\n", + " app_slug=\"topic-explainer-traced\",\n", + " variant_slug=\"production-variant\",\n", + ")\n", + "\n", + "print(f\"Created variant: {variant.variant_slug} (version {variant.variant_version})\")\n", + "\n", + "# Deploy to production environment\n", + "deployment = ag.DeploymentManager.deploy(\n", + " app_slug=\"topic-explainer-traced\",\n", + " variant_slug=\"production-variant\",\n", + " environment_slug=\"production\",\n", + ")\n", + "\n", + "print(f\"Deployed to {deployment.environment_slug} environment\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Reference the Prompt in Traces\n", + "\n", + "Now we'll create a function that uses the deployed prompt and links its traces to the application and environment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@ag.instrument(spankind=\"workflow\")\n", + "def explain_topic_with_prompt(topic: str):\n", + " \"\"\"Explain a topic using the deployed prompt configuration.\"\"\"\n", + "\n", + " # Fetch the prompt configuration from production\n", + " prompt_config = ag.ConfigManager.get_from_registry(\n", + " app_slug=\"topic-explainer-traced\", environment_slug=\"production\"\n", + " )\n", + "\n", + " # Format the prompt with the topic\n", + " prompt_template = PromptTemplate(**prompt_config[\"prompt\"])\n", + " formatted_prompt = prompt_template.format(topic=topic)\n", + "\n", + " # Make the OpenAI call\n", + " response = openai.chat.completions.create(**formatted_prompt.to_openai_kwargs())\n", + "\n", + " # Link this trace to the application and environment\n", + " ag.tracing.store_refs(\n", + " {\n", + " \"application.slug\": \"topic-explainer-traced\",\n", + " \"variant.slug\": \"production-variant\",\n", + " \"environment.slug\": \"production\",\n", + " }\n", + " )\n", + "\n", + " return response.choices[0].message.content\n", + "\n", + "\n", + "# Test the function\n", + "explanation = explain_topic_with_prompt(\"machine learning\")\n", + "print(\"Explanation:\")\n", + "print(explanation)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Part 5: Redact Sensitive Data\n", + "\n", + "When working with production data, you often need to exclude sensitive information from traces. The Agenta SDK provides several ways to redact data:\n", + "\n", + "1. **Simple redaction**: Ignore all inputs/outputs\n", + "2. **Selective redaction**: Ignore specific fields\n", + "3. **Custom redaction**: Use a callback function for fine-grained control\n", + "4. **Global redaction**: Apply rules across all instrumented functions\n", + "\n", + "Let's explore these different approaches." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Simple Redaction: Ignore All Inputs/Outputs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@ag.instrument(spankind=\"workflow\", ignore_inputs=True, ignore_outputs=True)\n", + "def process_sensitive_data(user_email: str, credit_card: str):\n", + " \"\"\"Process sensitive data without logging inputs/outputs.\"\"\"\n", + " # The function inputs and outputs won't be captured in the trace\n", + " result = f\"Processed data for {user_email}\"\n", + " return result\n", + "\n", + "\n", + "# This trace will not contain inputs or outputs\n", + "result = process_sensitive_data(\"user@example.com\", \"4111-1111-1111-1111\")\n", + "print(result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Selective Redaction: Ignore Specific Fields" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@ag.instrument(\n", + " spankind=\"workflow\",\n", + " ignore_inputs=[\"api_key\", \"password\"],\n", + " ignore_outputs=[\"internal_token\"],\n", + ")\n", + "def authenticate_user(username: str, password: str, api_key: str):\n", + " \"\"\"Authenticate a user (password and api_key will be redacted).\"\"\"\n", + " # Simulate authentication\n", + " return {\n", + " \"username\": username,\n", + " \"authenticated\": True,\n", + " \"internal_token\": \"secret-token-12345\", # This will be redacted\n", + " }\n", + "\n", + "\n", + "# The trace will show username but not password or api_key\n", + "auth_result = authenticate_user(\"john_doe\", \"secret123\", \"sk-abc123\")\n", + "print(f\"Authenticated: {auth_result['authenticated']}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Custom Redaction: Use a Callback Function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "\n", + "\n", + "def redact_pii(name: str, field: str, data: dict):\n", + " \"\"\"Custom redaction function that removes PII.\"\"\"\n", + " if field == \"inputs\":\n", + " # Redact email addresses\n", + " if \"email\" in data:\n", + " data[\"email\"] = \"[REDACTED]\"\n", + " # Redact phone numbers\n", + " if \"phone\" in data:\n", + " data[\"phone\"] = \"[REDACTED]\"\n", + "\n", + " if field == \"outputs\":\n", + " # Redact any credit card patterns\n", + " if isinstance(data, dict):\n", + " for key, value in data.items():\n", + " if isinstance(value, str):\n", + " # Simple credit card pattern\n", + " data[key] = re.sub(\n", + " r\"\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}\",\n", + " \"[CARD-REDACTED]\",\n", + " value,\n", + " )\n", + "\n", + " return data\n", + "\n", + "\n", + "@ag.instrument(\n", + " spankind=\"workflow\",\n", + " redact=redact_pii,\n", + " redact_on_error=False, # Don't apply redaction if it raises an error\n", + ")\n", + "def process_customer_order(name: str, email: str, phone: str, card_number: str):\n", + " \"\"\"Process a customer order with PII redaction.\"\"\"\n", + " return {\n", + " \"status\": \"processed\",\n", + " \"customer\": name,\n", + " \"payment_info\": f\"Charged card ending in {card_number[-4:]}\",\n", + " \"full_card\": card_number, # This will be redacted\n", + " }\n", + "\n", + "\n", + "# Test with sample data\n", + "order = process_customer_order(\n", + " name=\"Jane Smith\",\n", + " email=\"jane@example.com\", # Will be redacted\n", + " phone=\"555-1234\", # Will be redacted\n", + " card_number=\"4111-1111-1111-1111\", # Will be redacted in output\n", + ")\n", + "print(f\"Order status: {order['status']}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Global Redaction: Apply Rules Across All Functions\n", + "\n", + "For organization-wide policies, you can set up global redaction rules during initialization. Note: Since we already called `ag.init()`, this is just for demonstration. In a real application, you would set this during the initial setup." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Example of global redaction setup (would be done during ag.init())\n", + "from typing import Dict, Any\n", + "\n", + "\n", + "def global_redact_function(name: str, field: str, data: Dict[str, Any]):\n", + " \"\"\"Global redaction that applies to all instrumented functions.\"\"\"\n", + " # Remove any field containing 'api_key' or 'secret'\n", + " if isinstance(data, dict):\n", + " keys_to_redact = [\n", + " k for k in data.keys() if \"api_key\" in k.lower() or \"secret\" in k.lower()\n", + " ]\n", + " for key in keys_to_redact:\n", + " data[key] = \"[REDACTED]\"\n", + "\n", + " return data\n", + "\n", + "\n", + "# In production, you would initialize like this:\n", + "# ag.init(\n", + "# redact=global_redact_function,\n", + "# redact_on_error=True\n", + "# )\n", + "\n", + "print(\"Global redaction would be configured during ag.init()\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this tutorial, you learned how to:\n", + "\n", + "1. ✅ **Set up tracing** with the Agenta SDK and OpenAI auto-instrumentation\n", + "2. ✅ **Instrument functions** using the `@ag.instrument()` decorator\n", + "3. ✅ **Store internals and metadata** to capture intermediate data in your workflows\n", + "4. ✅ **Reference prompt versions** by creating, deploying, and linking traces to applications\n", + "5. ✅ **Redact sensitive data** using multiple approaches for privacy protection\n", + "\n", + "## Next Steps\n", + "\n", + "- Explore [distributed tracing](/observability/trace-with-python-sdk/distributed-tracing) for multi-service applications\n", + "- Learn about [cost tracking](/observability/trace-with-python-sdk/track-costs) to monitor LLM expenses\n", + "- Understand [trace annotations](/observability/trace-with-python-sdk/annotate-traces) for collecting feedback\n", + "- Check out the [Agenta UI guide](/observability/using-the-ui/filtering-traces) for filtering and analyzing traces" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.0" + } }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Install Dependencies" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pip install -U agenta openai opentelemetry-instrumentation-openai" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup\n", - "\n", - "Before using the SDK, we need to initialize it with your API keys. The SDK requires:\n", - "- **Agenta API Key**: For sending traces to Agenta\n", - "- **OpenAI API Key**: For making LLM calls\n", - "\n", - "You can get your Agenta API key from the [API Keys page](https://cloud.agenta.ai/settings?tab=apiKeys)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "os.environ[\"AGENTA_HOST\"] = (\n", - " \"https://cloud.agenta.ai/\" # Default value, change for self-hosted\n", - ")\n", - "os.environ[\"AGENTA_API_KEY\"] = \"\"\n", - "os.environ[\"OPENAI_API_KEY\"] = \"\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import agenta as ag\n", - "from getpass import getpass\n", - "\n", - "# Initialize the SDK with your API key\n", - "api_key = os.getenv(\"AGENTA_API_KEY\")\n", - "if not api_key:\n", - " os.environ[\"AGENTA_API_KEY\"] = getpass(\"Enter your Agenta API key: \")\n", - "\n", - "openai_api_key = os.getenv(\"OPENAI_API_KEY\")\n", - "if not openai_api_key:\n", - " os.environ[\"OPENAI_API_KEY\"] = getpass(\"Enter your OpenAI API key: \")\n", - "\n", - "# Initialize the SDK\n", - "ag.init()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Part 1: Setup Tracing with OpenAI Auto-Instrumentation\n", - "\n", - "The Agenta SDK provides two powerful mechanisms for tracing:\n", - "\n", - "1. **Auto-instrumentation**: Automatically traces third-party libraries like OpenAI\n", - "2. **Function decorators**: Manually instrument your custom functions\n", - "\n", - "Let's start by setting up OpenAI auto-instrumentation, which will capture all OpenAI API calls automatically." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from opentelemetry.instrumentation.openai import OpenAIInstrumentor\n", - "import openai\n", - "\n", - "# Instrument OpenAI to automatically trace all API calls\n", - "OpenAIInstrumentor().instrument()\n", - "\n", - "print(\"OpenAI auto-instrumentation enabled!\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Part 2: Instrument Functions\n", - "\n", - "Now let's create a simple function and instrument it using the `@ag.instrument()` decorator. This will create a span for the function and automatically capture its inputs and outputs.\n", - "\n", - "The decorator accepts a `spankind` parameter to categorize the span. Available types include: `agent`, `chain`, `workflow`, `tool`, `embedding`, `query`, `completion`, `chat`, `rerank`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "@ag.instrument(spankind=\"workflow\")\n", - "def generate_story(topic: str):\n", - " \"\"\"Generate a short story about the given topic.\"\"\"\n", - " response = openai.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", - " messages=[\n", - " {\"role\": \"system\", \"content\": \"You are a creative storyteller.\"},\n", - " {\"role\": \"user\", \"content\": f\"Write a short story about {topic}.\"},\n", - " ],\n", - " )\n", - " return response.choices[0].message.content\n", - "\n", - "\n", - "# Test the instrumented function\n", - "story = generate_story(\"AI Engineering\")\n", - "print(\"Generated story:\")\n", - "print(story)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Part 3: Starting Spans and Storing Internals\n", - "\n", - "Sometimes you need to capture intermediate data that isn't part of the function's inputs or outputs. The SDK provides two methods:\n", - "\n", - "- `ag.tracing.store_meta()`: Add metadata to a span (saved under `ag.meta`)\n", - "- `ag.tracing.store_internals()`: Store internal data (saved under `ag.data.internals`)\n", - "\n", - "Internals are especially useful because they:\n", - "1. Are searchable using plain text queries\n", - "2. Appear in the overview tab of the observability drawer\n", - "\n", - "Let's create a RAG (Retrieval-Augmented Generation) example that captures the retrieved context:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "@ag.instrument(spankind=\"tool\")\n", - "def retrieve_context(query: str):\n", - " \"\"\"Simulate retrieving context from a knowledge base.\"\"\"\n", - " # In a real application, this would query a vector database\n", - " context = [\n", - " \"Agenta is an open-source LLM developer platform.\",\n", - " \"Agenta provides tools for prompt management, evaluation, and observability.\",\n", - " \"The Agenta SDK supports tracing with OpenTelemetry.\",\n", - " ]\n", - "\n", - " # Store metadata about the retrieval\n", - " ag.tracing.store_meta(\n", - " {\"retrieval_method\": \"vector_search\", \"num_results\": len(context)}\n", - " )\n", - "\n", - " return context\n", - "\n", - "\n", - "@ag.instrument(spankind=\"workflow\")\n", - "def rag_workflow(query: str):\n", - " \"\"\"Answer a question using retrieved context.\"\"\"\n", - " # Retrieve context\n", - " context = retrieve_context(query)\n", - "\n", - " # Store the retrieved context as internals\n", - " # This makes it visible in the UI and searchable\n", - " ag.tracing.store_internals({\"retrieved_context\": context})\n", - "\n", - " # Generate answer using context\n", - " context_str = \"\\n\".join(context)\n", - " prompt = f\"Answer the following question based on the context:\\n\\nContext:\\n{context_str}\\n\\nQuestion: {query}\"\n", - "\n", - " response = openai.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", - " messages=[\n", - " {\n", - " \"role\": \"system\",\n", - " \"content\": \"You are a helpful assistant. Answer questions based only on the provided context.\",\n", - " },\n", - " {\"role\": \"user\", \"content\": prompt},\n", - " ],\n", - " )\n", - "\n", - " return response.choices[0].message.content\n", - "\n", - "\n", - "# Test the RAG workflow\n", - "answer = rag_workflow(\"What is Agenta?\")\n", - "print(\"Answer:\")\n", - "print(answer)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Part 4: Reference Prompt Versions\n", - "\n", - "One of Agenta's powerful features is linking traces to specific prompt versions. This allows you to:\n", - "- Filter traces by application, variant, or environment\n", - "- Compare performance across different variants\n", - "- Track production behavior\n", - "\n", - "Let's create a prompt using the SDK, deploy it, and then reference it in our traces." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create and Deploy a Prompt" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from agenta.sdk.types import PromptTemplate, Message, ModelConfig\n", - "from pydantic import BaseModel\n", - "\n", - "\n", - "# Define the prompt configuration\n", - "class Config(BaseModel):\n", - " prompt: PromptTemplate\n", - "\n", - "\n", - "config = Config(\n", - " prompt=PromptTemplate(\n", - " messages=[\n", - " Message(\n", - " role=\"system\",\n", - " content=\"You are a helpful assistant that explains topics clearly.\",\n", - " ),\n", - " Message(role=\"user\", content=\"Explain {{topic}} in simple terms.\"),\n", - " ],\n", - " llm_config=ModelConfig(\n", - " model=\"gpt-3.5-turbo\",\n", - " max_tokens=200,\n", - " temperature=0.7,\n", - " top_p=1.0,\n", - " frequency_penalty=0.0,\n", - " presence_penalty=0.0,\n", - " ),\n", - " template_format=\"curly\",\n", - " )\n", - ")\n", - "\n", - "# Create an application and variant\n", - "app = ag.AppManager.create(\n", - " app_slug=\"topic-explainer-traced\",\n", - " template_key=\"SERVICE:completion\",\n", - ")\n", - "\n", - "print(f\"Created application: {app.app_name}\")\n", - "\n", - "# Create a variant with the prompt configuration\n", - "variant = ag.VariantManager.create(\n", - " parameters=config.model_dump(),\n", - " app_slug=\"topic-explainer-traced\",\n", - " variant_slug=\"production-variant\",\n", - ")\n", - "\n", - "print(f\"Created variant: {variant.variant_slug} (version {variant.variant_version})\")\n", - "\n", - "# Deploy to production environment\n", - "deployment = ag.DeploymentManager.deploy(\n", - " app_slug=\"topic-explainer-traced\",\n", - " variant_slug=\"production-variant\",\n", - " environment_slug=\"production\",\n", - ")\n", - "\n", - "print(f\"Deployed to {deployment.environment_slug} environment\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Reference the Prompt in Traces\n", - "\n", - "Now we'll create a function that uses the deployed prompt and links its traces to the application and environment." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "@ag.instrument(spankind=\"workflow\")\n", - "def explain_topic_with_prompt(topic: str):\n", - " \"\"\"Explain a topic using the deployed prompt configuration.\"\"\"\n", - "\n", - " # Fetch the prompt configuration from production\n", - " prompt_config = ag.ConfigManager.get_from_registry(\n", - " app_slug=\"topic-explainer-traced\", environment_slug=\"production\"\n", - " )\n", - "\n", - " # Format the prompt with the topic\n", - " prompt_template = PromptTemplate(**prompt_config[\"prompt\"])\n", - " formatted_prompt = prompt_template.format(topic=topic)\n", - "\n", - " # Make the OpenAI call\n", - " response = openai.chat.completions.create(**formatted_prompt.to_openai_kwargs())\n", - "\n", - " # Link this trace to the application and environment\n", - " ag.tracing.store_refs(\n", - " {\n", - " \"application.slug\": \"topic-explainer-traced\",\n", - " \"variant.slug\": \"production-variant\",\n", - " \"environment.slug\": \"production\",\n", - " }\n", - " )\n", - "\n", - " return response.choices[0].message.content\n", - "\n", - "\n", - "# Test the function\n", - "explanation = explain_topic_with_prompt(\"machine learning\")\n", - "print(\"Explanation:\")\n", - "print(explanation)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Part 5: Redact Sensitive Data\n", - "\n", - "When working with production data, you often need to exclude sensitive information from traces. The Agenta SDK provides several ways to redact data:\n", - "\n", - "1. **Simple redaction**: Ignore all inputs/outputs\n", - "2. **Selective redaction**: Ignore specific fields\n", - "3. **Custom redaction**: Use a callback function for fine-grained control\n", - "4. **Global redaction**: Apply rules across all instrumented functions\n", - "\n", - "Let's explore these different approaches." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Simple Redaction: Ignore All Inputs/Outputs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "@ag.instrument(spankind=\"workflow\", ignore_inputs=True, ignore_outputs=True)\n", - "def process_sensitive_data(user_email: str, credit_card: str):\n", - " \"\"\"Process sensitive data without logging inputs/outputs.\"\"\"\n", - " # The function inputs and outputs won't be captured in the trace\n", - " result = f\"Processed data for {user_email}\"\n", - " return result\n", - "\n", - "\n", - "# This trace will not contain inputs or outputs\n", - "result = process_sensitive_data(\"user@example.com\", \"4111-1111-1111-1111\")\n", - "print(result)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Selective Redaction: Ignore Specific Fields" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "@ag.instrument(\n", - " spankind=\"workflow\",\n", - " ignore_inputs=[\"api_key\", \"password\"],\n", - " ignore_outputs=[\"internal_token\"],\n", - ")\n", - "def authenticate_user(username: str, password: str, api_key: str):\n", - " \"\"\"Authenticate a user (password and api_key will be redacted).\"\"\"\n", - " # Simulate authentication\n", - " return {\n", - " \"username\": username,\n", - " \"authenticated\": True,\n", - " \"internal_token\": \"secret-token-12345\", # This will be redacted\n", - " }\n", - "\n", - "\n", - "# The trace will show username but not password or api_key\n", - "auth_result = authenticate_user(\"john_doe\", \"secret123\", \"sk-abc123\")\n", - "print(f\"Authenticated: {auth_result['authenticated']}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Custom Redaction: Use a Callback Function" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import re\n", - "\n", - "\n", - "def redact_pii(name: str, field: str, data: dict):\n", - " \"\"\"Custom redaction function that removes PII.\"\"\"\n", - " if field == \"inputs\":\n", - " # Redact email addresses\n", - " if \"email\" in data:\n", - " data[\"email\"] = \"[REDACTED]\"\n", - " # Redact phone numbers\n", - " if \"phone\" in data:\n", - " data[\"phone\"] = \"[REDACTED]\"\n", - "\n", - " if field == \"outputs\":\n", - " # Redact any credit card patterns\n", - " if isinstance(data, dict):\n", - " for key, value in data.items():\n", - " if isinstance(value, str):\n", - " # Simple credit card pattern\n", - " data[key] = re.sub(\n", - " r\"\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}\",\n", - " \"[CARD-REDACTED]\",\n", - " value,\n", - " )\n", - "\n", - " return data\n", - "\n", - "\n", - "@ag.instrument(\n", - " spankind=\"workflow\",\n", - " redact=redact_pii,\n", - " redact_on_error=False, # Don't apply redaction if it raises an error\n", - ")\n", - "def process_customer_order(name: str, email: str, phone: str, card_number: str):\n", - " \"\"\"Process a customer order with PII redaction.\"\"\"\n", - " return {\n", - " \"status\": \"processed\",\n", - " \"customer\": name,\n", - " \"payment_info\": f\"Charged card ending in {card_number[-4:]}\",\n", - " \"full_card\": card_number, # This will be redacted\n", - " }\n", - "\n", - "\n", - "# Test with sample data\n", - "order = process_customer_order(\n", - " name=\"Jane Smith\",\n", - " email=\"jane@example.com\", # Will be redacted\n", - " phone=\"555-1234\", # Will be redacted\n", - " card_number=\"4111-1111-1111-1111\", # Will be redacted in output\n", - ")\n", - "print(f\"Order status: {order['status']}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Global Redaction: Apply Rules Across All Functions\n", - "\n", - "For organization-wide policies, you can set up global redaction rules during initialization. Note: Since we already called `ag.init()`, this is just for demonstration. In a real application, you would set this during the initial setup." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Example of global redaction setup (would be done during ag.init())\n", - "from typing import Dict, Any\n", - "\n", - "\n", - "def global_redact_function(name: str, field: str, data: Dict[str, Any]):\n", - " \"\"\"Global redaction that applies to all instrumented functions.\"\"\"\n", - " # Remove any field containing 'api_key' or 'secret'\n", - " if isinstance(data, dict):\n", - " keys_to_redact = [\n", - " k for k in data.keys() if \"api_key\" in k.lower() or \"secret\" in k.lower()\n", - " ]\n", - " for key in keys_to_redact:\n", - " data[key] = \"[REDACTED]\"\n", - "\n", - " return data\n", - "\n", - "\n", - "# In production, you would initialize like this:\n", - "# ag.init(\n", - "# redact=global_redact_function,\n", - "# redact_on_error=True\n", - "# )\n", - "\n", - "print(\"Global redaction would be configured during ag.init()\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Summary\n", - "\n", - "In this tutorial, you learned how to:\n", - "\n", - "1. ✅ **Set up tracing** with the Agenta SDK and OpenAI auto-instrumentation\n", - "2. ✅ **Instrument functions** using the `@ag.instrument()` decorator\n", - "3. ✅ **Store internals and metadata** to capture intermediate data in your workflows\n", - "4. ✅ **Reference prompt versions** by creating, deploying, and linking traces to applications\n", - "5. ✅ **Redact sensitive data** using multiple approaches for privacy protection\n", - "\n", - "## Next Steps\n", - "\n", - "- Explore [distributed tracing](/observability/trace-with-python-sdk/distributed-tracing) for multi-service applications\n", - "- Learn about [cost tracking](/observability/trace-with-python-sdk/track-costs) to monitor LLM expenses\n", - "- Understand [trace annotations](/observability/trace-with-python-sdk/annotate-traces) for collecting feedback\n", - "- Check out the [Agenta UI guide](/observability/using-the-ui/filtering-traces) for filtering and analyzing traces" - ] - } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 0 + "nbformat": 4, + "nbformat_minor": 0 } \ No newline at end of file diff --git a/examples/jupyter/prompt-management/how-to-prompt-management.ipynb b/examples/jupyter/prompt-management/how-to-prompt-management.ipynb index 61e0b8f42b..e92f31235a 100644 --- a/examples/jupyter/prompt-management/how-to-prompt-management.ipynb +++ b/examples/jupyter/prompt-management/how-to-prompt-management.ipynb @@ -204,7 +204,7 @@ " Message(role=\"user\", content=\"Explain {{topic}} in simple terms\"),\n", " ],\n", " llm_config=ModelConfig(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-5\",\n", " max_tokens=150,\n", " temperature=0.7,\n", " top_p=1.0,\n", @@ -270,7 +270,7 @@ " \"template_format\": \"curly\",\n", " \"input_keys\": null,\n", " \"llm_config\": {\n", - " \"model\": \"gpt-3.5-turbo\",\n", + " \"model\": \"gpt-5\",\n", " \"temperature\": 0.7,\n", " \"max_tokens\": 150,\n", " \"top_p\": 1.0,\n", @@ -626,7 +626,7 @@ " \"template_format\": \"curly\",\n", " \"input_keys\": null,\n", " \"llm_config\": {\n", - " \"model\": \"gpt-3.5-turbo\",\n", + " \"model\": \"gpt-5\",\n", " \"temperature\": 0.7,\n", " \"max_tokens\": 150,\n", " \"top_p\": 1.0,\n", diff --git a/examples/jupyter/prompt-management/manage-prompts-with-sdk-tutorial.ipynb b/examples/jupyter/prompt-management/manage-prompts-with-sdk-tutorial.ipynb index 1e1e0571cd..60e2ea191a 100644 --- a/examples/jupyter/prompt-management/manage-prompts-with-sdk-tutorial.ipynb +++ b/examples/jupyter/prompt-management/manage-prompts-with-sdk-tutorial.ipynb @@ -285,7 +285,7 @@ " \"template_format\": \"curly\",\n", " \"input_keys\": null,\n", " \"llm_config\": {\n", - " \"model\": \"gpt-3.5-turbo\",\n", + " \"model\": \"gpt-5\",\n", " \"temperature\": 0.6,\n", " \"max_tokens\": 150,\n", " \"top_p\": 1.0,\n", @@ -322,7 +322,7 @@ " Message(role=\"user\", content=\"Explain {{topic}} in simple terms\"),\n", " ],\n", " llm_config=ModelConfig(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-5\",\n", " max_tokens=150,\n", " temperature=0.6,\n", " top_p=1.0,\n", @@ -476,7 +476,7 @@ " \"template_format\": \"curly\",\n", " \"input_keys\": null,\n", " \"llm_config\": {\n", - " \"model\": \"gpt-3.5-turbo\",\n", + " \"model\": \"gpt-5\",\n", " \"temperature\": 0.9,\n", " \"max_tokens\": 150,\n", " \"top_p\": 1.0,\n", @@ -507,7 +507,7 @@ " ),\n", " ],\n", " llm_config=ModelConfig(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-5\",\n", " max_tokens=150,\n", " temperature=0.9,\n", " top_p=1.0,\n", @@ -557,7 +557,7 @@ "output_type": "stream", "text": [ "Fetched configuration from production:\n", - "{'prompt': {'messages': [{'role': 'system', 'content': 'You are an assistant that provides concise answers', 'name': None, 'tool_calls': None, 'tool_call_id': None}, {'role': 'user', 'content': 'Explain {{topic}} in simple terms', 'name': None, 'tool_calls': None, 'tool_call_id': None}], 'system_prompt': None, 'user_prompt': None, 'template_format': 'curly', 'input_keys': None, 'llm_config': {'model': 'gpt-3.5-turbo', 'temperature': 0.6, 'max_tokens': 150, 'top_p': 1.0, 'frequency_penalty': 0.0, 'presence_penalty': 0.0, 'response_format': None, 'stream': None, 'tools': None, 'tool_choice': None}}}\n" + "{'prompt': {'messages': [{'role': 'system', 'content': 'You are an assistant that provides concise answers', 'name': None, 'tool_calls': None, 'tool_call_id': None}, {'role': 'user', 'content': 'Explain {{topic}} in simple terms', 'name': None, 'tool_calls': None, 'tool_call_id': None}], 'system_prompt': None, 'user_prompt': None, 'template_format': 'curly', 'input_keys': None, 'llm_config': {'model': 'gpt-5', 'temperature': 0.6, 'max_tokens': 150, 'top_p': 1.0, 'frequency_penalty': 0.0, 'presence_penalty': 0.0, 'response_format': None, 'stream': None, 'tools': None, 'tool_choice': None}}}\n" ] } ], diff --git a/examples/node/observability-opentelemetry/README.md b/examples/node/observability-opentelemetry/README.md index 9d61b4984f..27b161cbb1 100644 --- a/examples/node/observability-opentelemetry/README.md +++ b/examples/node/observability-opentelemetry/README.md @@ -19,7 +19,7 @@ This example uses the latest stable versions: 1. Install dependencies: ```bash -npm install +pnpm install ``` 2. Create a `.env` file with your credentials: @@ -30,7 +30,7 @@ cp .env.example .env 3. Run the example: ```bash -npm start +pnpm start ``` ## What's Happening? @@ -65,4 +65,3 @@ See [SEMANTIC_CONVENTIONS.md](./SEMANTIC_CONVENTIONS.md) for detailed documentat ## View Your Traces After running the example, log in to [Agenta](https://cloud.agenta.ai) and navigate to the Observability section to see your traces! - diff --git a/examples/node/observability-opentelemetry/app.js b/examples/node/observability-opentelemetry/app.js index b3dce7e794..2a1e05b965 100644 --- a/examples/node/observability-opentelemetry/app.js +++ b/examples/node/observability-opentelemetry/app.js @@ -1,6 +1,8 @@ // app.js -import OpenAI from "openai"; +import 'dotenv/config'; + import { trace } from "@opentelemetry/api"; +import OpenAI from "openai"; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, @@ -27,11 +29,11 @@ async function generate() { // Stores the input parameters as JSON span.setAttribute("ag.data.inputs", JSON.stringify({ messages: messages, - model: "gpt-3.5-turbo" + model: "gpt-5" })); const response = await openai.chat.completions.create({ - model: "gpt-3.5-turbo", + model: "gpt-5", messages: messages, }); diff --git a/examples/node/observability-opentelemetry/instrumentation.js b/examples/node/observability-opentelemetry/instrumentation.js index 4921de9bf7..fcc52f1e07 100644 --- a/examples/node/observability-opentelemetry/instrumentation.js +++ b/examples/node/observability-opentelemetry/instrumentation.js @@ -1,4 +1,6 @@ // instrumentation.js +import "dotenv/config"; + import { registerInstrumentations } from "@opentelemetry/instrumentation"; import { OpenAIInstrumentation } from "@arizeai/openinference-instrumentation-openai"; import { diag, DiagConsoleLogger, DiagLogLevel } from "@opentelemetry/api"; diff --git a/examples/node/observability-opentelemetry/package-lock.json b/examples/node/observability-opentelemetry/package-lock.json deleted file mode 100644 index c9c0ef0ae5..0000000000 --- a/examples/node/observability-opentelemetry/package-lock.json +++ /dev/null @@ -1,935 +0,0 @@ -{ - "name": "agenta-opentelemetry-quickstart", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "agenta-opentelemetry-quickstart", - "version": "1.0.0", - "dependencies": { - "@arizeai/openinference-instrumentation-openai": "^3.2.3", - "@arizeai/openinference-semantic-conventions": "^2.1.2", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/exporter-trace-otlp-proto": "^0.54.0", - "@opentelemetry/instrumentation": "^0.54.0", - "@opentelemetry/resources": "^1.28.0", - "@opentelemetry/sdk-trace-base": "^1.28.0", - "@opentelemetry/sdk-trace-node": "^1.28.0", - "@opentelemetry/semantic-conventions": "^1.28.0", - "openai": "^6.7.0" - }, - "devDependencies": { - "@types/node": "^22.0.0", - "typescript": "^5.7.0" - } - }, - "node_modules/@arizeai/openinference-core": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@arizeai/openinference-core/-/openinference-core-1.0.7.tgz", - "integrity": "sha512-O9WYkrHNh/0mGTV+T9SWC3tkxVrT16gBrFiByG3aukBsqdOfSzoRj6QINk+Oi+VEDNIoQUzVQPFh81/gEL/thA==", - "license": "Apache-2.0", - "dependencies": { - "@arizeai/openinference-semantic-conventions": "2.1.2", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/core": "^1.25.1" - } - }, - "node_modules/@arizeai/openinference-instrumentation-openai": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@arizeai/openinference-instrumentation-openai/-/openinference-instrumentation-openai-3.2.3.tgz", - "integrity": "sha512-4GiUyUIafNkAf7milnsS4Xjh0rZwjPvhHu+xkcj2MQ19a0Teu6PcFDa7DCt7YV/xw2o+wcxeaLfVURmGGLAHOg==", - "license": "Apache-2.0", - "dependencies": { - "@arizeai/openinference-core": "1.0.7", - "@arizeai/openinference-semantic-conventions": "2.1.2", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/core": "^1.25.1", - "@opentelemetry/instrumentation": "^0.46.0" - } - }, - "node_modules/@arizeai/openinference-instrumentation-openai/node_modules/@opentelemetry/instrumentation": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.46.0.tgz", - "integrity": "sha512-a9TijXZZbk0vI5TGLZl+0kxyFfrXHhX6Svtz7Pp2/VBlCSKrazuULEyoJQrOknJyFWNMEmbbJgOciHCCpQcisw==", - "license": "Apache-2.0", - "dependencies": { - "@types/shimmer": "^1.0.2", - "import-in-the-middle": "1.7.1", - "require-in-the-middle": "^7.1.1", - "semver": "^7.5.2", - "shimmer": "^1.2.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@arizeai/openinference-instrumentation-openai/node_modules/import-in-the-middle": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.7.1.tgz", - "integrity": "sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==", - "license": "Apache-2.0", - "dependencies": { - "acorn": "^8.8.2", - "acorn-import-assertions": "^1.9.0", - "cjs-module-lexer": "^1.2.2", - "module-details-from-path": "^1.0.3" - } - }, - "node_modules/@arizeai/openinference-semantic-conventions": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@arizeai/openinference-semantic-conventions/-/openinference-semantic-conventions-2.1.2.tgz", - "integrity": "sha512-u7UeuU9bJ1LxzHk0MPWb+1ZcotCcJwPnKDXi7Rl2cPs1pWMFg9Ogq7zzYZX+sDcibD2AEa1U+ElyOD8DwZc9gw==", - "license": "Apache-2.0" - }, - "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", - "license": "Apache-2.0", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/api-logs": { - "version": "0.54.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.54.2.tgz", - "integrity": "sha512-4MTVwwmLgUh5QrJnZpYo6YRO5IBLAggf2h8gWDblwRagDStY13aEvt7gGk3jewrMaPlHiF83fENhIx0HO97/cQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.3.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/context-async-hooks": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", - "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/core": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.27.0.tgz", - "integrity": "sha512-yQPKnK5e+76XuiqUH/gKyS8wv/7qITd5ln56QkBTf3uggr0VkXOXfcaAuG330UfdYu83wsyoBwqwxigpIG+Jkg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.27.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", - "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto": { - "version": "0.54.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.54.2.tgz", - "integrity": "sha512-XSmm1N2wAhoWDXP1q/N6kpLebWaxl6VIADv4WA5QWKHLRpF3gLz5NAWNJBR8ygsvv8jQcrwnXgwfnJ18H3v1fg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.27.0", - "@opentelemetry/otlp-exporter-base": "0.54.2", - "@opentelemetry/otlp-transformer": "0.54.2", - "@opentelemetry/resources": "1.27.0", - "@opentelemetry/sdk-trace-base": "1.27.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/resources": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.27.0.tgz", - "integrity": "sha512-jOwt2VJ/lUD5BLc+PMNymDrUCpm5PKi1E9oSVYAvz01U/VdndGmrtV3DU1pG4AwlYhJRHbHfOUIlpBeXCPw6QQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.27.0", - "@opentelemetry/semantic-conventions": "1.27.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.27.0.tgz", - "integrity": "sha512-btz6XTQzwsyJjombpeqCX6LhiMQYpzt2pIYNPnw0IPO/3AhT6yjnf8Mnv3ZC2A4eRYOjqrg+bfaXg9XHDRJDWQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.27.0", - "@opentelemetry/resources": "1.27.0", - "@opentelemetry/semantic-conventions": "1.27.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", - "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/instrumentation": { - "version": "0.54.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.54.2.tgz", - "integrity": "sha512-go6zpOVoZVztT9r1aPd79Fr3OWiD4N24bCPJsIKkBses8oyFo12F/Ew3UBTdIu6hsW4HC4MVEJygG6TEyJI/lg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.54.2", - "@types/shimmer": "^1.2.0", - "import-in-the-middle": "^1.8.1", - "require-in-the-middle": "^7.1.1", - "semver": "^7.5.2", - "shimmer": "^1.2.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.54.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.54.2.tgz", - "integrity": "sha512-NrNyxu6R/bGAwanhz1HI0aJWKR6xUED4TjCH4iWMlAfyRukGbI9Kt/Akd2sYLwRKNhfS+sKetKGCUQPMDyYYMA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.27.0", - "@opentelemetry/otlp-transformer": "0.54.2" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.54.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.54.2.tgz", - "integrity": "sha512-2tIjahJlMRRUz0A2SeE+qBkeBXBFkSjR0wqJ08kuOqaL8HNGan5iZf+A8cfrfmZzPUuMKCyY9I+okzFuFs6gKQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.54.2", - "@opentelemetry/core": "1.27.0", - "@opentelemetry/resources": "1.27.0", - "@opentelemetry/sdk-logs": "0.54.2", - "@opentelemetry/sdk-metrics": "1.27.0", - "@opentelemetry/sdk-trace-base": "1.27.0", - "protobufjs": "^7.3.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.27.0.tgz", - "integrity": "sha512-jOwt2VJ/lUD5BLc+PMNymDrUCpm5PKi1E9oSVYAvz01U/VdndGmrtV3DU1pG4AwlYhJRHbHfOUIlpBeXCPw6QQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.27.0", - "@opentelemetry/semantic-conventions": "1.27.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.27.0.tgz", - "integrity": "sha512-btz6XTQzwsyJjombpeqCX6LhiMQYpzt2pIYNPnw0IPO/3AhT6yjnf8Mnv3ZC2A4eRYOjqrg+bfaXg9XHDRJDWQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.27.0", - "@opentelemetry/resources": "1.27.0", - "@opentelemetry/semantic-conventions": "1.27.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", - "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/propagator-b3": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.30.1.tgz", - "integrity": "sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.30.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/propagator-b3/node_modules/@opentelemetry/core": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", - "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.28.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/propagator-b3/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/propagator-jaeger": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.30.1.tgz", - "integrity": "sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.30.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/propagator-jaeger/node_modules/@opentelemetry/core": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", - "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.28.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/propagator-jaeger/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/resources": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", - "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.30.1", - "@opentelemetry/semantic-conventions": "1.28.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", - "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.28.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/sdk-logs": { - "version": "0.54.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.54.2.tgz", - "integrity": "sha512-yIbYqDLS/AtBbPjCjh6eSToGNRMqW2VR8RrKEy+G+J7dFG7pKoptTH5T+XlKPleP9NY8JZYIpgJBlI+Osi0rFw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.54.2", - "@opentelemetry/core": "1.27.0", - "@opentelemetry/resources": "1.27.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.27.0.tgz", - "integrity": "sha512-jOwt2VJ/lUD5BLc+PMNymDrUCpm5PKi1E9oSVYAvz01U/VdndGmrtV3DU1pG4AwlYhJRHbHfOUIlpBeXCPw6QQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.27.0", - "@opentelemetry/semantic-conventions": "1.27.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", - "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.27.0.tgz", - "integrity": "sha512-JzWgzlutoXCydhHWIbLg+r76m+m3ncqvkCcsswXAQ4gqKS+LOHKhq+t6fx1zNytvLuaOUBur7EvWxECc4jPQKg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.27.0", - "@opentelemetry/resources": "1.27.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.27.0.tgz", - "integrity": "sha512-jOwt2VJ/lUD5BLc+PMNymDrUCpm5PKi1E9oSVYAvz01U/VdndGmrtV3DU1pG4AwlYhJRHbHfOUIlpBeXCPw6QQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.27.0", - "@opentelemetry/semantic-conventions": "1.27.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", - "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", - "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.30.1", - "@opentelemetry/resources": "1.30.1", - "@opentelemetry/semantic-conventions": "1.28.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/core": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", - "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.28.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/sdk-trace-node": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.30.1.tgz", - "integrity": "sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/context-async-hooks": "1.30.1", - "@opentelemetry/core": "1.30.1", - "@opentelemetry/propagator-b3": "1.30.1", - "@opentelemetry/propagator-jaeger": "1.30.1", - "@opentelemetry/sdk-trace-base": "1.30.1", - "semver": "^7.5.2" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/core": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", - "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.28.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", - "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause" - }, - "node_modules/@types/node": { - "version": "22.18.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.12.tgz", - "integrity": "sha512-BICHQ67iqxQGFSzfCFTT7MRQ5XcBjG5aeKh5Ok38UBbPe5fxTyE+aHFxwVrGyr8GNlqFMLKD1D3P2K/1ks8tog==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/shimmer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", - "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "deprecated": "package has been renamed to acorn-import-attributes", - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/import-in-the-middle": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz", - "integrity": "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==", - "license": "Apache-2.0", - "dependencies": { - "acorn": "^8.14.0", - "acorn-import-attributes": "^1.9.5", - "cjs-module-lexer": "^1.2.2", - "module-details-from-path": "^1.0.3" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "node_modules/module-details-from-path": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", - "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/openai": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-6.7.0.tgz", - "integrity": "sha512-mgSQXa3O/UXTbA8qFzoa7aydbXBJR5dbLQXCRapAOtoNT+v69sLdKMZzgiakpqhclRnhPggPAXoniVGn2kMY2A==", - "license": "Apache-2.0", - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.25 || ^4.0" - }, - "peerDependenciesMeta": { - "ws": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/require-in-the-middle": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", - "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.5", - "module-details-from-path": "^1.0.3", - "resolve": "^1.22.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", - "license": "BSD-2-Clause" - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - } - } -} diff --git a/examples/node/observability-opentelemetry/package.json b/examples/node/observability-opentelemetry/package.json index bc74d98dae..2f1a839079 100644 --- a/examples/node/observability-opentelemetry/package.json +++ b/examples/node/observability-opentelemetry/package.json @@ -1,25 +1,26 @@ { - "name": "agenta-opentelemetry-quickstart", - "version": "1.0.0", - "description": "Quick start example for using OpenTelemetry with Agenta", - "type": "module", - "scripts": { - "start": "node --import ./instrumentation.js app.js" - }, - "dependencies": { - "@arizeai/openinference-instrumentation-openai": "^3.2.3", - "@arizeai/openinference-semantic-conventions": "^2.1.2", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/exporter-trace-otlp-proto": "^0.54.0", - "@opentelemetry/instrumentation": "^0.54.0", - "@opentelemetry/resources": "^1.28.0", - "@opentelemetry/sdk-trace-base": "^1.28.0", - "@opentelemetry/sdk-trace-node": "^1.28.0", - "@opentelemetry/semantic-conventions": "^1.28.0", - "openai": "^6.7.0" - }, - "devDependencies": { - "@types/node": "^22.0.0", - "typescript": "^5.7.0" - } + "name": "agenta-opentelemetry-quickstart", + "version": "1.0.0", + "description": "Quick start example for using OpenTelemetry with Agenta", + "type": "module", + "scripts": { + "start": "node --import ./instrumentation.js app.js" + }, + "dependencies": { + "@arizeai/openinference-instrumentation-openai": "^2.3.1", + "@arizeai/openinference-semantic-conventions": "^2.1.2", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/exporter-trace-otlp-proto": "^0.54.0", + "@opentelemetry/instrumentation": "^0.54.0", + "@opentelemetry/resources": "^1.28.0", + "@opentelemetry/sdk-trace-base": "^1.28.0", + "@opentelemetry/sdk-trace-node": "^1.28.0", + "@opentelemetry/semantic-conventions": "^1.28.0", + "dotenv": "^17.2.3", + "openai": "^4.104.0" + }, + "devDependencies": { + "@types/node": "^22.0.0", + "typescript": "^5.7.0" + } } diff --git a/examples/node/observability-opentelemetry/pnpm-lock.yaml b/examples/node/observability-opentelemetry/pnpm-lock.yaml new file mode 100644 index 0000000000..9e357c23ac --- /dev/null +++ b/examples/node/observability-opentelemetry/pnpm-lock.yaml @@ -0,0 +1,868 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@arizeai/openinference-instrumentation-openai': + specifier: ^2.3.1 + version: 2.3.1 + '@arizeai/openinference-semantic-conventions': + specifier: ^2.1.2 + version: 2.1.7 + '@opentelemetry/api': + specifier: ^1.9.0 + version: 1.9.0 + '@opentelemetry/exporter-trace-otlp-proto': + specifier: ^0.54.0 + version: 0.54.2(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': + specifier: ^0.54.0 + version: 0.54.2(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': + specifier: ^1.28.0 + version: 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': + specifier: ^1.28.0 + version: 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': + specifier: ^1.28.0 + version: 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': + specifier: ^1.28.0 + version: 1.38.0 + dotenv: + specifier: ^17.2.3 + version: 17.2.3 + openai: + specifier: ^4.104.0 + version: 4.104.0 + devDependencies: + '@types/node': + specifier: ^22.0.0 + version: 22.19.3 + typescript: + specifier: ^5.7.0 + version: 5.9.3 + +packages: + + '@arizeai/openinference-core@1.0.3': + resolution: {integrity: sha512-X4nmUVgE8jdBDKStJ8huBZ60gm915eUCpi29BdgLm8/+8gZXctTUATL1v4dlGgCT+cv3VZmUgak74mJ2izx7kA==} + + '@arizeai/openinference-instrumentation-openai@2.3.1': + resolution: {integrity: sha512-8z5TEPwhj8fE7+6li2ufLP2jknkPTV7KAQwiNLj4/9IIz0o0dbFltm5O834bpE7LjzkGAqPt8CMVRDhpnw82IA==} + + '@arizeai/openinference-semantic-conventions@2.0.0': + resolution: {integrity: sha512-9FJaC5O94xjR0rR3emNl4J/qQIutr5WAPaFgBnOtznU9u8ondXXDafRKcHfOqWUc2JxuQqEUzPEOYfkOR+pPZQ==} + + '@arizeai/openinference-semantic-conventions@2.1.7': + resolution: {integrity: sha512-KyBfwxkSusPvxHBaW/TJ0japEbXCNziW9o6/IRKiPu+gp5TMKIagV2NKvt47rWYa4Jc0Nl+SvAPm+yxkdJqVbg==} + + '@opentelemetry/api-logs@0.54.2': + resolution: {integrity: sha512-4MTVwwmLgUh5QrJnZpYo6YRO5IBLAggf2h8gWDblwRagDStY13aEvt7gGk3jewrMaPlHiF83fENhIx0HO97/cQ==} + engines: {node: '>=14'} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/context-async-hooks@1.30.1': + resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.27.0': + resolution: {integrity: sha512-yQPKnK5e+76XuiqUH/gKyS8wv/7qITd5ln56QkBTf3uggr0VkXOXfcaAuG330UfdYu83wsyoBwqwxigpIG+Jkg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.30.1': + resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-trace-otlp-proto@0.54.2': + resolution: {integrity: sha512-XSmm1N2wAhoWDXP1q/N6kpLebWaxl6VIADv4WA5QWKHLRpF3gLz5NAWNJBR8ygsvv8jQcrwnXgwfnJ18H3v1fg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.46.0': + resolution: {integrity: sha512-a9TijXZZbk0vI5TGLZl+0kxyFfrXHhX6Svtz7Pp2/VBlCSKrazuULEyoJQrOknJyFWNMEmbbJgOciHCCpQcisw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.54.2': + resolution: {integrity: sha512-go6zpOVoZVztT9r1aPd79Fr3OWiD4N24bCPJsIKkBses8oyFo12F/Ew3UBTdIu6hsW4HC4MVEJygG6TEyJI/lg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-exporter-base@0.54.2': + resolution: {integrity: sha512-NrNyxu6R/bGAwanhz1HI0aJWKR6xUED4TjCH4iWMlAfyRukGbI9Kt/Akd2sYLwRKNhfS+sKetKGCUQPMDyYYMA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.54.2': + resolution: {integrity: sha512-2tIjahJlMRRUz0A2SeE+qBkeBXBFkSjR0wqJ08kuOqaL8HNGan5iZf+A8cfrfmZzPUuMKCyY9I+okzFuFs6gKQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/propagator-b3@1.30.1': + resolution: {integrity: sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@1.30.1': + resolution: {integrity: sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/resources@1.27.0': + resolution: {integrity: sha512-jOwt2VJ/lUD5BLc+PMNymDrUCpm5PKi1E9oSVYAvz01U/VdndGmrtV3DU1pG4AwlYhJRHbHfOUIlpBeXCPw6QQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/resources@1.30.1': + resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.54.2': + resolution: {integrity: sha512-yIbYqDLS/AtBbPjCjh6eSToGNRMqW2VR8RrKEy+G+J7dFG7pKoptTH5T+XlKPleP9NY8JZYIpgJBlI+Osi0rFw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@1.27.0': + resolution: {integrity: sha512-JzWgzlutoXCydhHWIbLg+r76m+m3ncqvkCcsswXAQ4gqKS+LOHKhq+t6fx1zNytvLuaOUBur7EvWxECc4jPQKg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@1.27.0': + resolution: {integrity: sha512-btz6XTQzwsyJjombpeqCX6LhiMQYpzt2pIYNPnw0IPO/3AhT6yjnf8Mnv3ZC2A4eRYOjqrg+bfaXg9XHDRJDWQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@1.30.1': + resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@1.30.1': + resolution: {integrity: sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.27.0': + resolution: {integrity: sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.28.0': + resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.38.0': + resolution: {integrity: sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg==} + engines: {node: '>=14'} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@types/node-fetch@2.6.13': + resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} + + '@types/node@18.19.130': + resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} + + '@types/node@22.19.3': + resolution: {integrity: sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==} + + '@types/shimmer@1.2.0': + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + acorn-import-assertions@1.9.0: + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + deprecated: package has been renamed to acorn-import-attributes + peerDependencies: + acorn: ^8 + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + import-in-the-middle@1.15.0: + resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} + + import-in-the-middle@1.7.1: + resolution: {integrity: sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + openai@4.104.0: + resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + protobufjs@7.5.4: + resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} + engines: {node: '>=12.0.0'} + + require-in-the-middle@7.5.2: + resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} + engines: {node: '>=8.6.0'} + + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + +snapshots: + + '@arizeai/openinference-core@1.0.3': + dependencies: + '@arizeai/openinference-semantic-conventions': 2.0.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + + '@arizeai/openinference-instrumentation-openai@2.3.1': + dependencies: + '@arizeai/openinference-core': 1.0.3 + '@arizeai/openinference-semantic-conventions': 2.0.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.46.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@arizeai/openinference-semantic-conventions@2.0.0': {} + + '@arizeai/openinference-semantic-conventions@2.1.7': {} + + '@opentelemetry/api-logs@0.54.2': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/exporter-trace-otlp-proto@0.54.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.54.2(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.2(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/instrumentation@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.7.1 + require-in-the-middle: 7.5.2 + semver: 7.7.3 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation@0.54.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.2 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.15.0 + require-in-the-middle: 7.5.2 + semver: 7.7.3 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/otlp-exporter-base@0.54.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.2(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-transformer@0.54.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.2 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.54.2(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + protobufjs: 7.5.4 + + '@opentelemetry/propagator-b3@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/propagator-jaeger@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/resources@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/sdk-logs@0.54.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.2 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-metrics@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + semver: 7.7.3 + + '@opentelemetry/semantic-conventions@1.27.0': {} + + '@opentelemetry/semantic-conventions@1.28.0': {} + + '@opentelemetry/semantic-conventions@1.38.0': {} + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@types/node-fetch@2.6.13': + dependencies: + '@types/node': 22.19.3 + form-data: 4.0.5 + + '@types/node@18.19.130': + dependencies: + undici-types: 5.26.5 + + '@types/node@22.19.3': + dependencies: + undici-types: 6.21.0 + + '@types/shimmer@1.2.0': {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + acorn-import-assertions@1.9.0(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn-import-attributes@1.9.5(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + + asynckit@0.4.0: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + cjs-module-lexer@1.4.3: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + delayed-stream@1.0.0: {} + + dotenv@17.2.3: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + event-target-shim@5.0.1: {} + + form-data-encoder@1.7.2: {} + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + formdata-node@4.4.1: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + + function-bind@1.1.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + gopd@1.2.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + import-in-the-middle@1.15.0: + dependencies: + acorn: 8.15.0 + acorn-import-attributes: 1.9.5(acorn@8.15.0) + cjs-module-lexer: 1.4.3 + module-details-from-path: 1.0.4 + + import-in-the-middle@1.7.1: + dependencies: + acorn: 8.15.0 + acorn-import-assertions: 1.9.0(acorn@8.15.0) + cjs-module-lexer: 1.4.3 + module-details-from-path: 1.0.4 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + long@5.3.2: {} + + math-intrinsics@1.1.0: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + module-details-from-path@1.0.4: {} + + ms@2.1.3: {} + + node-domexception@1.0.0: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + openai@4.104.0: + dependencies: + '@types/node': 18.19.130 + '@types/node-fetch': 2.6.13 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + path-parse@1.0.7: {} + + protobufjs@7.5.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 22.19.3 + long: 5.3.2 + + require-in-the-middle@7.5.2: + dependencies: + debug: 4.4.3 + module-details-from-path: 1.0.4 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + semver@7.7.3: {} + + shimmer@1.2.1: {} + + supports-preserve-symlinks-flag@1.0.0: {} + + tr46@0.0.3: {} + + typescript@5.9.3: {} + + undici-types@5.26.5: {} + + undici-types@6.21.0: {} + + web-streams-polyfill@4.0.0-beta.3: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 diff --git a/examples/python/annotation-example.py b/examples/python/annotation-example.py index cfaa099e36..4fde38f680 100644 --- a/examples/python/annotation-example.py +++ b/examples/python/annotation-example.py @@ -88,7 +88,7 @@ def generate(topic="witches", genre="comedy"): OpenAIInstrumentor().instrument() response = openai.chat.completions.create( - model="gpt-3.5-turbo", + model="gpt-5", messages=[ {"role": "system", "content": "You are a helpful assistant."}, { diff --git a/examples/python/custom_workflows/ai-code-reviewer/ai-code-reviewer.py b/examples/python/custom_workflows/ai-code-reviewer/ai-code-reviewer.py index 2703c420d2..4a9222150b 100644 --- a/examples/python/custom_workflows/ai-code-reviewer/ai-code-reviewer.py +++ b/examples/python/custom_workflows/ai-code-reviewer/ai-code-reviewer.py @@ -29,7 +29,7 @@ class Config(BaseModel): system_prompt: str = prompt_system user_prompt: str = prompt_user - model: str = MCField(default="gpt-3.5-turbo", choices=supported_llm_models) + model: str = MCField(default="gpt-5", choices=supported_llm_models) @ag.instrument() diff --git a/examples/python/custom_workflows/chain_of_prompts/cop.py b/examples/python/custom_workflows/chain_of_prompts/cop.py index 1af034895d..86a3beb56d 100644 --- a/examples/python/custom_workflows/chain_of_prompts/cop.py +++ b/examples/python/custom_workflows/chain_of_prompts/cop.py @@ -25,12 +25,12 @@ def generate(blog_post: str): config = ag.ConfigManager.get_from_route(schema=CoPConfig) formatted_prompt1 = config.prompt1.format(blog_post=blog_post) completion = client.chat.completions.create( - model="gpt-3.5-turbo", messages=[{"role": "user", "content": formatted_prompt1}] + model="gpt-5", messages=[{"role": "user", "content": formatted_prompt1}] ) output_1 = completion.choices[0].message.content formatted_prompt2 = config.prompt2.format(output_1=output_1) completion = client.chat.completions.create( - model="gpt-3.5-turbo", messages=[{"role": "user", "content": formatted_prompt2}] + model="gpt-5", messages=[{"role": "user", "content": formatted_prompt2}] ) return completion.choices[0].message.content diff --git a/examples/python/custom_workflows/rag-docs-qa/generate_testset.py b/examples/python/custom_workflows/rag-docs-qa/generate_testset.py index 0eb362fd6d..94f5a57b29 100644 --- a/examples/python/custom_workflows/rag-docs-qa/generate_testset.py +++ b/examples/python/custom_workflows/rag-docs-qa/generate_testset.py @@ -46,7 +46,7 @@ def generate_questions(title, content): try: response = completion( - model="gpt-3.5-turbo-0125", # Using the latest model that supports JSON mode + model="gpt-5", # Using the latest model that supports JSON mode messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt}, diff --git a/examples/python/custom_workflows/rag-docs-qa/query.py b/examples/python/custom_workflows/rag-docs-qa/query.py index 2bee1789e3..4de9bf1fb9 100644 --- a/examples/python/custom_workflows/rag-docs-qa/query.py +++ b/examples/python/custom_workflows/rag-docs-qa/query.py @@ -31,7 +31,7 @@ class Config(BaseModel): system_prompt: str = Field(default=system_prompt) user_prompt: str = Field(default=user_prompt) embedding_model: str = MCField(default="openai", choices=["openai", "cohere"]) - llm_model: str = MCField(default="gpt-3.5-turbo", choices=supported_llm_models) + llm_model: str = MCField(default="gpt-5", choices=supported_llm_models) top_k: int = Field(default=10, ge=1, le=25) rerank_top_k: int = Field(default=3, ge=1, le=10) use_rerank: bool = Field(default=True)