diff --git a/docs/reference/ecs-gen_ai.md b/docs/reference/ecs-gen_ai.md index 23300697b2..8cc16fdaf1 100644 --- a/docs/reference/ecs-gen_ai.md +++ b/docs/reference/ecs-gen_ai.md @@ -20,7 +20,9 @@ This field group definition is based on the Gen AI namespace of the OpenTelemetr | $$$field-gen-ai-agent-description$$$ [gen_ai.agent.description](#field-gen-ai-agent-description) | _This field is beta and subject to change._ Free-form description of the GenAI agent provided by the application.

type: keyword

example: `Helps with math problems; Generates fiction stories`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.agent.description](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-agent-description) | extended | | $$$field-gen-ai-agent-id$$$ [gen_ai.agent.id](#field-gen-ai-agent-id) | _This field is beta and subject to change._ The unique identifier of the GenAI agent.

type: keyword

example: `asst_5j66UpCpwteGg4YSxUnt7lPY`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.agent.id](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-agent-id) | extended | | $$$field-gen-ai-agent-name$$$ [gen_ai.agent.name](#field-gen-ai-agent-name) | _This field is beta and subject to change._ Human-readable name of the GenAI agent provided by the application.

type: keyword

example: `Math Tutor; Fiction Writer`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.agent.name](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-agent-name) | extended | +| $$$field-gen-ai-input-messages$$$ [gen_ai.input.messages](#field-gen-ai-input-messages) | _This field is beta and subject to change._ The chat history provided to the model as an input.

type: flattened

example: `{ "role": "user", "parts": [ { "type": "text", "content": "Weather in Paris?" } ]}, { "role": "assistant", "parts": [ { "type": "tool_call", "id": "call_VSPygqKTWdrhaFErNvMV18Yl", "name": "get_weather", "arguments": { "location": "Paris" } } ]}, { "role": "tool", "parts": [ { "type": "tool_call_response", "id": " call_VSPygqKTWdrhaFErNvMV18Yl", "result": "rainy, 57°F" } ]}`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.input.messages](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-input-messages) | extended | | $$$field-gen-ai-operation-name$$$ [gen_ai.operation.name](#field-gen-ai-operation-name) | _This field is beta and subject to change._ The name of the operation being performed.

type: keyword

example: `chat; text_completion; embeddings`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.operation.name](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-operation-name) | extended | +| $$$field-gen-ai-output-messages$$$ [gen_ai.output.messages](#field-gen-ai-output-messages) | _This field is beta and subject to change._ Messages returned by the model where each message represents a specific model response (choice, candidate).

type: flattened

example: `{ "role": "assistant", "parts": [ { "type": "text", "content": "The weather in Paris is currently rainy with a temperature of 57°F." } ], "finish_reason": "stop"}`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.output.messages](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-output-messages) | extended | | $$$field-gen-ai-output-type$$$ [gen_ai.output.type](#field-gen-ai-output-type) | _This field is beta and subject to change._ Represents the content type requested by the client.

type: keyword

example: `text; json; image`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.output.type](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-output-type) | extended | | $$$field-gen-ai-request-choice-count$$$ [gen_ai.request.choice.count](#field-gen-ai-request-choice-count) | _This field is beta and subject to change._ The target number of candidate completions to return.

type: integer

example: `3`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.choice.count](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-choice-count) | extended | | $$$field-gen-ai-request-encoding-formats$$$ [gen_ai.request.encoding_formats](#field-gen-ai-request-encoding-formats) | _This field is beta and subject to change._ The encoding formats requested in an embeddings operation, if specified.

type: nested

example: `["float", "binary"]`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.encoding_formats](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-encoding-formats) | extended | @@ -37,8 +39,12 @@ This field group definition is based on the Gen AI namespace of the OpenTelemetr | $$$field-gen-ai-response-id$$$ [gen_ai.response.id](#field-gen-ai-response-id) | _This field is beta and subject to change._ The unique identifier for the completion.

type: keyword

example: `chatcmpl-123`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.response.id](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-response-id) | extended | | $$$field-gen-ai-response-model$$$ [gen_ai.response.model](#field-gen-ai-response-model) | _This field is beta and subject to change._ The name of the model that generated the response.

type: keyword

example: `gpt-4-0613`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.response.model](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-response-model) | extended | | $$$field-gen-ai-system$$$ [gen_ai.system](#field-gen-ai-system) | _This field is beta and subject to change._ The Generative AI product as identified by the client or server instrumentation.

type: keyword

example: `openai`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![equivalent](https://img.shields.io/badge/equivalent-1ba9f5?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.provider.name](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-provider-name) | extended | +| $$$field-gen-ai-system-instructions$$$ [gen_ai.system_instructions](#field-gen-ai-system-instructions) | _This field is beta and subject to change._ The system message or instructions provided to the GenAI model separately from the chat history.

type: flattened

example: `{ "type": "text", "content": "You are an Agent that greet users, always use greetings tool to respond"}`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.system_instructions](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-system-instructions) | extended | | $$$field-gen-ai-token-type$$$ [gen_ai.token.type](#field-gen-ai-token-type) | _This field is beta and subject to change._ The type of token being counted.

type: keyword

example: `input; output`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.token.type](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-token-type) | extended | +| $$$field-gen-ai-tool-call-arguments$$$ [gen_ai.tool.call.arguments](#field-gen-ai-tool-call-arguments) | _This field is beta and subject to change._ Parameters passed to the tool call.

type: flattened

example: `{ "location": "San Francisco?", "date": "2025-10-01"}`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.tool.call.arguments](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-call-arguments) | extended | | $$$field-gen-ai-tool-call-id$$$ [gen_ai.tool.call.id](#field-gen-ai-tool-call-id) | _This field is beta and subject to change._ The tool call identifier.

type: keyword

example: `call_mszuSIzqtI65i1wAUOE8w5H4`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.tool.call.id](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-call-id) | extended | +| $$$field-gen-ai-tool-call-result$$$ [gen_ai.tool.call.result](#field-gen-ai-tool-call-result) | _This field is beta and subject to change._ The result returned by the tool call (if any and if execution was successful).

type: flattened

example: `{ "temperature_range": { "high": 75, "low": 60 }, "conditions": "sunny"}`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.tool.call.result](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-call-result) | extended | +| $$$field-gen-ai-tool-definitions$$$ [gen_ai.tool.definitions](#field-gen-ai-tool-definitions) | _This field is beta and subject to change._ The list of source system tool definitions available to the GenAI agent or model.

type: flattened

example: `{ "type": "function", "name": "get_current_weather", "description": "Get the current weather in a given location", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g. San Francisco, CA" }, "unit": { "type": "string", "enum": [ "celsius", "fahrenheit" ] } }, "required": [ "location", "unit" ] }}`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.tool.definitions](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-definitions) | extended | | $$$field-gen-ai-tool-name$$$ [gen_ai.tool.name](#field-gen-ai-tool-name) | _This field is beta and subject to change._ Name of the tool utilized by the agent.

type: keyword

example: `Flights`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.tool.name](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-name) | extended | | $$$field-gen-ai-tool-type$$$ [gen_ai.tool.type](#field-gen-ai-tool-type) | _This field is beta and subject to change._ Type of the tool utilized by the agent

type: keyword

example: `function; extension; datastore`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.tool.type](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-type) | extended | | $$$field-gen-ai-usage-input-tokens$$$ [gen_ai.usage.input_tokens](#field-gen-ai-usage-input-tokens) | _This field is beta and subject to change._ The number of tokens used in the GenAI input (prompt).

type: integer

example: `100`

![OTel Badge](https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry) [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.usage.input_tokens](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-usage-input-tokens) | extended | diff --git a/docs/reference/ecs-otel-alignment-details.md b/docs/reference/ecs-otel-alignment-details.md index 3e02429062..f8fd2b90eb 100644 --- a/docs/reference/ecs-otel-alignment-details.md +++ b/docs/reference/ecs-otel-alignment-details.md @@ -89,7 +89,9 @@ The following table gives an overview of mappings between individual ECS fields | $$$otel-mapping-for-gen-ai-agent-description$$$ [gen_ai.agent.description](/reference/ecs-gen_ai.md#field-gen-ai-agent-description) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.agent.description](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-agent-description) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-agent-id$$$ [gen_ai.agent.id](/reference/ecs-gen_ai.md#field-gen-ai-agent-id) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.agent.id](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-agent-id) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-agent-name$$$ [gen_ai.agent.name](/reference/ecs-gen_ai.md#field-gen-ai-agent-name) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.agent.name](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-agent-name) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | +| $$$otel-mapping-for-gen-ai-input-messages$$$ [gen_ai.input.messages](/reference/ecs-gen_ai.md#field-gen-ai-input-messages) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.input.messages](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-input-messages) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-operation-name$$$ [gen_ai.operation.name](/reference/ecs-gen_ai.md#field-gen-ai-operation-name) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.operation.name](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-operation-name) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | +| $$$otel-mapping-for-gen-ai-output-messages$$$ [gen_ai.output.messages](/reference/ecs-gen_ai.md#field-gen-ai-output-messages) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.output.messages](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-output-messages) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-output-type$$$ [gen_ai.output.type](/reference/ecs-gen_ai.md#field-gen-ai-output-type) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.output.type](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-output-type) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-request-choice-count$$$ [gen_ai.request.choice.count](/reference/ecs-gen_ai.md#field-gen-ai-request-choice-count) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.request.choice.count](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-choice-count) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-request-encoding-formats$$$ [gen_ai.request.encoding_formats](/reference/ecs-gen_ai.md#field-gen-ai-request-encoding-formats) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.request.encoding_formats](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-encoding-formats) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | @@ -106,8 +108,12 @@ The following table gives an overview of mappings between individual ECS fields | $$$otel-mapping-for-gen-ai-response-id$$$ [gen_ai.response.id](/reference/ecs-gen_ai.md#field-gen-ai-response-id) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.response.id](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-response-id) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-response-model$$$ [gen_ai.response.model](/reference/ecs-gen_ai.md#field-gen-ai-response-model) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.response.model](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-response-model) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-system$$$ [gen_ai.system](/reference/ecs-gen_ai.md#field-gen-ai-system) | [![equivalent](https://img.shields.io/badge/equivalent-1ba9f5?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.provider.name](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-provider-name) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | +| $$$otel-mapping-for-gen-ai-system-instructions$$$ [gen_ai.system_instructions](/reference/ecs-gen_ai.md#field-gen-ai-system-instructions) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.system_instructions](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-system-instructions) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-token-type$$$ [gen_ai.token.type](/reference/ecs-gen_ai.md#field-gen-ai-token-type) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.token.type](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-token-type) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | +| $$$otel-mapping-for-gen-ai-tool-call-arguments$$$ [gen_ai.tool.call.arguments](/reference/ecs-gen_ai.md#field-gen-ai-tool-call-arguments) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.tool.call.arguments](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-call-arguments) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-tool-call-id$$$ [gen_ai.tool.call.id](/reference/ecs-gen_ai.md#field-gen-ai-tool-call-id) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.tool.call.id](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-call-id) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | +| $$$otel-mapping-for-gen-ai-tool-call-result$$$ [gen_ai.tool.call.result](/reference/ecs-gen_ai.md#field-gen-ai-tool-call-result) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.tool.call.result](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-call-result) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | +| $$$otel-mapping-for-gen-ai-tool-definitions$$$ [gen_ai.tool.definitions](/reference/ecs-gen_ai.md#field-gen-ai-tool-definitions) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.tool.definitions](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-definitions) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-tool-name$$$ [gen_ai.tool.name](/reference/ecs-gen_ai.md#field-gen-ai-tool-name) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.tool.name](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-name) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-tool-type$$$ [gen_ai.tool.type](/reference/ecs-gen_ai.md#field-gen-ai-tool-type) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.tool.type](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-tool-type) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | | $$$otel-mapping-for-gen-ai-usage-input-tokens$$$ [gen_ai.usage.input_tokens](/reference/ecs-gen_ai.md#field-gen-ai-usage-input-tokens) | [![match](https://img.shields.io/badge/match-93c93e?style=flat)](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.usage.input_tokens](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-usage-input-tokens) | ![development](https://img.shields.io/badge/✘-fed10c?style=flat) | diff --git a/docs/reference/ecs-otel-alignment-overview.md b/docs/reference/ecs-otel-alignment-overview.md index 962ecea162..0e6a219b6a 100644 --- a/docs/reference/ecs-otel-alignment-overview.md +++ b/docs/reference/ecs-otel-alignment-overview.md @@ -58,7 +58,7 @@ The following table summarizes the alignment status by namespaces between ECS in | Feature Flag | · | [8](https://opentelemetry.io/docs/specs/semconv/attributes-registry/feature-flag) | · | · | · | · | · | · | | | File | [24](/reference/ecs-file.md) | [18](https://opentelemetry.io/docs/specs/semconv/attributes-registry/file) | 11 | 7 | · | · | · | · | · | | GCP Client | · | [23](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gcp) | · | · | · | · | · | · | | -| Gen AI | [26](/reference/ecs-gen_ai.md) | [40](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai) | 25 | 1 | · | · | · | · | · | +| Gen AI | [32](/reference/ecs-gen_ai.md) | [40](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai) | 31 | 1 | · | · | · | · | · | | Geo | [11](/reference/ecs-geo.md) | [7](https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo) | 1 | 4 | 2 | · | · | · | · | | Go | · | [1](https://opentelemetry.io/docs/specs/semconv/attributes-registry/go) | · | · | · | · | · | · | | | GraphQL | · | [3](https://opentelemetry.io/docs/specs/semconv/attributes-registry/graphql) | · | · | · | · | · | · | | diff --git a/experimental/generated/beats/fields.ecs.yml b/experimental/generated/beats/fields.ecs.yml index 635bf839c6..2955dd05aa 100644 --- a/experimental/generated/beats/fields.ecs.yml +++ b/experimental/generated/beats/fields.ecs.yml @@ -4182,6 +4182,19 @@ description: Human-readable name of the GenAI agent provided by the application. example: Math Tutor; Fiction Writer default_field: false + - name: input.messages + level: extended + type: flattened + description: The chat history provided to the model as an input. + example: "{\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"\ + text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n}, {\n \"\ + role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\"\ + ,\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\"\ + ,\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n\ + \ ]\n}, {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\":\ + \ \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\"\ + ,\n \"result\": \"rainy, 57°F\"\n }\n ]\n}" + default_field: false - name: operation.name level: extended type: keyword @@ -4189,6 +4202,16 @@ description: The name of the operation being performed. example: chat; text_completion; embeddings default_field: false + - name: output.messages + level: extended + type: flattened + description: Messages returned by the model where each message represents a + specific model response (choice, candidate). + example: "{\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\"\ + : \"text\",\n \"content\": \"The weather in Paris is currently rainy\ + \ with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\ + \n}" + default_field: false - name: output.type level: extended type: keyword @@ -4293,6 +4316,14 @@ instrumentation. example: openai default_field: false + - name: system_instructions + level: extended + type: flattened + description: The system message or instructions provided to the GenAI model + separately from the chat history. + example: "{\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet\ + \ users, always use greetings tool to respond\"\n}" + default_field: false - name: token.type level: extended type: keyword @@ -4300,6 +4331,13 @@ description: The type of token being counted. example: input; output default_field: false + - name: tool.call.arguments + level: extended + type: flattened + description: Parameters passed to the tool call. + example: "{\n \"location\": \"San Francisco?\",\n \"date\": \"2025-10-01\"\ + \n}" + default_field: false - name: tool.call.id level: extended type: keyword @@ -4307,6 +4345,28 @@ description: The tool call identifier. example: call_mszuSIzqtI65i1wAUOE8w5H4 default_field: false + - name: tool.call.result + level: extended + type: flattened + description: The result returned by the tool call (if any and if execution was + successful). + example: "{\n \"temperature_range\": {\n \"high\": 75,\n \"low\": 60\n\ + \ },\n \"conditions\": \"sunny\"\n}" + default_field: false + - name: tool.definitions + level: extended + type: flattened + description: The list of source system tool definitions available to the GenAI + agent or model. + example: "{\n \"type\": \"function\",\n \"name\": \"get_current_weather\"\ + ,\n \"description\": \"Get the current weather in a given location\",\n \ + \ \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \ + \ \"location\": {\n \"type\": \"string\",\n \"description\"\ + : \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\"\ + : {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\"\ + ,\n \"fahrenheit\"\n ]\n }\n },\n \"required\"\ + : [\n \"location\",\n \"unit\"\n ]\n }\n}" + default_field: false - name: tool.name level: extended type: keyword diff --git a/experimental/generated/csv/fields.csv b/experimental/generated/csv/fields.csv index 1bc0421574..3db5b6a0f2 100644 --- a/experimental/generated/csv/fields.csv +++ b/experimental/generated/csv/fields.csv @@ -508,7 +508,47 @@ ECS_Version,Indexed,Field_Set,Field,Type,Level,Normalization,Example,Description 9.4.0-dev+exp,false,gen_ai,gen_ai.agent.description,keyword,extended,,Helps with math problems; Generates fiction stories,Free-form description of the GenAI agent provided by the application. 9.4.0-dev+exp,true,gen_ai,gen_ai.agent.id,keyword,extended,,asst_5j66UpCpwteGg4YSxUnt7lPY,The unique identifier of the GenAI agent. 9.4.0-dev+exp,true,gen_ai,gen_ai.agent.name,keyword,extended,,Math Tutor; Fiction Writer,Human-readable name of the GenAI agent provided by the application. +9.4.0-dev+exp,true,gen_ai,gen_ai.input.messages,flattened,extended,,"{ + ""role"": ""user"", + ""parts"": [ + { + ""type"": ""text"", + ""content"": ""Weather in Paris?"" + } + ] +}, { + ""role"": ""assistant"", + ""parts"": [ + { + ""type"": ""tool_call"", + ""id"": ""call_VSPygqKTWdrhaFErNvMV18Yl"", + ""name"": ""get_weather"", + ""arguments"": { + ""location"": ""Paris"" + } + } + ] +}, { + ""role"": ""tool"", + ""parts"": [ + { + ""type"": ""tool_call_response"", + ""id"": "" call_VSPygqKTWdrhaFErNvMV18Yl"", + ""result"": ""rainy, 57°F"" + } + ] +}",The chat history provided to the model as an input. 9.4.0-dev+exp,true,gen_ai,gen_ai.operation.name,keyword,extended,,chat; text_completion; embeddings,The name of the operation being performed. +9.4.0-dev+exp,true,gen_ai,gen_ai.output.messages,flattened,extended,,"{ + ""role"": ""assistant"", + ""parts"": [ + { + ""type"": ""text"", + ""content"": ""The weather in Paris is currently rainy with a temperature of 57°F."" + } + ], + ""finish_reason"": ""stop"" +}","Messages returned by the model where each message represents a specific model response (choice, candidate)." 9.4.0-dev+exp,true,gen_ai,gen_ai.output.type,keyword,extended,,text; json; image,Represents the content type requested by the client. 9.4.0-dev+exp,true,gen_ai,gen_ai.request.choice.count,integer,extended,,3,The target number of candidate completions to return. 9.4.0-dev+exp,true,gen_ai,gen_ai.request.encoding_formats,nested,extended,,"[""float"", ""binary""]","The encoding formats requested in an embeddings operation, if specified." @@ -525,8 +565,48 @@ ECS_Version,Indexed,Field_Set,Field,Type,Level,Normalization,Example,Description 9.4.0-dev+exp,true,gen_ai,gen_ai.response.id,keyword,extended,,chatcmpl-123,The unique identifier for the completion. 9.4.0-dev+exp,true,gen_ai,gen_ai.response.model,keyword,extended,,gpt-4-0613,The name of the model that generated the response. 9.4.0-dev+exp,true,gen_ai,gen_ai.system,keyword,extended,,openai,The Generative AI product as identified by the client or server instrumentation. +9.4.0-dev+exp,true,gen_ai,gen_ai.system_instructions,flattened,extended,,"{ + ""type"": ""text"", + ""content"": ""You are an Agent that greet users, always use greetings tool to respond"" +}",The system message or instructions provided to the GenAI model separately from the chat history. 9.4.0-dev+exp,true,gen_ai,gen_ai.token.type,keyword,extended,,input; output,The type of token being counted. +9.4.0-dev+exp,true,gen_ai,gen_ai.tool.call.arguments,flattened,extended,,"{ + ""location"": ""San Francisco?"", + ""date"": ""2025-10-01"" +}",Parameters passed to the tool call. 9.4.0-dev+exp,true,gen_ai,gen_ai.tool.call.id,keyword,extended,,call_mszuSIzqtI65i1wAUOE8w5H4,The tool call identifier. +9.4.0-dev+exp,true,gen_ai,gen_ai.tool.call.result,flattened,extended,,"{ + ""temperature_range"": { + ""high"": 75, + ""low"": 60 + }, + ""conditions"": ""sunny"" +}",The result returned by the tool call (if any and if execution was successful). +9.4.0-dev+exp,true,gen_ai,gen_ai.tool.definitions,flattened,extended,,"{ + ""type"": ""function"", + ""name"": ""get_current_weather"", + ""description"": ""Get the current weather in a given location"", + ""parameters"": { + ""type"": ""object"", + ""properties"": { + ""location"": { + ""type"": ""string"", + ""description"": ""The city and state, e.g. San Francisco, CA"" + }, + ""unit"": { + ""type"": ""string"", + ""enum"": [ + ""celsius"", + ""fahrenheit"" + ] + } + }, + ""required"": [ + ""location"", + ""unit"" + ] + } +}",The list of source system tool definitions available to the GenAI agent or model. 9.4.0-dev+exp,true,gen_ai,gen_ai.tool.name,keyword,extended,,Flights,Name of the tool utilized by the agent. 9.4.0-dev+exp,true,gen_ai,gen_ai.tool.type,keyword,extended,,function; extension; datastore,Type of the tool utilized by the agent 9.4.0-dev+exp,true,gen_ai,gen_ai.usage.input_tokens,integer,extended,,100,The number of tokens used in the GenAI input (prompt). diff --git a/experimental/generated/ecs/ecs_flat.yml b/experimental/generated/ecs/ecs_flat.yml index c208cb7bb8..8fc2369d26 100644 --- a/experimental/generated/ecs/ecs_flat.yml +++ b/experimental/generated/ecs/ecs_flat.yml @@ -7350,6 +7350,27 @@ gen_ai.agent.name: stability: development short: Human-readable name of the GenAI agent provided by the application. type: keyword +gen_ai.input.messages: + beta: This field is beta and subject to change. + dashed_name: gen-ai-input-messages + description: The chat history provided to the model as an input. + example: "{\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\"\ + ,\n \"content\": \"Weather in Paris?\"\n }\n ]\n}, {\n \"role\": \"\ + assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\",\n \"\ + id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\",\n \ + \ \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n ]\n\ + }, {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\": \"tool_call_response\"\ + ,\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"result\": \"rainy,\ + \ 57°F\"\n }\n ]\n}" + flat_name: gen_ai.input.messages + level: extended + name: input.messages + normalize: [] + otel: + - relation: match + stability: development + short: The chat history provided to the model as an input. + type: flattened gen_ai.operation.name: beta: This field is beta and subject to change. dashed_name: gen-ai-operation-name @@ -7365,6 +7386,24 @@ gen_ai.operation.name: stability: development short: The name of the operation being performed. type: keyword +gen_ai.output.messages: + beta: This field is beta and subject to change. + dashed_name: gen-ai-output-messages + description: Messages returned by the model where each message represents a specific + model response (choice, candidate). + example: "{\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\":\ + \ \"text\",\n \"content\": \"The weather in Paris is currently rainy with\ + \ a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\n}" + flat_name: gen_ai.output.messages + level: extended + name: output.messages + normalize: [] + otel: + - relation: match + stability: development + short: Messages returned by the model where each message represents a specific model + response (choice, candidate). + type: flattened gen_ai.output.type: beta: This field is beta and subject to change. dashed_name: gen-ai-output-type @@ -7598,6 +7637,23 @@ gen_ai.system: stability: development short: The Generative AI product as identified by the client or server instrumentation. type: keyword +gen_ai.system_instructions: + beta: This field is beta and subject to change. + dashed_name: gen-ai-system-instructions + description: The system message or instructions provided to the GenAI model separately + from the chat history. + example: "{\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet\ + \ users, always use greetings tool to respond\"\n}" + flat_name: gen_ai.system_instructions + level: extended + name: system_instructions + normalize: [] + otel: + - relation: match + stability: development + short: The system message or instructions provided to the GenAI model separately + from the chat history. + type: flattened gen_ai.token.type: beta: This field is beta and subject to change. dashed_name: gen-ai-token-type @@ -7613,6 +7669,21 @@ gen_ai.token.type: stability: development short: The type of token being counted. type: keyword +gen_ai.tool.call.arguments: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-call-arguments + description: Parameters passed to the tool call. + example: "{\n \"location\": \"San Francisco?\",\n \"date\": \"2025-10-01\"\ + \n}" + flat_name: gen_ai.tool.call.arguments + level: extended + name: tool.call.arguments + normalize: [] + otel: + - relation: match + stability: development + short: Parameters passed to the tool call. + type: flattened gen_ai.tool.call.id: beta: This field is beta and subject to change. dashed_name: gen-ai-tool-call-id @@ -7628,6 +7699,44 @@ gen_ai.tool.call.id: stability: development short: The tool call identifier. type: keyword +gen_ai.tool.call.result: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-call-result + description: The result returned by the tool call (if any and if execution was successful). + example: "{\n \"temperature_range\": {\n \"high\": 75,\n \"low\": 60\n },\n\ + \ \"conditions\": \"sunny\"\n}" + flat_name: gen_ai.tool.call.result + level: extended + name: tool.call.result + normalize: [] + otel: + - relation: match + stability: development + short: The result returned by the tool call (if any and if execution was successful). + type: flattened +gen_ai.tool.definitions: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-definitions + description: The list of source system tool definitions available to the GenAI agent + or model. + example: "{\n \"type\": \"function\",\n \"name\": \"get_current_weather\",\n \ + \ \"description\": \"Get the current weather in a given location\",\n \"parameters\"\ + : {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n\ + \ \"type\": \"string\",\n \"description\": \"The city and state,\ + \ e.g. San Francisco, CA\"\n },\n \"unit\": {\n \"type\": \"\ + string\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\ + \n ]\n }\n },\n \"required\": [\n \"location\",\n \ + \ \"unit\"\n ]\n }\n}" + flat_name: gen_ai.tool.definitions + level: extended + name: tool.definitions + normalize: [] + otel: + - relation: match + stability: development + short: The list of source system tool definitions available to the GenAI agent or + model. + type: flattened gen_ai.tool.name: beta: This field is beta and subject to change. dashed_name: gen-ai-tool-name diff --git a/experimental/generated/ecs/ecs_nested.yml b/experimental/generated/ecs/ecs_nested.yml index f8bed202fb..1ca3cf3fce 100644 --- a/experimental/generated/ecs/ecs_nested.yml +++ b/experimental/generated/ecs/ecs_nested.yml @@ -8548,6 +8548,27 @@ gen_ai: stability: development short: Human-readable name of the GenAI agent provided by the application. type: keyword + gen_ai.input.messages: + beta: This field is beta and subject to change. + dashed_name: gen-ai-input-messages + description: The chat history provided to the model as an input. + example: "{\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"\ + text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n}, {\n \"\ + role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\"\ + ,\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\"\ + ,\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n\ + \ ]\n}, {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\":\ + \ \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\"\ + ,\n \"result\": \"rainy, 57°F\"\n }\n ]\n}" + flat_name: gen_ai.input.messages + level: extended + name: input.messages + normalize: [] + otel: + - relation: match + stability: development + short: The chat history provided to the model as an input. + type: flattened gen_ai.operation.name: beta: This field is beta and subject to change. dashed_name: gen-ai-operation-name @@ -8563,6 +8584,25 @@ gen_ai: stability: development short: The name of the operation being performed. type: keyword + gen_ai.output.messages: + beta: This field is beta and subject to change. + dashed_name: gen-ai-output-messages + description: Messages returned by the model where each message represents a + specific model response (choice, candidate). + example: "{\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\"\ + : \"text\",\n \"content\": \"The weather in Paris is currently rainy\ + \ with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\ + \n}" + flat_name: gen_ai.output.messages + level: extended + name: output.messages + normalize: [] + otel: + - relation: match + stability: development + short: Messages returned by the model where each message represents a specific + model response (choice, candidate). + type: flattened gen_ai.output.type: beta: This field is beta and subject to change. dashed_name: gen-ai-output-type @@ -8798,6 +8838,23 @@ gen_ai: stability: development short: The Generative AI product as identified by the client or server instrumentation. type: keyword + gen_ai.system_instructions: + beta: This field is beta and subject to change. + dashed_name: gen-ai-system-instructions + description: The system message or instructions provided to the GenAI model + separately from the chat history. + example: "{\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet\ + \ users, always use greetings tool to respond\"\n}" + flat_name: gen_ai.system_instructions + level: extended + name: system_instructions + normalize: [] + otel: + - relation: match + stability: development + short: The system message or instructions provided to the GenAI model separately + from the chat history. + type: flattened gen_ai.token.type: beta: This field is beta and subject to change. dashed_name: gen-ai-token-type @@ -8813,6 +8870,21 @@ gen_ai: stability: development short: The type of token being counted. type: keyword + gen_ai.tool.call.arguments: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-call-arguments + description: Parameters passed to the tool call. + example: "{\n \"location\": \"San Francisco?\",\n \"date\": \"2025-10-01\"\ + \n}" + flat_name: gen_ai.tool.call.arguments + level: extended + name: tool.call.arguments + normalize: [] + otel: + - relation: match + stability: development + short: Parameters passed to the tool call. + type: flattened gen_ai.tool.call.id: beta: This field is beta and subject to change. dashed_name: gen-ai-tool-call-id @@ -8828,6 +8900,45 @@ gen_ai: stability: development short: The tool call identifier. type: keyword + gen_ai.tool.call.result: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-call-result + description: The result returned by the tool call (if any and if execution was + successful). + example: "{\n \"temperature_range\": {\n \"high\": 75,\n \"low\": 60\n\ + \ },\n \"conditions\": \"sunny\"\n}" + flat_name: gen_ai.tool.call.result + level: extended + name: tool.call.result + normalize: [] + otel: + - relation: match + stability: development + short: The result returned by the tool call (if any and if execution was successful). + type: flattened + gen_ai.tool.definitions: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-definitions + description: The list of source system tool definitions available to the GenAI + agent or model. + example: "{\n \"type\": \"function\",\n \"name\": \"get_current_weather\"\ + ,\n \"description\": \"Get the current weather in a given location\",\n \ + \ \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \ + \ \"location\": {\n \"type\": \"string\",\n \"description\"\ + : \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\"\ + : {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\"\ + ,\n \"fahrenheit\"\n ]\n }\n },\n \"required\"\ + : [\n \"location\",\n \"unit\"\n ]\n }\n}" + flat_name: gen_ai.tool.definitions + level: extended + name: tool.definitions + normalize: [] + otel: + - relation: match + stability: development + short: The list of source system tool definitions available to the GenAI agent + or model. + type: flattened gen_ai.tool.name: beta: This field is beta and subject to change. dashed_name: gen-ai-tool-name diff --git a/experimental/generated/elasticsearch/composable/component/gen_ai.json b/experimental/generated/elasticsearch/composable/component/gen_ai.json index 11fc1a60b7..170c78ecd5 100644 --- a/experimental/generated/elasticsearch/composable/component/gen_ai.json +++ b/experimental/generated/elasticsearch/composable/component/gen_ai.json @@ -25,6 +25,13 @@ } } }, + "input": { + "properties": { + "messages": { + "type": "flattened" + } + } + }, "operation": { "properties": { "name": { @@ -35,6 +42,9 @@ }, "output": { "properties": { + "messages": { + "type": "flattened" + }, "type": { "ignore_above": 1024, "type": "keyword" @@ -102,6 +112,9 @@ "ignore_above": 1024, "type": "keyword" }, + "system_instructions": { + "type": "flattened" + }, "token": { "properties": { "type": { @@ -114,12 +127,21 @@ "properties": { "call": { "properties": { + "arguments": { + "type": "flattened" + }, "id": { "ignore_above": 1024, "type": "keyword" + }, + "result": { + "type": "flattened" } } }, + "definitions": { + "type": "flattened" + }, "name": { "ignore_above": 1024, "type": "keyword" diff --git a/experimental/generated/elasticsearch/legacy/template.json b/experimental/generated/elasticsearch/legacy/template.json index 41aeb6a8b2..672f51e752 100644 --- a/experimental/generated/elasticsearch/legacy/template.json +++ b/experimental/generated/elasticsearch/legacy/template.json @@ -2311,6 +2311,13 @@ } } }, + "input": { + "properties": { + "messages": { + "type": "flattened" + } + } + }, "operation": { "properties": { "name": { @@ -2321,6 +2328,9 @@ }, "output": { "properties": { + "messages": { + "type": "flattened" + }, "type": { "ignore_above": 1024, "type": "keyword" @@ -2388,6 +2398,9 @@ "ignore_above": 1024, "type": "keyword" }, + "system_instructions": { + "type": "flattened" + }, "token": { "properties": { "type": { @@ -2400,12 +2413,21 @@ "properties": { "call": { "properties": { + "arguments": { + "type": "flattened" + }, "id": { "ignore_above": 1024, "type": "keyword" + }, + "result": { + "type": "flattened" } } }, + "definitions": { + "type": "flattened" + }, "name": { "ignore_above": 1024, "type": "keyword" diff --git a/generated/beats/fields.ecs.yml b/generated/beats/fields.ecs.yml index 29eed273a0..aac0936f49 100644 --- a/generated/beats/fields.ecs.yml +++ b/generated/beats/fields.ecs.yml @@ -4132,6 +4132,19 @@ description: Human-readable name of the GenAI agent provided by the application. example: Math Tutor; Fiction Writer default_field: false + - name: input.messages + level: extended + type: flattened + description: The chat history provided to the model as an input. + example: "{\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"\ + text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n}, {\n \"\ + role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\"\ + ,\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\"\ + ,\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n\ + \ ]\n}, {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\":\ + \ \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\"\ + ,\n \"result\": \"rainy, 57°F\"\n }\n ]\n}" + default_field: false - name: operation.name level: extended type: keyword @@ -4139,6 +4152,16 @@ description: The name of the operation being performed. example: chat; text_completion; embeddings default_field: false + - name: output.messages + level: extended + type: flattened + description: Messages returned by the model where each message represents a + specific model response (choice, candidate). + example: "{\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\"\ + : \"text\",\n \"content\": \"The weather in Paris is currently rainy\ + \ with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\ + \n}" + default_field: false - name: output.type level: extended type: keyword @@ -4243,6 +4266,14 @@ instrumentation. example: openai default_field: false + - name: system_instructions + level: extended + type: flattened + description: The system message or instructions provided to the GenAI model + separately from the chat history. + example: "{\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet\ + \ users, always use greetings tool to respond\"\n}" + default_field: false - name: token.type level: extended type: keyword @@ -4250,6 +4281,13 @@ description: The type of token being counted. example: input; output default_field: false + - name: tool.call.arguments + level: extended + type: flattened + description: Parameters passed to the tool call. + example: "{\n \"location\": \"San Francisco?\",\n \"date\": \"2025-10-01\"\ + \n}" + default_field: false - name: tool.call.id level: extended type: keyword @@ -4257,6 +4295,28 @@ description: The tool call identifier. example: call_mszuSIzqtI65i1wAUOE8w5H4 default_field: false + - name: tool.call.result + level: extended + type: flattened + description: The result returned by the tool call (if any and if execution was + successful). + example: "{\n \"temperature_range\": {\n \"high\": 75,\n \"low\": 60\n\ + \ },\n \"conditions\": \"sunny\"\n}" + default_field: false + - name: tool.definitions + level: extended + type: flattened + description: The list of source system tool definitions available to the GenAI + agent or model. + example: "{\n \"type\": \"function\",\n \"name\": \"get_current_weather\"\ + ,\n \"description\": \"Get the current weather in a given location\",\n \ + \ \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \ + \ \"location\": {\n \"type\": \"string\",\n \"description\"\ + : \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\"\ + : {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\"\ + ,\n \"fahrenheit\"\n ]\n }\n },\n \"required\"\ + : [\n \"location\",\n \"unit\"\n ]\n }\n}" + default_field: false - name: tool.name level: extended type: keyword diff --git a/generated/csv/fields.csv b/generated/csv/fields.csv index 7a9f02c2c8..af3c3761b2 100644 --- a/generated/csv/fields.csv +++ b/generated/csv/fields.csv @@ -501,7 +501,47 @@ ECS_Version,Indexed,Field_Set,Field,Type,Level,Normalization,Example,Description 9.4.0-dev,false,gen_ai,gen_ai.agent.description,keyword,extended,,Helps with math problems; Generates fiction stories,Free-form description of the GenAI agent provided by the application. 9.4.0-dev,true,gen_ai,gen_ai.agent.id,keyword,extended,,asst_5j66UpCpwteGg4YSxUnt7lPY,The unique identifier of the GenAI agent. 9.4.0-dev,true,gen_ai,gen_ai.agent.name,keyword,extended,,Math Tutor; Fiction Writer,Human-readable name of the GenAI agent provided by the application. +9.4.0-dev,true,gen_ai,gen_ai.input.messages,flattened,extended,,"{ + ""role"": ""user"", + ""parts"": [ + { + ""type"": ""text"", + ""content"": ""Weather in Paris?"" + } + ] +}, { + ""role"": ""assistant"", + ""parts"": [ + { + ""type"": ""tool_call"", + ""id"": ""call_VSPygqKTWdrhaFErNvMV18Yl"", + ""name"": ""get_weather"", + ""arguments"": { + ""location"": ""Paris"" + } + } + ] +}, { + ""role"": ""tool"", + ""parts"": [ + { + ""type"": ""tool_call_response"", + ""id"": "" call_VSPygqKTWdrhaFErNvMV18Yl"", + ""result"": ""rainy, 57°F"" + } + ] +}",The chat history provided to the model as an input. 9.4.0-dev,true,gen_ai,gen_ai.operation.name,keyword,extended,,chat; text_completion; embeddings,The name of the operation being performed. +9.4.0-dev,true,gen_ai,gen_ai.output.messages,flattened,extended,,"{ + ""role"": ""assistant"", + ""parts"": [ + { + ""type"": ""text"", + ""content"": ""The weather in Paris is currently rainy with a temperature of 57°F."" + } + ], + ""finish_reason"": ""stop"" +}","Messages returned by the model where each message represents a specific model response (choice, candidate)." 9.4.0-dev,true,gen_ai,gen_ai.output.type,keyword,extended,,text; json; image,Represents the content type requested by the client. 9.4.0-dev,true,gen_ai,gen_ai.request.choice.count,integer,extended,,3,The target number of candidate completions to return. 9.4.0-dev,true,gen_ai,gen_ai.request.encoding_formats,nested,extended,,"[""float"", ""binary""]","The encoding formats requested in an embeddings operation, if specified." @@ -518,8 +558,48 @@ ECS_Version,Indexed,Field_Set,Field,Type,Level,Normalization,Example,Description 9.4.0-dev,true,gen_ai,gen_ai.response.id,keyword,extended,,chatcmpl-123,The unique identifier for the completion. 9.4.0-dev,true,gen_ai,gen_ai.response.model,keyword,extended,,gpt-4-0613,The name of the model that generated the response. 9.4.0-dev,true,gen_ai,gen_ai.system,keyword,extended,,openai,The Generative AI product as identified by the client or server instrumentation. +9.4.0-dev,true,gen_ai,gen_ai.system_instructions,flattened,extended,,"{ + ""type"": ""text"", + ""content"": ""You are an Agent that greet users, always use greetings tool to respond"" +}",The system message or instructions provided to the GenAI model separately from the chat history. 9.4.0-dev,true,gen_ai,gen_ai.token.type,keyword,extended,,input; output,The type of token being counted. +9.4.0-dev,true,gen_ai,gen_ai.tool.call.arguments,flattened,extended,,"{ + ""location"": ""San Francisco?"", + ""date"": ""2025-10-01"" +}",Parameters passed to the tool call. 9.4.0-dev,true,gen_ai,gen_ai.tool.call.id,keyword,extended,,call_mszuSIzqtI65i1wAUOE8w5H4,The tool call identifier. +9.4.0-dev,true,gen_ai,gen_ai.tool.call.result,flattened,extended,,"{ + ""temperature_range"": { + ""high"": 75, + ""low"": 60 + }, + ""conditions"": ""sunny"" +}",The result returned by the tool call (if any and if execution was successful). +9.4.0-dev,true,gen_ai,gen_ai.tool.definitions,flattened,extended,,"{ + ""type"": ""function"", + ""name"": ""get_current_weather"", + ""description"": ""Get the current weather in a given location"", + ""parameters"": { + ""type"": ""object"", + ""properties"": { + ""location"": { + ""type"": ""string"", + ""description"": ""The city and state, e.g. San Francisco, CA"" + }, + ""unit"": { + ""type"": ""string"", + ""enum"": [ + ""celsius"", + ""fahrenheit"" + ] + } + }, + ""required"": [ + ""location"", + ""unit"" + ] + } +}",The list of source system tool definitions available to the GenAI agent or model. 9.4.0-dev,true,gen_ai,gen_ai.tool.name,keyword,extended,,Flights,Name of the tool utilized by the agent. 9.4.0-dev,true,gen_ai,gen_ai.tool.type,keyword,extended,,function; extension; datastore,Type of the tool utilized by the agent 9.4.0-dev,true,gen_ai,gen_ai.usage.input_tokens,integer,extended,,100,The number of tokens used in the GenAI input (prompt). diff --git a/generated/ecs/ecs_flat.yml b/generated/ecs/ecs_flat.yml index e272441968..02a8446110 100644 --- a/generated/ecs/ecs_flat.yml +++ b/generated/ecs/ecs_flat.yml @@ -7281,6 +7281,27 @@ gen_ai.agent.name: stability: development short: Human-readable name of the GenAI agent provided by the application. type: keyword +gen_ai.input.messages: + beta: This field is beta and subject to change. + dashed_name: gen-ai-input-messages + description: The chat history provided to the model as an input. + example: "{\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\"\ + ,\n \"content\": \"Weather in Paris?\"\n }\n ]\n}, {\n \"role\": \"\ + assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\",\n \"\ + id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\",\n \ + \ \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n ]\n\ + }, {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\": \"tool_call_response\"\ + ,\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"result\": \"rainy,\ + \ 57°F\"\n }\n ]\n}" + flat_name: gen_ai.input.messages + level: extended + name: input.messages + normalize: [] + otel: + - relation: match + stability: development + short: The chat history provided to the model as an input. + type: flattened gen_ai.operation.name: beta: This field is beta and subject to change. dashed_name: gen-ai-operation-name @@ -7296,6 +7317,24 @@ gen_ai.operation.name: stability: development short: The name of the operation being performed. type: keyword +gen_ai.output.messages: + beta: This field is beta and subject to change. + dashed_name: gen-ai-output-messages + description: Messages returned by the model where each message represents a specific + model response (choice, candidate). + example: "{\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\":\ + \ \"text\",\n \"content\": \"The weather in Paris is currently rainy with\ + \ a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\n}" + flat_name: gen_ai.output.messages + level: extended + name: output.messages + normalize: [] + otel: + - relation: match + stability: development + short: Messages returned by the model where each message represents a specific model + response (choice, candidate). + type: flattened gen_ai.output.type: beta: This field is beta and subject to change. dashed_name: gen-ai-output-type @@ -7529,6 +7568,23 @@ gen_ai.system: stability: development short: The Generative AI product as identified by the client or server instrumentation. type: keyword +gen_ai.system_instructions: + beta: This field is beta and subject to change. + dashed_name: gen-ai-system-instructions + description: The system message or instructions provided to the GenAI model separately + from the chat history. + example: "{\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet\ + \ users, always use greetings tool to respond\"\n}" + flat_name: gen_ai.system_instructions + level: extended + name: system_instructions + normalize: [] + otel: + - relation: match + stability: development + short: The system message or instructions provided to the GenAI model separately + from the chat history. + type: flattened gen_ai.token.type: beta: This field is beta and subject to change. dashed_name: gen-ai-token-type @@ -7544,6 +7600,21 @@ gen_ai.token.type: stability: development short: The type of token being counted. type: keyword +gen_ai.tool.call.arguments: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-call-arguments + description: Parameters passed to the tool call. + example: "{\n \"location\": \"San Francisco?\",\n \"date\": \"2025-10-01\"\ + \n}" + flat_name: gen_ai.tool.call.arguments + level: extended + name: tool.call.arguments + normalize: [] + otel: + - relation: match + stability: development + short: Parameters passed to the tool call. + type: flattened gen_ai.tool.call.id: beta: This field is beta and subject to change. dashed_name: gen-ai-tool-call-id @@ -7559,6 +7630,44 @@ gen_ai.tool.call.id: stability: development short: The tool call identifier. type: keyword +gen_ai.tool.call.result: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-call-result + description: The result returned by the tool call (if any and if execution was successful). + example: "{\n \"temperature_range\": {\n \"high\": 75,\n \"low\": 60\n },\n\ + \ \"conditions\": \"sunny\"\n}" + flat_name: gen_ai.tool.call.result + level: extended + name: tool.call.result + normalize: [] + otel: + - relation: match + stability: development + short: The result returned by the tool call (if any and if execution was successful). + type: flattened +gen_ai.tool.definitions: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-definitions + description: The list of source system tool definitions available to the GenAI agent + or model. + example: "{\n \"type\": \"function\",\n \"name\": \"get_current_weather\",\n \ + \ \"description\": \"Get the current weather in a given location\",\n \"parameters\"\ + : {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n\ + \ \"type\": \"string\",\n \"description\": \"The city and state,\ + \ e.g. San Francisco, CA\"\n },\n \"unit\": {\n \"type\": \"\ + string\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\ + \n ]\n }\n },\n \"required\": [\n \"location\",\n \ + \ \"unit\"\n ]\n }\n}" + flat_name: gen_ai.tool.definitions + level: extended + name: tool.definitions + normalize: [] + otel: + - relation: match + stability: development + short: The list of source system tool definitions available to the GenAI agent or + model. + type: flattened gen_ai.tool.name: beta: This field is beta and subject to change. dashed_name: gen-ai-tool-name diff --git a/generated/ecs/ecs_nested.yml b/generated/ecs/ecs_nested.yml index 05f243bb94..cc219450b1 100644 --- a/generated/ecs/ecs_nested.yml +++ b/generated/ecs/ecs_nested.yml @@ -8468,6 +8468,27 @@ gen_ai: stability: development short: Human-readable name of the GenAI agent provided by the application. type: keyword + gen_ai.input.messages: + beta: This field is beta and subject to change. + dashed_name: gen-ai-input-messages + description: The chat history provided to the model as an input. + example: "{\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"\ + text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n}, {\n \"\ + role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\"\ + ,\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\"\ + ,\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n\ + \ ]\n}, {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\":\ + \ \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\"\ + ,\n \"result\": \"rainy, 57°F\"\n }\n ]\n}" + flat_name: gen_ai.input.messages + level: extended + name: input.messages + normalize: [] + otel: + - relation: match + stability: development + short: The chat history provided to the model as an input. + type: flattened gen_ai.operation.name: beta: This field is beta and subject to change. dashed_name: gen-ai-operation-name @@ -8483,6 +8504,25 @@ gen_ai: stability: development short: The name of the operation being performed. type: keyword + gen_ai.output.messages: + beta: This field is beta and subject to change. + dashed_name: gen-ai-output-messages + description: Messages returned by the model where each message represents a + specific model response (choice, candidate). + example: "{\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\"\ + : \"text\",\n \"content\": \"The weather in Paris is currently rainy\ + \ with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\ + \n}" + flat_name: gen_ai.output.messages + level: extended + name: output.messages + normalize: [] + otel: + - relation: match + stability: development + short: Messages returned by the model where each message represents a specific + model response (choice, candidate). + type: flattened gen_ai.output.type: beta: This field is beta and subject to change. dashed_name: gen-ai-output-type @@ -8718,6 +8758,23 @@ gen_ai: stability: development short: The Generative AI product as identified by the client or server instrumentation. type: keyword + gen_ai.system_instructions: + beta: This field is beta and subject to change. + dashed_name: gen-ai-system-instructions + description: The system message or instructions provided to the GenAI model + separately from the chat history. + example: "{\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet\ + \ users, always use greetings tool to respond\"\n}" + flat_name: gen_ai.system_instructions + level: extended + name: system_instructions + normalize: [] + otel: + - relation: match + stability: development + short: The system message or instructions provided to the GenAI model separately + from the chat history. + type: flattened gen_ai.token.type: beta: This field is beta and subject to change. dashed_name: gen-ai-token-type @@ -8733,6 +8790,21 @@ gen_ai: stability: development short: The type of token being counted. type: keyword + gen_ai.tool.call.arguments: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-call-arguments + description: Parameters passed to the tool call. + example: "{\n \"location\": \"San Francisco?\",\n \"date\": \"2025-10-01\"\ + \n}" + flat_name: gen_ai.tool.call.arguments + level: extended + name: tool.call.arguments + normalize: [] + otel: + - relation: match + stability: development + short: Parameters passed to the tool call. + type: flattened gen_ai.tool.call.id: beta: This field is beta and subject to change. dashed_name: gen-ai-tool-call-id @@ -8748,6 +8820,45 @@ gen_ai: stability: development short: The tool call identifier. type: keyword + gen_ai.tool.call.result: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-call-result + description: The result returned by the tool call (if any and if execution was + successful). + example: "{\n \"temperature_range\": {\n \"high\": 75,\n \"low\": 60\n\ + \ },\n \"conditions\": \"sunny\"\n}" + flat_name: gen_ai.tool.call.result + level: extended + name: tool.call.result + normalize: [] + otel: + - relation: match + stability: development + short: The result returned by the tool call (if any and if execution was successful). + type: flattened + gen_ai.tool.definitions: + beta: This field is beta and subject to change. + dashed_name: gen-ai-tool-definitions + description: The list of source system tool definitions available to the GenAI + agent or model. + example: "{\n \"type\": \"function\",\n \"name\": \"get_current_weather\"\ + ,\n \"description\": \"Get the current weather in a given location\",\n \ + \ \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \ + \ \"location\": {\n \"type\": \"string\",\n \"description\"\ + : \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\"\ + : {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\"\ + ,\n \"fahrenheit\"\n ]\n }\n },\n \"required\"\ + : [\n \"location\",\n \"unit\"\n ]\n }\n}" + flat_name: gen_ai.tool.definitions + level: extended + name: tool.definitions + normalize: [] + otel: + - relation: match + stability: development + short: The list of source system tool definitions available to the GenAI agent + or model. + type: flattened gen_ai.tool.name: beta: This field is beta and subject to change. dashed_name: gen-ai-tool-name diff --git a/generated/elasticsearch/composable/component/gen_ai.json b/generated/elasticsearch/composable/component/gen_ai.json index 1577d03c48..42f6f47753 100644 --- a/generated/elasticsearch/composable/component/gen_ai.json +++ b/generated/elasticsearch/composable/component/gen_ai.json @@ -25,6 +25,13 @@ } } }, + "input": { + "properties": { + "messages": { + "type": "flattened" + } + } + }, "operation": { "properties": { "name": { @@ -35,6 +42,9 @@ }, "output": { "properties": { + "messages": { + "type": "flattened" + }, "type": { "ignore_above": 1024, "type": "keyword" @@ -102,6 +112,9 @@ "ignore_above": 1024, "type": "keyword" }, + "system_instructions": { + "type": "flattened" + }, "token": { "properties": { "type": { @@ -114,12 +127,21 @@ "properties": { "call": { "properties": { + "arguments": { + "type": "flattened" + }, "id": { "ignore_above": 1024, "type": "keyword" + }, + "result": { + "type": "flattened" } } }, + "definitions": { + "type": "flattened" + }, "name": { "ignore_above": 1024, "type": "keyword" diff --git a/generated/elasticsearch/legacy/template.json b/generated/elasticsearch/legacy/template.json index 6b7846c9f1..3e3f9bc091 100644 --- a/generated/elasticsearch/legacy/template.json +++ b/generated/elasticsearch/legacy/template.json @@ -2269,6 +2269,13 @@ } } }, + "input": { + "properties": { + "messages": { + "type": "flattened" + } + } + }, "operation": { "properties": { "name": { @@ -2279,6 +2286,9 @@ }, "output": { "properties": { + "messages": { + "type": "flattened" + }, "type": { "ignore_above": 1024, "type": "keyword" @@ -2346,6 +2356,9 @@ "ignore_above": 1024, "type": "keyword" }, + "system_instructions": { + "type": "flattened" + }, "token": { "properties": { "type": { @@ -2358,12 +2371,21 @@ "properties": { "call": { "properties": { + "arguments": { + "type": "flattened" + }, "id": { "ignore_above": 1024, "type": "keyword" + }, + "result": { + "type": "flattened" } } }, + "definitions": { + "type": "flattened" + }, "name": { "ignore_above": 1024, "type": "keyword" diff --git a/rfcs/text/0052-gen_ai-additional-fields.md b/rfcs/text/0052-gen_ai-additional-fields.md index 5569bd35a8..2efa863e73 100644 --- a/rfcs/text/0052-gen_ai-additional-fields.md +++ b/rfcs/text/0052-gen_ai-additional-fields.md @@ -1,7 +1,7 @@ # 0052: Additional fields for Generative AI -- Stage: **0 (strawperson)** +- Stage: **2 (candidate)** - Date: **TBD** -In OTel, many field types are set to `any` and are typically .json objects. [Example](https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-events/) -In ECS, should we use something like [flattened](https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/flattened) type, if allowed? +In OTel, many field types are set to `any` and are typically JSON objects. [Example](https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-events/) - +In ECS, should we use something like [flattened](https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/flattened) type. - +**Resolution:** All six fields in this RFC use `flattened`. The decision was driven by three constraints: + +1. OTel Collector ES exporter + +> Nested fields are not supported under passthrough namespaces like attributes.* are in the OTel ES schema. +So defining gen_ai.input.messages, gen_ai.output.messages and gen_ai.tool.definitions as nested would not be compatible with OTel ingest. +> Complex attributes types are currently always mapped to flattened in the OTel Collector ES exporter. +> -- @AlexanderWert + +See [comment](https://github.com/elastic/ecs/pull/2532#issuecomment-3479329267). + +2. Serverless limitation for nested fields on indices + +> "The default setting for limiting nested fields on indices (index.mapping.nested_fields.limit) is 50. If customers try to create a new index with a higher limit, they will receive the following error: Settings [index.mapping.nested_fields.limit,index.mapping.nested_objects.limit] are not available when running in serverless mode. It's a serverless limitation that can't be overridden without Elastic support involved." +> -- @Mikaayenson + +See [comment](https://github.com/elastic/ecs/pull/2532#issuecomment-3415953216) + +3. ES|QL queryability + +At the time this RFC was drafted, neither `nested` nor `flattened` were supported in ES|QL. As of March 2026, the picture has changed significantly: + +- **`flattened`:** Active development under way. [elasticsearch#144245](https://github.com/elastic/elasticsearch/pull/144245) enables ES|QL to load `flattened` fields as JSON strings, queryable via `JSON_EXTRACT`. [elasticsearch#144451](https://github.com/elastic/elasticsearch/pull/144451) "Allow specific keys within a flattened field to be mapped as typed sub-fields (keyword, ip, etc.) via a new "properties" mapping attribute." + +`flattened` is therefore the only path to ES|QL queryability in the foreseeable future. + +Tradeoffs: + +> "With flattened, it would not be possible to query for something like 'system role has a text like helpful bot', [...] the association between the `role` field and the `parts.content` field is lost." +> — @flash1293 + +See [comment](https://github.com/elastic/ecs/pull/2532#issuecomment-3380468096) + + +> "We will likely lean on `_source` to access nested dicts in an order preserving fashion." +> — @joe-desimone + +See [comment](https://github.com/elastic/ecs/pull/2532#issuecomment-3470660966) + +This trade-off is accepted given the OTel compatibility requirement. As of March 2026, ES|QL `flattened` support is actively in development ([elasticsearch#144245](https://github.com/elastic/elasticsearch/pull/144245)), to be passed into the new JSON_EXTRACT function, making `flattened` the only viable path to ES|QL queryability in the foreseeable future. ## People The following are the people that consulted on the contents of this RFC. * @susan-shu-c | author +* @Mikaayenson, @joe-desimone | Security subject matter experts * Stage 0: https://github.com/elastic/ecs/pull/2519 - - +* Stage 1: https://github.com/elastic/ecs/pull/2525 +* Stage 2: https://github.com/elastic/ecs/pull/2532 diff --git a/rfcs/text/0052/gen_ai.yaml b/rfcs/text/0052/gen_ai.yaml new file mode 100644 index 0000000000..3490655d18 --- /dev/null +++ b/rfcs/text/0052/gen_ai.yaml @@ -0,0 +1,133 @@ +--- +- name: gen_ai + fields: + - name: system_instructions + type: flattened + description: The system message or instructions provided to the GenAI model separately from the chat history. + example: > + { + "type": "text", + "content": "You are an Agent that greet users, always use greetings tool to respond" + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match + - name: input.messages + type: flattened + description: The chat history provided to the model as an input. + example: > + { + "role": "user", + "parts": [ + { + "type": "text", + "content": "Weather in Paris?" + } + ] + }, + { + "role": "assistant", + "parts": [ + { + "type": "tool_call", + "id": "call_VSPygqKTWdrhaFErNvMV18Yl", + "name": "get_weather", + "arguments": { + "location": "Paris" + } + } + ] + }, + { + "role": "tool", + "parts": [ + { + "type": "tool_call_response", + "id": " call_VSPygqKTWdrhaFErNvMV18Yl", + "result": "rainy, 57°F" + } + ] + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match + - name: output.messages + type: flattened + description: Messages returned by the model where each message represents a specific model response (choice, candidate). + example: > + { + "role": "assistant", + "parts": [ + { + "type": "text", + "content": "The weather in Paris is currently rainy with a temperature of 57°F." + } + ], + "finish_reason": "stop" + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match + - name: tool.definitions + type: flattened + description: The list of source system tool definitions available to the GenAI agent or model. + example: > + { + "type": "function", + "name": "get_current_weather", + "description": "Get the current weather in a given location", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA" + }, + "unit": { + "type": "string", + "enum": [ + "celsius", + "fahrenheit" + ] + } + }, + "required": [ + "location", + "unit" + ] + } + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match + - name: tool.call.arguments + type: flattened + description: Parameters passed to the tool call. + example: > + { + "location": "San Francisco?", + "date": "2025-10-01" + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match + - name: tool.call.result + type: flattened + description: The result returned by the tool call (if any and if execution was successful). + example: > + { + "temperature_range": { + "high": 75, + "low": 60 + }, + "conditions": "sunny" + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match diff --git a/schemas/gen_ai.yml b/schemas/gen_ai.yml index c7dd9d5df3..89a5efa33d 100644 --- a/schemas/gen_ai.yml +++ b/schemas/gen_ai.yml @@ -236,3 +236,133 @@ beta: This field is beta and subject to change. otel: - relation: match + - name: system_instructions + type: flattened + description: The system message or instructions provided to the GenAI model separately from the chat history. + example: > + { + "type": "text", + "content": "You are an Agent that greet users, always use greetings tool to respond" + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match + - name: input.messages + type: flattened + description: The chat history provided to the model as an input. + example: > + { + "role": "user", + "parts": [ + { + "type": "text", + "content": "Weather in Paris?" + } + ] + }, + { + "role": "assistant", + "parts": [ + { + "type": "tool_call", + "id": "call_VSPygqKTWdrhaFErNvMV18Yl", + "name": "get_weather", + "arguments": { + "location": "Paris" + } + } + ] + }, + { + "role": "tool", + "parts": [ + { + "type": "tool_call_response", + "id": " call_VSPygqKTWdrhaFErNvMV18Yl", + "result": "rainy, 57°F" + } + ] + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match + - name: output.messages + type: flattened + description: Messages returned by the model where each message represents a specific model response (choice, candidate). + example: > + { + "role": "assistant", + "parts": [ + { + "type": "text", + "content": "The weather in Paris is currently rainy with a temperature of 57°F." + } + ], + "finish_reason": "stop" + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match + - name: tool.definitions + type: flattened + description: The list of source system tool definitions available to the GenAI agent or model. + example: > + { + "type": "function", + "name": "get_current_weather", + "description": "Get the current weather in a given location", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA" + }, + "unit": { + "type": "string", + "enum": [ + "celsius", + "fahrenheit" + ] + } + }, + "required": [ + "location", + "unit" + ] + } + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match + - name: tool.call.arguments + type: flattened + description: Parameters passed to the tool call. + example: > + { + "location": "San Francisco?", + "date": "2025-10-01" + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match + - name: tool.call.result + type: flattened + description: The result returned by the tool call (if any and if execution was successful). + example: > + { + "temperature_range": { + "high": 75, + "low": 60 + }, + "conditions": "sunny" + } + level: extended + beta: This field is beta and subject to change. + otel: + - relation: match