diff --git a/docs/reference/ecs-gen_ai.md b/docs/reference/ecs-gen_ai.md
index 23300697b..66aa2934c 100644
--- a/docs/reference/ecs-gen_ai.md
+++ b/docs/reference/ecs-gen_ai.md
@@ -20,8 +20,11 @@ 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`
 [](/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`
 [](/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`
 [](/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" } ]}`
 [](/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`
 [](/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"}`
 [](/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`
 [](/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-provider-name$$$ [gen_ai.provider.name](#field-gen-ai-provider-name) | _This field is beta and subject to change._ The Generative AI provider as identified by the client or server instrumentation.
type: keyword
example: `openai`
 [](/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-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`
 [](/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"]`
 [](/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 |
| $$$field-gen-ai-request-frequency-penalty$$$ [gen_ai.request.frequency_penalty](#field-gen-ai-request-frequency-penalty) | _This field is beta and subject to change._ The frequency penalty setting for the GenAI request.
type: double
example: `0.1`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.frequency_penalty](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-frequency-penalty) | extended |
@@ -36,9 +39,12 @@ This field group definition is based on the Gen AI namespace of the OpenTelemetr
| $$$field-gen-ai-response-finish-reasons$$$ [gen_ai.response.finish_reasons](#field-gen-ai-response-finish-reasons) | _This field is beta and subject to change._ Array of reasons the model stopped generating tokens, corresponding to each generation received.
type: nested
example: `["stop", "length"]`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.response.finish_reasons](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-response-finish-reasons) | extended |
| $$$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`
 [](/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`
 [](/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`
 [](/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"}`
 [](/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`
 [](/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"}`
 [](/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`
 [](/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"}`
 [](/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" ] }}`
 [](/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`
 [](/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`
 [](/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`
 [](/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 e2d85e2ac..0503d6a5a 100644
--- a/docs/reference/ecs-otel-alignment-details.md
+++ b/docs/reference/ecs-otel-alignment-details.md
@@ -89,8 +89,11 @@ 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) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-agent-id$$$ [gen_ai.agent.id](/reference/ecs-gen_ai.md#field-gen-ai-agent-id) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-agent-name$$$ [gen_ai.agent.name](/reference/ecs-gen_ai.md#field-gen-ai-agent-name) | [](/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) |  |
+| $$$otel-mapping-for-gen-ai-input-messages$$$ [gen_ai.input.messages](/reference/ecs-gen_ai.md#field-gen-ai-input-messages) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-operation-name$$$ [gen_ai.operation.name](/reference/ecs-gen_ai.md#field-gen-ai-operation-name) | [](/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) |  |
+| $$$otel-mapping-for-gen-ai-output-messages$$$ [gen_ai.output.messages](/reference/ecs-gen_ai.md#field-gen-ai-output-messages) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-output-type$$$ [gen_ai.output.type](/reference/ecs-gen_ai.md#field-gen-ai-output-type) | [](/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) |  |
+| $$$otel-mapping-for-gen-ai-provider-name$$$ [gen_ai.provider.name](/reference/ecs-gen_ai.md#field-gen-ai-provider-name) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-request-choice-count$$$ [gen_ai.request.choice.count](/reference/ecs-gen_ai.md#field-gen-ai-request-choice-count) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-request-encoding-formats$$$ [gen_ai.request.encoding_formats](/reference/ecs-gen_ai.md#field-gen-ai-request-encoding-formats) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-request-frequency-penalty$$$ [gen_ai.request.frequency_penalty](/reference/ecs-gen_ai.md#field-gen-ai-request-frequency-penalty) | [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.request.frequency_penalty](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-frequency-penalty) |  |
@@ -105,9 +108,12 @@ The following table gives an overview of mappings between individual ECS fields
| $$$otel-mapping-for-gen-ai-response-finish-reasons$$$ [gen_ai.response.finish_reasons](/reference/ecs-gen_ai.md#field-gen-ai-response-finish-reasons) | [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) | [gen_ai.response.finish_reasons](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-response-finish-reasons) |  |
| $$$otel-mapping-for-gen-ai-response-id$$$ [gen_ai.response.id](/reference/ecs-gen_ai.md#field-gen-ai-response-id) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-response-model$$$ [gen_ai.response.model](/reference/ecs-gen_ai.md#field-gen-ai-response-model) | [](/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) |  |
-| $$$otel-mapping-for-gen-ai-system$$$ [gen_ai.system](/reference/ecs-gen_ai.md#field-gen-ai-system) | [](/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) |  |
+| $$$otel-mapping-for-gen-ai-system-instructions$$$ [gen_ai.system_instructions](/reference/ecs-gen_ai.md#field-gen-ai-system-instructions) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-token-type$$$ [gen_ai.token.type](/reference/ecs-gen_ai.md#field-gen-ai-token-type) | [](/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) |  |
+| $$$otel-mapping-for-gen-ai-tool-call-arguments$$$ [gen_ai.tool.call.arguments](/reference/ecs-gen_ai.md#field-gen-ai-tool-call-arguments) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-tool-call-id$$$ [gen_ai.tool.call.id](/reference/ecs-gen_ai.md#field-gen-ai-tool-call-id) | [](/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) |  |
+| $$$otel-mapping-for-gen-ai-tool-call-result$$$ [gen_ai.tool.call.result](/reference/ecs-gen_ai.md#field-gen-ai-tool-call-result) | [](/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) |  |
+| $$$otel-mapping-for-gen-ai-tool-definitions$$$ [gen_ai.tool.definitions](/reference/ecs-gen_ai.md#field-gen-ai-tool-definitions) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-tool-name$$$ [gen_ai.tool.name](/reference/ecs-gen_ai.md#field-gen-ai-tool-name) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-tool-type$$$ [gen_ai.tool.type](/reference/ecs-gen_ai.md#field-gen-ai-tool-type) | [](/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) |  |
| $$$otel-mapping-for-gen-ai-usage-input-tokens$$$ [gen_ai.usage.input_tokens](/reference/ecs-gen_ai.md#field-gen-ai-usage-input-tokens) | [](/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) |  |
diff --git a/docs/reference/ecs-otel-alignment-overview.md b/docs/reference/ecs-otel-alignment-overview.md
index 879a0deea..917536cc2 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) | 32 | · | · | · | · | · | · |
| 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/generated/beats/fields.ecs.yml b/generated/beats/fields.ecs.yml
index c7e673489..00a52c3aa 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
@@ -4146,6 +4169,14 @@
description: Represents the content type requested by the client.
example: text; json; image
default_field: false
+ - name: provider.name
+ level: extended
+ type: keyword
+ ignore_above: 1024
+ description: The Generative AI provider as identified by the client or server
+ instrumentation.
+ example: openai
+ default_field: false
- name: request.choice.count
level: extended
type: integer
@@ -4235,13 +4266,13 @@
description: The name of the model that generated the response.
example: gpt-4-0613
default_field: false
- - name: system
+ - name: system_instructions
level: extended
- type: keyword
- ignore_above: 1024
- description: The Generative AI product as identified by the client or server
- instrumentation.
- example: openai
+ 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
@@ -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 1f3ca5cdc..1bba0bd60 100644
--- a/generated/csv/fields.csv
+++ b/generated/csv/fields.csv
@@ -501,8 +501,49 @@ ECS_Version,Indexed,Field_Set,Field,Type,Level,Normalization,Example,Description
9.5.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.5.0-dev,true,gen_ai,gen_ai.agent.id,keyword,extended,,asst_5j66UpCpwteGg4YSxUnt7lPY,The unique identifier of the GenAI agent.
9.5.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.5.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.5.0-dev,true,gen_ai,gen_ai.operation.name,keyword,extended,,chat; text_completion; embeddings,The name of the operation being performed.
+9.5.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.5.0-dev,true,gen_ai,gen_ai.output.type,keyword,extended,,text; json; image,Represents the content type requested by the client.
+9.5.0-dev,true,gen_ai,gen_ai.provider.name,keyword,extended,,openai,The Generative AI provider as identified by the client or server instrumentation.
9.5.0-dev,true,gen_ai,gen_ai.request.choice.count,integer,extended,,3,The target number of candidate completions to return.
9.5.0-dev,true,gen_ai,gen_ai.request.encoding_formats,nested,extended,,"[""float"", ""binary""]","The encoding formats requested in an embeddings operation, if specified."
9.5.0-dev,true,gen_ai,gen_ai.request.frequency_penalty,double,extended,,0.1,The frequency penalty setting for the GenAI request.
@@ -517,9 +558,48 @@ ECS_Version,Indexed,Field_Set,Field,Type,Level,Normalization,Example,Description
9.5.0-dev,true,gen_ai,gen_ai.response.finish_reasons,nested,extended,,"[""stop"", ""length""]","Array of reasons the model stopped generating tokens, corresponding to each generation received."
9.5.0-dev,true,gen_ai,gen_ai.response.id,keyword,extended,,chatcmpl-123,The unique identifier for the completion.
9.5.0-dev,true,gen_ai,gen_ai.response.model,keyword,extended,,gpt-4-0613,The name of the model that generated the response.
-9.5.0-dev,true,gen_ai,gen_ai.system,keyword,extended,,openai,The Generative AI product as identified by the client or server instrumentation.
+9.5.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.5.0-dev,true,gen_ai,gen_ai.token.type,keyword,extended,,input; output,The type of token being counted.
+9.5.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.5.0-dev,true,gen_ai,gen_ai.tool.call.id,keyword,extended,,call_mszuSIzqtI65i1wAUOE8w5H4,The tool call identifier.
+9.5.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.5.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.5.0-dev,true,gen_ai,gen_ai.tool.name,keyword,extended,,Flights,Name of the tool utilized by the agent.
9.5.0-dev,true,gen_ai,gen_ai.tool.type,keyword,extended,,function; extension; datastore,Type of the tool utilized by the agent
9.5.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 e27244196..2dd414db3 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
@@ -7311,6 +7350,21 @@ gen_ai.output.type:
stability: development
short: Represents the content type requested by the client.
type: keyword
+gen_ai.provider.name:
+ beta: This field is beta and subject to change.
+ dashed_name: gen-ai-provider-name
+ description: The Generative AI provider as identified by the client or server instrumentation.
+ example: openai
+ flat_name: gen_ai.provider.name
+ ignore_above: 1024
+ level: extended
+ name: provider.name
+ normalize: []
+ otel:
+ - relation: match
+ stability: development
+ short: The Generative AI provider as identified by the client or server instrumentation.
+ type: keyword
gen_ai.request.choice.count:
beta: This field is beta and subject to change.
dashed_name: gen-ai-request-choice-count
@@ -7513,22 +7567,23 @@ gen_ai.response.model:
stability: development
short: The name of the model that generated the response.
type: keyword
-gen_ai.system:
+gen_ai.system_instructions:
beta: This field is beta and subject to change.
- dashed_name: gen-ai-system
- description: The Generative AI product as identified by the client or server instrumentation.
- example: openai
- flat_name: gen_ai.system
- ignore_above: 1024
+ 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
+ name: system_instructions
normalize: []
otel:
- - attribute: gen_ai.provider.name
- relation: equivalent
+ - relation: match
stability: development
- short: The Generative AI product as identified by the client or server instrumentation.
- type: keyword
+ 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 +7599,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 +7629,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 05f243bb9..295da8c25 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
@@ -8498,6 +8538,22 @@ gen_ai:
stability: development
short: Represents the content type requested by the client.
type: keyword
+ gen_ai.provider.name:
+ beta: This field is beta and subject to change.
+ dashed_name: gen-ai-provider-name
+ description: The Generative AI provider as identified by the client or server
+ instrumentation.
+ example: openai
+ flat_name: gen_ai.provider.name
+ ignore_above: 1024
+ level: extended
+ name: provider.name
+ normalize: []
+ otel:
+ - relation: match
+ stability: development
+ short: The Generative AI provider as identified by the client or server instrumentation.
+ type: keyword
gen_ai.request.choice.count:
beta: This field is beta and subject to change.
dashed_name: gen-ai-request-choice-count
@@ -8701,23 +8757,23 @@ gen_ai:
stability: development
short: The name of the model that generated the response.
type: keyword
- gen_ai.system:
+ gen_ai.system_instructions:
beta: This field is beta and subject to change.
- dashed_name: gen-ai-system
- description: The Generative AI product as identified by the client or server
- instrumentation.
- example: openai
- flat_name: gen_ai.system
- ignore_above: 1024
+ 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
+ name: system_instructions
normalize: []
otel:
- - attribute: gen_ai.provider.name
- relation: equivalent
+ - relation: match
stability: development
- short: The Generative AI product as identified by the client or server instrumentation.
- type: keyword
+ 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 +8789,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 +8819,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 aa8bb1f7b..571c3fc1a 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,12 +42,23 @@
},
"output": {
"properties": {
+ "messages": {
+ "type": "flattened"
+ },
"type": {
"ignore_above": 1024,
"type": "keyword"
}
}
},
+ "provider": {
+ "properties": {
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
"request": {
"properties": {
"choice": {
@@ -98,9 +116,8 @@
}
}
},
- "system": {
- "ignore_above": 1024,
- "type": "keyword"
+ "system_instructions": {
+ "type": "flattened"
},
"token": {
"properties": {
@@ -114,12 +131,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 6dc4a73bc..40e4e8d93 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,12 +2286,23 @@
},
"output": {
"properties": {
+ "messages": {
+ "type": "flattened"
+ },
"type": {
"ignore_above": 1024,
"type": "keyword"
}
}
},
+ "provider": {
+ "properties": {
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
"request": {
"properties": {
"choice": {
@@ -2342,9 +2360,8 @@
}
}
},
- "system": {
- "ignore_above": 1024,
- "type": "keyword"
+ "system_instructions": {
+ "type": "flattened"
},
"token": {
"properties": {
@@ -2358,12 +2375,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 12df57a7b..606bfb3e4 100644
--- a/rfcs/text/0052-gen_ai-additional-fields.md
+++ b/rfcs/text/0052-gen_ai-additional-fields.md
@@ -1,220 +1,184 @@
# 0052: Additional fields for Generative AI
-
-- Stage: **0 (strawperson)**
-- Date: **2025-09-17**
+- Stage: **Proposal**
+- Date: **TBD**
+- Target maturity: **beta**
-> **Status (process transition, April 2026):** The proposed fields have not yet been merged into the ECS schema. Implementation is in progress in [#2532](https://github.com/elastic/ecs/pull/2532). The multi-stage RFC process has been retired in favor of the single-stage Proposal process.
+## Summary
-
+Following up on [RFC 0050](https://github.com/elastic/ecs/pull/2475), which introduced an initial batch of `gen_ai` fields, this RFC adds six additional fields based on user feedback and OTel Semantic Conventions v1.40.0+. The fields cover the following GenAI interactions: system instructions, input and output messages, tool definitions available to an agent or model, and tool call arguments and results. All six fields carry the same names as their OTel counterparts and are defined as `flattened` to align with how the OTel Collector Elasticsearch exporter handles complex attribute types[1].
-
-
-Following up on [RFC 0050](https://github.com/elastic/ecs/pull/2475) which introduced an initial batch of `gen_ai` fields, this RFC (0052) adds more fields due to user feedback. The fields are backported from [OTel](https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-events/).
-
-
+## Usage
-
+These fields enable security monitoring and threat detection for GenAI applications. Practitioners can use `gen_ai.input.messages` and `gen_ai.output.messages` to audit full conversation context for prompt injection, data exfiltration, or policy violations. `gen_ai.system_instructions` captures the system prompt, which is a common target for injection attacks. The `gen_ai.tool.*` fields allow monitoring of agentic tool use — for example, detecting whether a model was manipulated into calling a privileged tool with attacker-controlled arguments.[2]
## Fields
-
-
Field | Type | Description /Usage
-- | -- | --
-gen_ai.system_instructions | (Looking for feedback) flattened | The system message or instructions provided to the GenAI model separately from the chat history.
-gen_ai.input.messages | (Looking for feedback) flattened | The chat history provided to the model as an input.
-gen_ai.output.messages | (Looking for feedback) flattened | Messages returned by the model where each message represents a specific model response (choice, candidate).
-gen_ai.tool.definitions | (Looking for feedback) nested | (Part of invoke_agent span) The list of source system tool definitions available to the GenAI agent or model.
-gen_ai.tool.call.arguments | (Looking for feedback) nested | (Part of OTel execute_tool span) Parameters passed to the tool call.
-gen_ai.tool.call.result | (Looking for feedback) nested | (Part of OTel execute_tool span) The result returned by the tool call (if any and if execution was successful).
+gen_ai.system_instructions | flattened | The system message or instructions provided to the GenAI model separately from the chat history.
+gen_ai.input.messages | flattened | The chat history provided to the model as an input.
+gen_ai.output.messages | flattened | Messages returned by the model where each message represents a specific model response (choice, candidate).
+gen_ai.tool.definitions | flattened | (Part of invoke_agent span) The list of source system tool definitions available to the GenAI agent or model.
+gen_ai.tool.call.arguments | flattened | (Part of OTel execute_tool span) Parameters passed to the tool call.
+gen_ai.tool.call.result | flattened | (Part of OTel execute_tool span) The result returned by the tool call (if any and if execution was successful).
-Changes based on OTel https://github.com/open-telemetry/semantic-conventions/pull/2179/files
+This RFC also renames the existing `gen_ai.system` field introduced in RFC 0050 to `gen_ai.provider.name`, following its deprecation and replacement in OTel semconv ([ref](https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-system)). The OTel mapping relation is updated from `equivalent` to `match`. The field type, level, and allowed values are unchanged.
-
+Field | Type | Change
+-- | -- | --
+~~gen_ai.system~~ → gen_ai.provider.name | keyword | Renamed to align with OTel `gen_ai.provider.name`; description updated from "product" to "provider"
-## Usage
+Changes based on OTel https://github.com/open-telemetry/semantic-conventions/pull/2179/files
-
+All six fields use `type: flattened` without defined child fields. Explicit leaf-field definitions are not appropriate here because the OTel specification defines these as `any`-typed attributes whose exact structure varies by model vendor — defining explicit children would create upstream dependencies on vendor-specific schemas. Cross-integration type conflicts are prevented by the upstream OTel specification that all producers are expected to follow; the expected data shapes are illustrated in the YAML examples in `rfcs/text/0052/gen_ai.yaml`. See the Concerns section for the full justification for `flattened` over `nested`.
## Source data
-
+### OTel GenAI span (OpenAI)
-Example usage:
+An ECS event produced from an OpenAI Chat Completions API call instrumented via the [OTel GenAI semantic conventions](https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-events/). This example includes a tool call exchange where the model requests weather data.
```json
{
"gen_ai": {
"system_instructions": {
- [
- {
- "type": "text",
- "content": "You are a assistant for frequent travelers."
- },
- {
- "type": "text",
- "content": "Your mission is to assist travelers with their queries about locations around the world."
- }
+ [
+ {
+ "type": "text",
+ "content": "You are a assistant for frequent travelers."
+ },
+ {
+ "type": "text",
+ "content": "Your mission is to assist travelers with their queries about locations around the world."
+ }
]
},
"input": {
"messages": {
[
- {
- "role": "user",
- "parts": [
{
- "type": "text",
- "content": "Weather in Paris?"
- }
- ]
- },
- {
- "role": "assistant",
- "parts": [
+ "role": "user",
+ "parts": [
+ {
+ "type": "text",
+ "content": "Weather in Paris?"
+ }
+ ]
+ },
{
- "type": "tool_call",
- "id": "call_VSPygqKTWdrhaFErNvMV18Yl",
- "name": "get_weather",
- "arguments": {
- "location": "Paris"
- }
- }
- ]
- },
- {
- "role": "tool",
- "parts": [
+ "role": "assistant",
+ "parts": [
+ {
+ "type": "tool_call",
+ "id": "call_VSPygqKTWdrhaFErNvMV18Yl",
+ "name": "get_weather",
+ "arguments": {
+ "location": "Paris"
+ }
+ }
+ ]
+ },
{
- "type": "tool_call_response",
- "id": " call_VSPygqKTWdrhaFErNvMV18Yl",
- "result": "rainy, 57°F"
+ "role": "tool",
+ "parts": [
+ {
+ "type": "tool_call_response",
+ "id": " call_VSPygqKTWdrhaFErNvMV18Yl",
+ "result": "rainy, 57°F"
+ }
+ ]
}
- ]
- }
]
}
},
- "output" :{
+ "output": {
"messages": {
[
- {
- "role": "assistant",
- "parts": [
- {
- "type": "text",
- "content": "The weather in Paris is currently rainy with a temperature of 57°F."
- }
- ],
- "finish_reason": "stop"
- }
- ]
- },
-
- // Below needs to be updated, but keeping in this commit for illustration purposes.
- "assistant": {
- "message": {
- "content": "To carry a 5lb package, you would need a drone with sufficient payload capacity. Drones designed for heavy lifting often fall in the industrial or commercial category. Consider drones with a payload capacity of at least 6-7lbs to ensure safe transport and account for additional factors like battery and stability.",
- "role": "assistant",
- "tool_calls": [
{
- "function": "getDroneSpecifications",
- "arguments": {"payloadWeight": 5},
- "name": "getDroneSpecifications",
- "id": "toolCall1",
- "type": "function_call",
- },
- {
- "function": "retrieveAvailableDronesDocument",
- "arguments": {"documentType": "availableDrones", "payloadRequirement": 5},
- "name": "retrieveAvailableDronesDocument",
- "id": "toolCall2",
- "type": "function_call",
+ "role": "assistant",
+ "parts": [
+ {
+ "type": "text",
+ "content": "The weather in Paris is currently rainy with a temperature of 57°F."
+ }
+ ],
+ "finish_reason": "stop"
}
- ],
- }
- },
+ ]
+ },
+ }
}
}
-}
```
+## Scope of impact
-
+These are new additive fields; no breaking changes to existing ingest pipelines. The OTel Collector Elasticsearch exporter already maps complex `any`-typed attributes to `flattened`, so OTel-based ingest is compatible without modification. Custom integrations collecting GenAI telemetry may need to add field mappings for the new fields.
-
+## Concerns
-## Scope of impact
+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.
-## Concerns
+**Resolution:** All six fields in this RFC use `flattened`. The decision was driven by three constraints:
-
+1. OTel Collector ES exporter
-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?
+> 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
-## People
+> "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
-The following are the people that consulted on the contents of this RFC.
+See [comment](https://github.com/elastic/ecs/pull/2532#issuecomment-3415953216)
-* @susan-shu-c | author
+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:
-
+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. ES|QL `flattened` support is in development ([elasticsearch#145044](https://github.com/elastic/elasticsearch/pull/145044)), 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
## References
-
+### In-line references for this RFC
+
+[1] https://github.com/elastic/ecs/pull/2532#issuecomment-4121325575
+[2] GH issue can be provided upon request
+
+### General
* https://opentelemetry.io/blog/2024/otel-generative-ai/
* https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-events/
@@ -225,11 +189,6 @@ e.g.:
### RFC Pull Requests
-
-
* 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 000000000..3490655d1
--- /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 c7dd9d5df..096aba01f 100644
--- a/schemas/gen_ai.yml
+++ b/schemas/gen_ai.yml
@@ -179,15 +179,14 @@
beta: This field is beta and subject to change.
otel:
- relation: match
- - name: system
+ - name: provider.name
type: keyword
- description: The Generative AI product as identified by the client or server instrumentation.
+ description: The Generative AI provider as identified by the client or server instrumentation.
example: openai
level: extended
beta: This field is beta and subject to change.
otel:
- - relation: equivalent
- attribute: gen_ai.provider.name
+ - relation: match
- name: token.type
type: keyword
description: The type of token being counted.
@@ -236,3 +235,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