Skip to content

feat(crewai-instrumentor, llamaindex-instrumentor): add invoke_workflow span support for LlamaIndex AgentWorkflow and CrewAI#705

Merged
liustve merged 18 commits intomainfrom
feat/invoke-workflow-and-agent-workflow-support
Apr 3, 2026
Merged

feat(crewai-instrumentor, llamaindex-instrumentor): add invoke_workflow span support for LlamaIndex AgentWorkflow and CrewAI#705
liustve merged 18 commits intomainfrom
feat/invoke-workflow-and-agent-workflow-support

Conversation

@liustve
Copy link
Copy Markdown
Contributor

@liustve liustve commented Apr 2, 2026

Description of changes:

  • Add invoke_workflow span for LlamaIndex AgentWorkflow.run() and CrewAI Crew.kickoff() following the OTel GenAI semantic conventions open-telemetry/semantic-conventions#3249
  • Add invoke_agent span for LlamaIndex workflow agent steps, merging ReAct iterations into one span per agent
  • Suppress jinja2 instrumentation in agent observability mode to reduce trace noise from LlamaIndex template rendering
  • Bump LlamaIndex minimum from 0.10.44 to 0.13.0

Testing:

  • Unit tests added
  • E2E testing with CrewAI and LLamaIndex:
WARNING:root:LLM event emitted outside call context - generating fallback call_id
{
    "name": "chat gpt-4",
    "context": {
        "trace_id": "0x9e7cb9200dc4e94da082ca558872ff3b",
        "span_id": "0xbb52e545f367b9ac",
        "trace_state": "[]"
    },
    "kind": "SpanKind.INTERNAL",
    "parent_id": "0x9886147b550546f6",
    "start_time": "2026-04-02T19:31:11.176007Z",
    "end_time": "2026-04-02T19:31:11.178020Z",
    "status": {
        "status_code": "OK"
    },
    "attributes": {
        "gen_ai.operation.name": "chat",
        "gen_ai.provider.name": "openai",
        "gen_ai.request.model": "gpt-4",
        "gen_ai.system_instructions": "[{\"type\": \"text\", \"content\": \"You are Greeter. You are a friendly greeter.\\nYour personal goal is: Greet people\"}]",
        "gen_ai.input.messages": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"\\nCurrent Task: Greet World\\n\\nThis is the expected criteria for your final answer: A greeting.\\nyou MUST return the actual complete content as the final answer, not a summary.\"}]}]",
        "gen_ai.output.messages": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"tool_call\", \"name\": \"get_greeting\", \"arguments\": {\"name\": \"World\"}}], \"finish_reason\": \"tool_call\"}]",
        "gen_ai.response.model": "gpt-4",
        "gen_ai.usage.input_tokens": 1,
        "gen_ai.usage.output_tokens": 1
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.40.0",
            "service.name": "unknown_service"
        },
        "schema_url": ""
    }
}
{
    "name": "execute_tool get_greeting",
    "context": {
        "trace_id": "0x9e7cb9200dc4e94da082ca558872ff3b",
        "span_id": "0x16c12ef0f504dd8f",
        "trace_state": "[]"
    },
    "kind": "SpanKind.INTERNAL",
    "parent_id": "0x9886147b550546f6",
    "start_time": "2026-04-02T19:31:11.178242Z",
    "end_time": "2026-04-02T19:31:11.178453Z",
    "status": {
        "status_code": "OK"
    },
    "attributes": {
        "gen_ai.operation.name": "execute_tool",
        "gen_ai.tool.type": "function",
        "gen_ai.tool.name": "get_greeting",
        "gen_ai.tool.description": "Tool Name: get_greeting\nTool Arguments: {\n  \"properties\": {\n    \"name\": {\n      \"title\": \"Name\",\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"name\"\n  ],\n  \"title\": \"Get_Greeting\",\n  \"type\": \"object\",\n  \"additionalProperties\": false\n}\nTool Description: Get a greeting for someone",
        "gen_ai.provider.name": "openai",
        "gen_ai.request.model": "gpt-4",
        "gen_ai.tool.call.arguments": "{\"name\": \"World\"}",
        "gen_ai.tool.call.result": "\"Hello World!\""
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.40.0",
            "service.name": "unknown_service"
        },
        "schema_url": ""
    }
}
{
    "name": "chat gpt-4",
    "context": {
        "trace_id": "0x9e7cb9200dc4e94da082ca558872ff3b",
        "span_id": "0x672dbb753d2a9c19",
        "trace_state": "[]"
    },
    "kind": "SpanKind.INTERNAL",
    "parent_id": "0x9886147b550546f6",
    "start_time": "2026-04-02T19:31:11.178651Z",
    "end_time": "2026-04-02T19:31:11.180069Z",
    "status": {
        "status_code": "OK"
    },
    "attributes": {
        "gen_ai.operation.name": "chat",
        "gen_ai.provider.name": "openai",
        "gen_ai.request.model": "gpt-4",
        "gen_ai.system_instructions": "[{\"type\": \"text\", \"content\": \"You are Greeter. You are a friendly greeter.\\nYour personal goal is: Greet people\"}]",
        "gen_ai.input.messages": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"\\nCurrent Task: Greet World\\n\\nThis is the expected criteria for your final answer: A greeting.\\nyou MUST return the actual complete content as the final answer, not a summary.\"}]}, {\"role\": \"assistant\", \"parts\": [{\"type\": \"tool_call\", \"id\": \"call_1\"}]}, {\"role\": \"tool\", \"parts\": [{\"type\": \"tool_call_response\", \"id\": \"call_1\", \"response\": \"Hello World!\"}]}, {\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Analyze the tool result. If requirements are met, provide the Final Answer. Otherwise, call the next tool. Deliver only the answer without meta-commentary.\"}]}]",
        "gen_ai.output.messages": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"Thought: I now know the final answer\\nFinal Answer: Hello World!\"}], \"finish_reason\": \"stop\"}]",
        "gen_ai.response.model": "gpt-4",
        "gen_ai.usage.input_tokens": 1,
        "gen_ai.usage.output_tokens": 1
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.40.0",
            "service.name": "unknown_service"
        },
        "schema_url": ""
    }
}
{
    "name": "invoke_agent Greeter",
    "context": {
        "trace_id": "0x9e7cb9200dc4e94da082ca558872ff3b",
        "span_id": "0x9886147b550546f6",
        "trace_state": "[]"
    },
    "kind": "SpanKind.INTERNAL",
    "parent_id": "0x03496a39dc7be2d7",
    "start_time": "2026-04-02T19:31:11.175538Z",
    "end_time": "2026-04-02T19:31:11.180400Z",
    "status": {
        "status_code": "OK"
    },
    "attributes": {
        "gen_ai.operation.name": "invoke_agent",
        "gen_ai.agent.name": "Greeter",
        "gen_ai.agent.id": "6e4c0852-87ae-4be5-b11d-df203ead6cb6",
        "gen_ai.agent.description": "Greet people",
        "gen_ai.system_instructions": "You are a friendly greeter.",
        "gen_ai.provider.name": "openai",
        "gen_ai.request.model": "gpt-4"
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.40.0",
            "service.name": "unknown_service"
        },
        "schema_url": ""
    }
}
{
    "name": "invoke_workflow GreetingCrew",
    "context": {
        "trace_id": "0x9e7cb9200dc4e94da082ca558872ff3b",
        "span_id": "0x03496a39dc7be2d7",
        "trace_state": "[]"
    },
    "kind": "SpanKind.INTERNAL",
    "parent_id": null,
    "start_time": "2026-04-02T19:31:11.168711Z",
    "end_time": "2026-04-02T19:31:11.183189Z",
    "status": {
        "status_code": "OK"
    },
    "attributes": {
        "gen_ai.operation.name": "invoke_workflow",
        "gen_ai.workflow.name": "GreetingCrew",
        "gen_ai.agent.id": "7eebdca4-e295-464a-a1d7-329998e02f93",
        "gen_ai.tool.definitions": "[{\"type\": \"function\", \"name\": \"get_greeting\", \"description\": \"Tool Name: get_greeting\\nTool Arguments: {\\n  \\\"properties\\\": {\\n    \\\"name\\\": {\\n      \\\"title\\\": \\\"Name\\\",\\n      \\\"type\\\": \\\"string\\\"\\n    }\\n  },\\n  \\\"required\\\": [\\n    \\\"name\\\"\\n  ],\\n  \\\"title\\\": \\\"Get_Greeting\\\",\\n  \\\"type\\\": \\\"object\\\",\\n  \\\"additionalProperties\\\": false\\n}\\nTool Description: Get a greeting for someone\", \"parameters\": {\"properties\": {\"name\": {\"title\": \"Name\", \"type\": \"string\"}}, \"required\": [\"name\"], \"title\": \"Get_Greeting\", \"type\": \"object\"}}]"
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.40.0",
            "service.name": "unknown_service"
        },
        "schema_url": ""
    }
}
{
    "name": "chat us.anthropic.claude-sonnet-4-20250514-v1:0",
    "context": {
        "trace_id": "0xc626744ad1f2632500b94131f23f6090",
        "span_id": "0x09ec58e5f0a11a30",
        "trace_state": "[]"
    },
    "kind": "SpanKind.INTERNAL",
    "parent_id": "0x20887e9dbe3d8c5d",
    "start_time": "2026-04-02T19:30:48.591392Z",
    "end_time": "2026-04-02T19:30:49.060111Z",
    "status": {
        "status_code": "OK"
    },
    "attributes": {
        "gen_ai.request.model": "us.anthropic.claude-sonnet-4-20250514-v1:0",
        "gen_ai.provider.name": "aws.bedrock",
        "gen_ai.request.temperature": 0.1,
        "gen_ai.request.max_tokens": 200,
        "gen_ai.tool.definitions": "[\"tools\", \"toolChoice\"]",
        "gen_ai.operation.name": "chat",
        "gen_ai.system_instructions": "[{\"type\": \"text\", \"content\": \"You are a pet records specialist. Use tools to look up pets.\"}]",
        "gen_ai.input.messages": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Look up pet PET001\"}]}]"
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.40.0",
            "service.name": "unknown_service"
        },
        "schema_url": ""
    }
}
Open span is missing for span_id=BedrockConverse.astream_chat-3e1d0f16-6d83-46d3-9337-b02e89091539, event_id=7f63a06d-196f-4fed-8272-a074eb2bc9eb
Open span is missing for span_id=BedrockConverse.astream_chat-3e1d0f16-6d83-46d3-9337-b02e89091539, event_id=340d5fb1-46b6-4bb0-b88c-2c9e6d8a5638
Open span is missing for span_id=BedrockConverse.astream_chat-3e1d0f16-6d83-46d3-9337-b02e89091539, event_id=0e630fb1-4428-46b0-a4f3-e56cffaed0a5
Open span is missing for span_id=BedrockConverse.astream_chat-3e1d0f16-6d83-46d3-9337-b02e89091539, event_id=8a09f7fa-893a-4627-9242-b3f697e854a5
Open span is missing for span_id=BedrockConverse.astream_chat-3e1d0f16-6d83-46d3-9337-b02e89091539, event_id=fbc0f545-5b57-4fd4-87e2-4f4896241fb6
Open span is missing for span_id=BedrockConverse.astream_chat-3e1d0f16-6d83-46d3-9337-b02e89091539, event_id=511d0877-d42d-45e0-bac4-2f08c91c3fee
Open span is missing for span_id=BedrockConverse.astream_chat-3e1d0f16-6d83-46d3-9337-b02e89091539, event_id=21f1c125-fbf2-4754-b41c-36c2bfaea374
Open span is missing for span_id=BedrockConverse.astream_chat-3e1d0f16-6d83-46d3-9337-b02e89091539, event_id=4bf025d9-ff17-421b-97c5-d231f3bdc8ac
Open span is missing for span_id=BedrockConverse.astream_chat-3e1d0f16-6d83-46d3-9337-b02e89091539, event_id=be322542-33af-4d71-8d7b-08be813b6c6c
Open span is missing for span_id=BedrockConverse.astream_chat-3e1d0f16-6d83-46d3-9337-b02e89091539, event_id=b6dcac60-dfab-40c7-a1c9-53cd7fa51664
{
    "name": "execute_tool lookup_pet",
    "context": {
        "trace_id": "0xc626744ad1f2632500b94131f23f6090",
        "span_id": "0x2ac5b771c3a2286c",
        "trace_state": "[]"
    },
    "kind": "SpanKind.INTERNAL",
    "parent_id": "0x33756b5d86a90ed0",
    "start_time": "2026-04-02T19:30:50.387954Z",
    "end_time": "2026-04-02T19:30:50.388194Z",
    "status": {
        "status_code": "OK"
    },
    "attributes": {
        "gen_ai.operation.name": "execute_tool",
        "gen_ai.tool.description": "Look up a pet by ID",
        "gen_ai.tool.name": "lookup_pet",
        "gen_ai.tool.call.arguments": "{\"pet_id\": \"PET001\"}",
        "gen_ai.tool.call.result": "{\"pet_id\": \"PET001\", \"name\": \"Buddy\", \"species\": \"dog\", \"breed\": \"Golden Retriever\"}"
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.40.0",
            "service.name": "unknown_service"
        },
        "schema_url": ""
    }
}
{
    "name": "chat us.anthropic.claude-sonnet-4-20250514-v1:0",
    "context": {
        "trace_id": "0xc626744ad1f2632500b94131f23f6090",
        "span_id": "0xcb946943a01edace",
        "trace_state": "[]"
    },
    "kind": "SpanKind.INTERNAL",
    "parent_id": "0x20887e9dbe3d8c5d",
    "start_time": "2026-04-02T19:30:50.389761Z",
    "end_time": "2026-04-02T19:30:50.390160Z",
    "status": {
        "status_code": "OK"
    },
    "attributes": {
        "gen_ai.request.model": "us.anthropic.claude-sonnet-4-20250514-v1:0",
        "gen_ai.provider.name": "aws.bedrock",
        "gen_ai.request.temperature": 0.1,
        "gen_ai.request.max_tokens": 200,
        "gen_ai.tool.definitions": "[\"tools\", \"toolChoice\"]",
        "gen_ai.operation.name": "chat",
        "gen_ai.system_instructions": "[{\"type\": \"text\", \"content\": \"You are a pet records specialist. Use tools to look up pets.\"}]",
        "gen_ai.input.messages": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Look up pet PET001\"}]}, {\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"I'll look up the pet with ID \\\"PET001\\\" for you.\"}]}, {\"role\": \"tool\", \"parts\": [{\"type\": \"text\", \"content\": \"{\\\"pet_id\\\": \\\"PET001\\\", \\\"name\\\": \\\"Buddy\\\", \\\"species\\\": \\\"dog\\\", \\\"breed\\\": \\\"Golden Retriever\\\"}\"}]}]"
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.40.0",
            "service.name": "unknown_service"
        },
        "schema_url": ""
    }
}
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=f522e128-e10c-4e24-90b4-08be4f6cbbfc
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=dccab180-dc82-4a14-af1b-284d086ab1f8
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=2707786f-1c4c-40aa-bde1-e0cb21eccba1
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=be99782a-ddca-4faf-a706-a42c18904c8e
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=496fdd2e-4e6d-4ca4-a9fe-64f6f62e68f2
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=6aadad22-90de-43bc-8907-f4d931f18665
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=fc5e72d8-551a-4cf6-98b0-faae7936437b
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=3a533ea8-1cdd-4f9b-961d-46354a7c644b
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=13db4508-66b3-47da-bde0-876d1135995f
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=5c5244dd-be41-4fae-8439-441b3b6eb2b4
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=4d59f5cb-cd98-44d0-93be-f4116621c54a
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=815a1216-59fc-410c-9268-3ae1291071f2
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=50b7dff5-059d-4fd6-943e-d3d51a829f46
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=db6e6dc9-628e-4527-a8a9-9eb84e2e1e34
Open span is missing for span_id=BedrockConverse.astream_chat-b958be4d-e3c0-4f55-99ba-7bc31488ed5a, event_id=20f94aa2-8d0e-4efa-bd75-edf58ae61d37
Failed to detach context
Traceback (most recent call last):
  File "/Users/liustve/aws-otel-python-instrumentation/AgentsStudioForTriton/pet-clinic-agents/.venv/lib/python3.12/site-packages/opentelemetry/context/__init__.py", line 155, in detach
    _RUNTIME_CONTEXT.detach(token)
  File "/Users/liustve/aws-otel-python-instrumentation/AgentsStudioForTriton/pet-clinic-agents/.venv/lib/python3.12/site-packages/opentelemetry/context/contextvars_context.py", line 53, in detach
    self._current_context.reset(token)
ValueError: <Token var=<ContextVar name='current_context' default={} at 0x105b93ec0> at 0x115cb9280> was created in a different Context
{
    "name": "invoke_agent RecordsAgent",
    "context": {
        "trace_id": "0xc626744ad1f2632500b94131f23f6090",
        "span_id": "0x20887e9dbe3d8c5d",
        "trace_state": "[]"
    },
    "kind": "SpanKind.INTERNAL",
    "parent_id": "0x33756b5d86a90ed0",
    "start_time": "2026-04-02T19:30:48.589952Z",
    "end_time": "2026-04-02T19:30:51.620018Z",
    "status": {
        "status_code": "OK"
    },
    "attributes": {
        "gen_ai.operation.name": "invoke_agent",
        "gen_ai.agent.name": "RecordsAgent",
        "gen_ai.system_instructions": "You are a pet records specialist. Use tools to look up pets."
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.40.0",
            "service.name": "unknown_service"
        },
        "schema_url": ""
    }
}
{
    "name": "invoke_workflow pet_records_search",
    "context": {
        "trace_id": "0xc626744ad1f2632500b94131f23f6090",
        "span_id": "0x33756b5d86a90ed0",
        "trace_state": "[]"
    },
    "kind": "SpanKind.INTERNAL",
    "parent_id": null,
    "start_time": "2026-04-02T19:30:48.490262Z",
    "end_time": "2026-04-02T19:30:51.620132Z",
    "status": {
        "status_code": "OK"
    },
    "attributes": {
        "gen_ai.operation.name": "invoke_workflow",
        "gen_ai.workflow.name": "pet_records_search"
    },
    "events": [],
    "links": [],
    "resource": {
        "attributes": {
            "telemetry.sdk.language": "python",
            "telemetry.sdk.name": "opentelemetry",
            "telemetry.sdk.version": "1.40.0",
            "service.name": "unknown_service"
        },
        "schema_url": ""
    }
}

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@liustve liustve requested a review from a team as a code owner April 2, 2026 19:39
@liustve liustve force-pushed the feat/invoke-workflow-and-agent-workflow-support branch 4 times, most recently from 184e060 to ef42d9d Compare April 2, 2026 19:59
@liustve liustve force-pushed the feat/invoke-workflow-and-agent-workflow-support branch from ef42d9d to bd26cdc Compare April 2, 2026 20:02
@liustve liustve force-pushed the feat/invoke-workflow-and-agent-workflow-support branch 4 times, most recently from 13d5b1d to 0e3eb9c Compare April 2, 2026 23:32
@liustve liustve force-pushed the feat/invoke-workflow-and-agent-workflow-support branch from 0e3eb9c to c4727a6 Compare April 2, 2026 23:34
wangzlei
wangzlei previously approved these changes Apr 2, 2026
@liustve liustve force-pushed the feat/invoke-workflow-and-agent-workflow-support branch 5 times, most recently from 4d1c9ec to 2fee0e1 Compare April 2, 2026 23:56
@liustve liustve force-pushed the feat/invoke-workflow-and-agent-workflow-support branch from 2fee0e1 to d7d22f5 Compare April 2, 2026 23:58
wangzlei
wangzlei previously approved these changes Apr 3, 2026
@liustve liustve force-pushed the feat/invoke-workflow-and-agent-workflow-support branch from 0a71710 to bd3ac27 Compare April 3, 2026 00:48
@liustve liustve changed the title feat(instrumentors): add invoke_workflow span support for LlamaIndex AgentWorkflow and CrewAI feat(crewai-instrumentor, llamaindex-instrumentor): add invoke_workflow span support for LlamaIndex AgentWorkflow and CrewAI Apr 3, 2026
@liustve liustve enabled auto-merge (squash) April 3, 2026 01:07
liustve and others added 2 commits April 2, 2026 18:30
P0:
- Use SpanKind.CLIENT for inference spans (chat, text_completion, embeddings)

P1:
- Replace deprecated error.message with error.type in CrewAI
- Replace deprecated gen_ai.prompt with gen_ai.input.messages in LangChain
- Replace deprecated gen_ai.prompt with gen_ai.prompt.name in MCP
- Add gen_ai.response.model extraction in LlamaIndex
- Add gen_ai.response.finish_reasons (LangChain, CrewAI - real values only)
- Remove system_instructions from invoke_agent spans (redundant with chat)
- Remove on_agent_action/on_agent_finish from LangChain (dead code)
- Add record_exception() to LangChain error handling

P2:
- Rename retrieve to retrieval using GenAiOperationNameValues.RETRIEVAL
- Add ToolCallRequestPart and ReasoningPart to LlamaIndex output messages
- Add request params (frequency_penalty, presence_penalty, stop_sequences,
  top_p, top_k) to LangChain, CrewAI, and LlamaIndex
- Replace hardcoded strings with OTel semconv imports in contract tests
- Add system_instructions assertion to chat spans in contract tests

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@liustve liustve merged commit 7dc0a2c into main Apr 3, 2026
17 checks passed
@liustve liustve deleted the feat/invoke-workflow-and-agent-workflow-support branch April 3, 2026 02:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants