diff --git a/CHANGELOG.next.md b/CHANGELOG.next.md
index debf20f66..bce0a0ec6 100644
--- a/CHANGELOG.next.md
+++ b/CHANGELOG.next.md
@@ -14,6 +14,8 @@ Thanks, you're awesome :-) -->
#### Bugfixes
+* Fix GenAI integer fields to use `long` datatype per ECS conventions. #2646
+
#### Added
* Add `vulnerability.status` field with allowed values `open`, `fixed`, `reopened`, `unknown`. #2662
diff --git a/docs/reference/ecs-gen_ai.md b/docs/reference/ecs-gen_ai.md
index 03fe63eff..77ccb9b2b 100644
--- a/docs/reference/ecs-gen_ai.md
+++ b/docs/reference/ecs-gen_ai.md
@@ -25,13 +25,13 @@ This field group definition is based on the Gen AI namespace of the OpenTelemetr
| $$$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-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: long
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 |
-| $$$field-gen-ai-request-max-tokens$$$ [gen_ai.request.max_tokens](#field-gen-ai-request-max-tokens) | _This field is beta and subject to change._ The maximum number of tokens the model generates for a request.
type: integer
example: `100`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.max_tokens](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-max-tokens) | extended |
+| $$$field-gen-ai-request-max-tokens$$$ [gen_ai.request.max_tokens](#field-gen-ai-request-max-tokens) | _This field is beta and subject to change._ The maximum number of tokens the model generates for a request.
type: long
example: `100`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.max_tokens](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-max-tokens) | extended |
| $$$field-gen-ai-request-model$$$ [gen_ai.request.model](#field-gen-ai-request-model) | _This field is beta and subject to change._ The name of the GenAI model a request is being made to.
type: keyword
example: `gpt-4`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.model](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-model) | extended |
| $$$field-gen-ai-request-presence-penalty$$$ [gen_ai.request.presence_penalty](#field-gen-ai-request-presence-penalty) | _This field is beta and subject to change._ The presence penalty setting for the GenAI request.
type: double
example: `0.1`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.presence_penalty](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-presence-penalty) | extended |
-| $$$field-gen-ai-request-seed$$$ [gen_ai.request.seed](#field-gen-ai-request-seed) | _This field is beta and subject to change._ Requests with same seed value more likely to return same result.
type: integer
example: `100`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.seed](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-seed) | extended |
+| $$$field-gen-ai-request-seed$$$ [gen_ai.request.seed](#field-gen-ai-request-seed) | _This field is beta and subject to change._ Requests with same seed value more likely to return same result.
type: long
example: `100`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.seed](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-seed) | extended |
| $$$field-gen-ai-request-stop-sequences$$$ [gen_ai.request.stop_sequences](#field-gen-ai-request-stop-sequences) | _This field is beta and subject to change._ List of sequences that the model will use to stop generating further tokens.
type: nested
example: `["forest", "lived"]`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.stop_sequences](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-stop-sequences) | extended |
| $$$field-gen-ai-request-temperature$$$ [gen_ai.request.temperature](#field-gen-ai-request-temperature) | _This field is beta and subject to change._ The temperature setting for the GenAI request.
type: double
example: `0.0`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.temperature](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-temperature) | extended |
| $$$field-gen-ai-request-top-k$$$ [gen_ai.request.top_k](#field-gen-ai-request-top-k) | _This field is beta and subject to change._ The top_k sampling setting for the GenAI request.
type: double
example: `1.0`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.request.top_k](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-request-top-k) | extended |
@@ -47,7 +47,7 @@ This field group definition is based on the Gen AI namespace of the OpenTelemetr
| $$$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 |
-| $$$field-gen-ai-usage-output-tokens$$$ [gen_ai.usage.output_tokens](#field-gen-ai-usage-output-tokens) | _This field is beta and subject to change._ The number of tokens used in the GenAI response (completion).
type: integer
example: `180`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.usage.output_tokens](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-usage-output-tokens) | 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: long
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 |
+| $$$field-gen-ai-usage-output-tokens$$$ [gen_ai.usage.output_tokens](#field-gen-ai-usage-output-tokens) | _This field is beta and subject to change._ The number of tokens used in the GenAI response (completion).
type: long
example: `180`
 [](/reference/ecs-opentelemetry.md#ecs-opentelemetry-relation) [gen_ai.usage.output_tokens](https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai/#gen-ai-usage-output-tokens) | extended |
diff --git a/generated/beats/fields.ecs.yml b/generated/beats/fields.ecs.yml
index ea10afd2c..757c54b5c 100644
--- a/generated/beats/fields.ecs.yml
+++ b/generated/beats/fields.ecs.yml
@@ -5469,7 +5469,7 @@
default_field: false
- name: request.choice.count
level: extended
- type: integer
+ type: long
description: The target number of candidate completions to return.
example: 3
default_field: false
@@ -5487,7 +5487,7 @@
default_field: false
- name: request.max_tokens
level: extended
- type: integer
+ type: long
description: The maximum number of tokens the model generates for a request.
example: 100
default_field: false
@@ -5506,7 +5506,7 @@
default_field: false
- name: request.seed
level: extended
- type: integer
+ type: long
description: Requests with same seed value more likely to return same result.
example: 100
default_field: false
@@ -5623,13 +5623,13 @@
default_field: false
- name: usage.input_tokens
level: extended
- type: integer
+ type: long
description: The number of tokens used in the GenAI input (prompt).
example: 100
default_field: false
- name: usage.output_tokens
level: extended
- type: integer
+ type: long
description: The number of tokens used in the GenAI response (completion).
example: 180
default_field: false
diff --git a/generated/csv/fields.csv b/generated/csv/fields.csv
index 29fc8955b..f1371e2f8 100644
--- a/generated/csv/fields.csv
+++ b/generated/csv/fields.csv
@@ -749,13 +749,13 @@ ECS_Version,Indexed,Field_Set,Field,Type,Level,Normalization,Example,Description
}","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.choice.count,long,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.
-9.5.0-dev,true,gen_ai,gen_ai.request.max_tokens,integer,extended,,100,The maximum number of tokens the model generates for a request.
+9.5.0-dev,true,gen_ai,gen_ai.request.max_tokens,long,extended,,100,The maximum number of tokens the model generates for a request.
9.5.0-dev,true,gen_ai,gen_ai.request.model,keyword,extended,,gpt-4,The name of the GenAI model a request is being made to.
9.5.0-dev,true,gen_ai,gen_ai.request.presence_penalty,double,extended,,0.1,The presence penalty setting for the GenAI request.
-9.5.0-dev,true,gen_ai,gen_ai.request.seed,integer,extended,,100,Requests with same seed value more likely to return same result.
+9.5.0-dev,true,gen_ai,gen_ai.request.seed,long,extended,,100,Requests with same seed value more likely to return same result.
9.5.0-dev,true,gen_ai,gen_ai.request.stop_sequences,nested,extended,,"[""forest"", ""lived""]",List of sequences that the model will use to stop generating further tokens.
9.5.0-dev,true,gen_ai,gen_ai.request.temperature,double,extended,,0.0,The temperature setting for the GenAI request.
9.5.0-dev,true,gen_ai,gen_ai.request.top_k,double,extended,,1.0,The top_k sampling setting for the GenAI request.
@@ -807,8 +807,8 @@ ECS_Version,Indexed,Field_Set,Field,Type,Level,Normalization,Example,Description
}",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).
-9.5.0-dev,true,gen_ai,gen_ai.usage.output_tokens,integer,extended,,180,The number of tokens used in the GenAI response (completion).
+9.5.0-dev,true,gen_ai,gen_ai.usage.input_tokens,long,extended,,100,The number of tokens used in the GenAI input (prompt).
+9.5.0-dev,true,gen_ai,gen_ai.usage.output_tokens,long,extended,,180,The number of tokens used in the GenAI response (completion).
9.5.0-dev,true,group,group.domain,keyword,extended,,,Name of the directory the group is a member of.
9.5.0-dev,true,group,group.id,keyword,extended,,,Unique identifier for the group on the system/platform.
9.5.0-dev,true,group,group.name,keyword,extended,,,Name of the group.
diff --git a/generated/ecs/ecs_flat.yml b/generated/ecs/ecs_flat.yml
index ab739d335..f3e9e2450 100644
--- a/generated/ecs/ecs_flat.yml
+++ b/generated/ecs/ecs_flat.yml
@@ -9903,7 +9903,7 @@ gen_ai.request.choice.count:
- relation: match
stability: development
short: The target number of candidate completions to return.
- type: integer
+ type: long
gen_ai.request.encoding_formats:
beta: This field is beta and subject to change.
dashed_name: gen-ai-request-encoding-formats
@@ -9945,7 +9945,7 @@ gen_ai.request.max_tokens:
- relation: match
stability: development
short: The maximum number of tokens the model generates for a request.
- type: integer
+ type: long
gen_ai.request.model:
beta: This field is beta and subject to change.
dashed_name: gen-ai-request-model
@@ -9988,7 +9988,7 @@ gen_ai.request.seed:
- relation: match
stability: development
short: Requests with same seed value more likely to return same result.
- type: integer
+ type: long
gen_ai.request.stop_sequences:
beta: This field is beta and subject to change.
dashed_name: gen-ai-request-stop-sequences
@@ -10235,7 +10235,7 @@ gen_ai.usage.input_tokens:
- relation: match
stability: development
short: The number of tokens used in the GenAI input (prompt).
- type: integer
+ type: long
gen_ai.usage.output_tokens:
beta: This field is beta and subject to change.
dashed_name: gen-ai-usage-output-tokens
@@ -10249,7 +10249,7 @@ gen_ai.usage.output_tokens:
- relation: match
stability: development
short: The number of tokens used in the GenAI response (completion).
- type: integer
+ type: long
group.domain:
dashed_name: group-domain
description: 'Name of the directory the group is a member of.
diff --git a/generated/ecs/ecs_nested.yml b/generated/ecs/ecs_nested.yml
index 71fa6def0..1ad03d861 100644
--- a/generated/ecs/ecs_nested.yml
+++ b/generated/ecs/ecs_nested.yml
@@ -11248,7 +11248,7 @@ gen_ai:
- relation: match
stability: development
short: The target number of candidate completions to return.
- type: integer
+ type: long
gen_ai.request.encoding_formats:
beta: This field is beta and subject to change.
dashed_name: gen-ai-request-encoding-formats
@@ -11290,7 +11290,7 @@ gen_ai:
- relation: match
stability: development
short: The maximum number of tokens the model generates for a request.
- type: integer
+ type: long
gen_ai.request.model:
beta: This field is beta and subject to change.
dashed_name: gen-ai-request-model
@@ -11333,7 +11333,7 @@ gen_ai:
- relation: match
stability: development
short: Requests with same seed value more likely to return same result.
- type: integer
+ type: long
gen_ai.request.stop_sequences:
beta: This field is beta and subject to change.
dashed_name: gen-ai-request-stop-sequences
@@ -11582,7 +11582,7 @@ gen_ai:
- relation: match
stability: development
short: The number of tokens used in the GenAI input (prompt).
- type: integer
+ type: long
gen_ai.usage.output_tokens:
beta: This field is beta and subject to change.
dashed_name: gen-ai-usage-output-tokens
@@ -11596,7 +11596,7 @@ gen_ai:
- relation: match
stability: development
short: The number of tokens used in the GenAI response (completion).
- type: integer
+ type: long
group: 2
name: gen_ai
prefix: gen_ai.
diff --git a/generated/elasticsearch/composable/component/gen_ai.json b/generated/elasticsearch/composable/component/gen_ai.json
index 571c3fc1a..807a64f27 100644
--- a/generated/elasticsearch/composable/component/gen_ai.json
+++ b/generated/elasticsearch/composable/component/gen_ai.json
@@ -64,7 +64,7 @@
"choice": {
"properties": {
"count": {
- "type": "integer"
+ "type": "long"
}
}
},
@@ -75,7 +75,7 @@
"type": "double"
},
"max_tokens": {
- "type": "integer"
+ "type": "long"
},
"model": {
"ignore_above": 1024,
@@ -85,7 +85,7 @@
"type": "double"
},
"seed": {
- "type": "integer"
+ "type": "long"
},
"stop_sequences": {
"type": "nested"
@@ -159,10 +159,10 @@
"usage": {
"properties": {
"input_tokens": {
- "type": "integer"
+ "type": "long"
},
"output_tokens": {
- "type": "integer"
+ "type": "long"
}
}
}
diff --git a/generated/elasticsearch/legacy/template.json b/generated/elasticsearch/legacy/template.json
index c235a7819..258b52adc 100644
--- a/generated/elasticsearch/legacy/template.json
+++ b/generated/elasticsearch/legacy/template.json
@@ -3583,7 +3583,7 @@
"choice": {
"properties": {
"count": {
- "type": "integer"
+ "type": "long"
}
}
},
@@ -3594,7 +3594,7 @@
"type": "double"
},
"max_tokens": {
- "type": "integer"
+ "type": "long"
},
"model": {
"ignore_above": 1024,
@@ -3604,7 +3604,7 @@
"type": "double"
},
"seed": {
- "type": "integer"
+ "type": "long"
},
"stop_sequences": {
"type": "nested"
@@ -3678,10 +3678,10 @@
"usage": {
"properties": {
"input_tokens": {
- "type": "integer"
+ "type": "long"
},
"output_tokens": {
- "type": "integer"
+ "type": "long"
}
}
}
diff --git a/schemas/gen_ai.yml b/schemas/gen_ai.yml
index 8d7680842..fe1fcc4d0 100644
--- a/schemas/gen_ai.yml
+++ b/schemas/gen_ai.yml
@@ -68,7 +68,7 @@
otel:
- relation: match
- name: request.choice.count
- type: integer
+ type: long
description: The target number of candidate completions to return.
example: 3
level: extended
@@ -92,7 +92,7 @@
otel:
- relation: match
- name: request.max_tokens
- type: integer
+ type: long
description: The maximum number of tokens the model generates for a request.
example: 100
level: extended
@@ -116,7 +116,7 @@
otel:
- relation: match
- name: request.seed
- type: integer
+ type: long
description: Requests with same seed value more likely to return same result.
example: 100
level: extended
@@ -220,7 +220,7 @@
otel:
- relation: match
- name: usage.input_tokens
- type: integer
+ type: long
description: The number of tokens used in the GenAI input (prompt).
example: 100
level: extended
@@ -228,7 +228,7 @@
otel:
- relation: match
- name: usage.output_tokens
- type: integer
+ type: long
description: The number of tokens used in the GenAI response (completion).
example: 180
level: extended