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`
 [](/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-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 |
@@ -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`
 [](/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 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) | [](/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-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) |  |
@@ -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) | [](/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 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