Skip to content

Commit a8d7b16

Browse files
authored
Merge pull request #98 from Scale3-Labs/devin/1738072036-update-seed-type
fix: allow gen_ai.request.seed to accept both string and integer types
2 parents 0466bc7 + 6f72659 commit a8d7b16

File tree

7 files changed

+106
-101
lines changed

7 files changed

+106
-101
lines changed

schemas/llm_span_attributes.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@
163163
"description": "The number of search units used in the request."
164164
},
165165
"gen_ai.request.seed": {
166-
"type": "string",
166+
"type": ["string", "integer"],
167167
"description": "Seed from the input request"
168168
},
169169
"gen_ai.request.frequency_penalty": {
@@ -240,4 +240,4 @@
240240
"url.full",
241241
"url.path"
242242
]
243-
}
243+
}

scripts/generate_python.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ SCHEMA_NAME="${SCHEMA_FILENAME%.*}"
1515
OUTPUT_FILE="src/python/langtrace/trace_attributes/models/${SCHEMA_NAME}.py"
1616

1717
# Generate the Python model
18-
datamodel-codegen --input "$SCHEMA_FILE" --input-file-type jsonschema --output "$OUTPUT_FILE"
18+
datamodel-codegen --input "$SCHEMA_FILE" --input-file-type jsonschema --output "$OUTPUT_FILE" \
19+
--output-model-type pydantic_v2.BaseModel --allow-extra-fields
1920

2021
echo "Generated Python model at: $OUTPUT_FILE"

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name="trace-attributes", # Choose a unique name for PyPI
5-
version="7.1.1",
5+
version="7.1.2",
66
author="Karthik Kalyanaraman",
77
author_email="[email protected]",
88
description="LangTrace - Trace Attributes",
Lines changed: 96 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,237 +1,241 @@
11
# generated by datamodel-codegen:
22
# filename: llm_span_attributes.json
3-
# timestamp: 2024-07-24T15:56:12+00:00
3+
# timestamp: 2025-01-28T14:02:08+00:00
44

55
from __future__ import annotations
66

7-
from typing import List, Optional
7+
from typing import List, Optional, Union
88

99
from pydantic import BaseModel, ConfigDict, Field
1010

1111

1212
class LLMSpanAttributes(BaseModel):
13-
model_config = ConfigDict(extra="allow")
14-
13+
model_config = ConfigDict(
14+
extra='allow',
15+
)
16+
langtrace_span_name: Optional[str] = Field(
17+
None, alias='langtrace.span.name', description='Name of the span'
18+
)
1519
langtrace_service_name: str = Field(
1620
...,
17-
alias="langtrace.service.name",
18-
description="Name of the service. Includes all supported service providers by langtrace",
21+
alias='langtrace.service.name',
22+
description='Name of the service. Includes all supported service providers by langtrace',
1923
)
2024
langtrace_service_type: str = Field(
2125
...,
22-
alias="langtrace.service.type",
23-
description="Type of the service. Allowed values: [llm, vectordb, framework]",
26+
alias='langtrace.service.type',
27+
description='Type of the service. Allowed values: [llm, vectordb, framework]',
2428
)
2529
langtrace_service_version: Optional[str] = Field(
2630
None,
27-
alias="langtrace.service.version",
28-
description="Version of the service provider client",
31+
alias='langtrace.service.version',
32+
description='Version of the service provider client',
2933
)
30-
langtrace_version: str = Field(..., alias="langtrace.version")
31-
langtrace_sdk_name: str = Field(..., alias="langtrace.sdk.name")
32-
url_full: str = Field(..., alias="url.full", description="Full URL of the request")
33-
url_path: str = Field(..., alias="url.path", description="Path of the request")
34+
langtrace_version: str = Field(..., alias='langtrace.version')
35+
langtrace_sdk_name: str = Field(..., alias='langtrace.sdk.name')
36+
url_full: str = Field(..., alias='url.full', description='Full URL of the request')
37+
url_path: str = Field(..., alias='url.path', description='Path of the request')
3438
gen_ai_operation_name: str = Field(
3539
...,
36-
alias="gen_ai.operation.name",
37-
description="The name of the operation being performed.",
40+
alias='gen_ai.operation.name',
41+
description='The name of the operation being performed.',
3842
)
3943
gen_ai_request_model: str = Field(
4044
...,
41-
alias="gen_ai.request.model",
42-
description="Model name from the input request",
45+
alias='gen_ai.request.model',
46+
description='Model name from the input request',
4347
)
4448
gen_ai_response_model: Optional[str] = Field(
45-
None, alias="gen_ai.response.model", description="Model name from the response"
49+
None, alias='gen_ai.response.model', description='Model name from the response'
4650
)
4751
gen_ai_request_temperature: Optional[float] = Field(
4852
None,
49-
alias="gen_ai.request.temperature",
50-
description="Temperature value from the input request",
53+
alias='gen_ai.request.temperature',
54+
description='Temperature value from the input request',
5155
)
5256
gen_ai_request_logit_bias: Optional[str] = Field(
5357
None,
54-
alias="gen_ai.request.logit_bias",
55-
description="Likelihood bias of the specified tokens the input request.",
58+
alias='gen_ai.request.logit_bias',
59+
description='Likelihood bias of the specified tokens the input request.',
5660
)
5761
gen_ai_request_logprobs: Optional[bool] = Field(
5862
None,
59-
alias="gen_ai.request.logprobs",
60-
description="Logprobs flag returns log probabilities.",
63+
alias='gen_ai.request.logprobs',
64+
description='Logprobs flag returns log probabilities.',
6165
)
6266
gen_ai_request_top_logprobs: Optional[float] = Field(
6367
None,
64-
alias="gen_ai.request.top_logprobs",
65-
description="Integer between 0 and 5 specifying the number of most likely tokens to return.",
68+
alias='gen_ai.request.top_logprobs',
69+
description='Integer between 0 and 5 specifying the number of most likely tokens to return.',
6670
)
6771
gen_ai_request_top_p: Optional[float] = Field(
6872
None,
69-
alias="gen_ai.request.top_p",
70-
description="Top P value from the input request",
73+
alias='gen_ai.request.top_p',
74+
description='Top P value from the input request',
7175
)
7276
gen_ai_request_top_k: Optional[float] = Field(
7377
None,
74-
alias="gen_ai.request.top_k",
75-
description="Top K results to return from the input request",
78+
alias='gen_ai.request.top_k',
79+
description='Top K results to return from the input request',
7680
)
7781
gen_ai_user: Optional[str] = Field(
78-
None, alias="gen_ai.user", description="User ID from the input request"
82+
None, alias='gen_ai.user', description='User ID from the input request'
7983
)
8084
gen_ai_prompt: Optional[str] = Field(
81-
None, alias="gen_ai.prompt", description="Prompt text from the input request"
85+
None, alias='gen_ai.prompt', description='Prompt text from the input request'
8286
)
8387
gen_ai_completion: Optional[str] = Field(
8488
None,
85-
alias="gen_ai.completion",
89+
alias='gen_ai.completion',
8690
description='Completion text from the response. This will be an array of json objects with the following format {"role": "", "content": ""}. Role can be one of the following values: [system, user, assistant, tool]',
8791
)
8892
gen_ai_request_stream: Optional[bool] = Field(
8993
None,
90-
alias="gen_ai.request.stream",
91-
description="Stream flag from the input request",
94+
alias='gen_ai.request.stream',
95+
description='Stream flag from the input request',
9296
)
9397
gen_ai_request_encoding_formats: Optional[List[str]] = Field(
9498
None,
95-
alias="gen_ai.request.encoding_formats",
99+
alias='gen_ai.request.encoding_formats',
96100
description="Encoding formats from the input request. Allowed values: ['float', 'int8','uint8', 'binary', 'ubinary', 'base64']",
97101
)
98102
gen_ai_completion_chunk: Optional[str] = Field(
99103
None,
100-
alias="gen_ai.completion.chunk",
101-
description="Chunk text from the response",
104+
alias='gen_ai.completion.chunk',
105+
description='Chunk text from the response',
102106
)
103107
gen_ai_request_dimensions: Optional[float] = Field(
104108
None,
105-
alias="gen_ai.request.dimensions",
106-
description="Dimensions from the input request",
109+
alias='gen_ai.request.dimensions',
110+
description='Dimensions from the input request',
107111
)
108112
gen_ai_response_id: Optional[str] = Field(
109113
None,
110-
alias="gen_ai.response_id",
111-
description="Response ID from the output response",
114+
alias='gen_ai.response_id',
115+
description='Response ID from the output response',
112116
)
113117
gen_ai_response_finish_reasons: Optional[List[str]] = Field(
114118
None,
115-
alias="gen_ai.response.finish_reasons",
116-
description="Array of reasons the model stopped generating tokens, corresponding to each generation received",
119+
alias='gen_ai.response.finish_reasons',
120+
description='Array of reasons the model stopped generating tokens, corresponding to each generation received',
117121
)
118122
gen_ai_system_fingerprint: Optional[str] = Field(
119123
None,
120-
alias="gen_ai.system_fingerprint",
121-
description="System fingerprint of the system that generated the response",
124+
alias='gen_ai.system_fingerprint',
125+
description='System fingerprint of the system that generated the response',
122126
)
123127
gen_ai_request_documents: Optional[str] = Field(
124128
None,
125-
alias="gen_ai.request.documents",
126-
description="Array of documents from the input request json stringified",
129+
alias='gen_ai.request.documents',
130+
description='Array of documents from the input request json stringified',
127131
)
128132
gen_ai_request_is_search_required: Optional[bool] = Field(
129133
None,
130-
alias="gen_ai.request.is_search_required",
131-
description="Search flag from the input request",
134+
alias='gen_ai.request.is_search_required',
135+
description='Search flag from the input request',
132136
)
133137
gen_ai_request_tool_choice: Optional[str] = Field(
134138
None,
135-
alias="gen_ai.request.tool_choice",
136-
description="Tool choice from the input request",
139+
alias='gen_ai.request.tool_choice',
140+
description='Tool choice from the input request',
137141
)
138142
gen_ai_response_tool_calls: Optional[str] = Field(
139143
None,
140-
alias="gen_ai.response.tool_calls",
141-
description="Array of tool calls from the response json stringified",
144+
alias='gen_ai.response.tool_calls',
145+
description='Array of tool calls from the response json stringified',
142146
)
143147
gen_ai_request_max_tokens: Optional[float] = Field(
144148
None,
145-
alias="gen_ai.request.max_tokens",
146-
description="The maximum number of tokens the LLM generates for a request.",
149+
alias='gen_ai.request.max_tokens',
150+
description='The maximum number of tokens the LLM generates for a request.',
147151
)
148152
gen_ai_usage_input_tokens: Optional[float] = Field(
149153
None,
150-
alias="gen_ai.usage.input_tokens",
151-
description="The number of tokens used in the llm prompt.",
154+
alias='gen_ai.usage.input_tokens',
155+
description='The number of tokens used in the llm prompt.',
152156
)
153157
gen_ai_usage_total_tokens: Optional[float] = Field(
154158
None,
155-
alias="gen_ai.usage.total_tokens",
156-
description="The total number of tokens used in the llm request.",
159+
alias='gen_ai.usage.total_tokens',
160+
description='The total number of tokens used in the llm request.',
157161
)
158162
gen_ai_usage_output_tokens: Optional[float] = Field(
159163
None,
160-
alias="gen_ai.usage.output_tokens",
161-
description="The number of tokens in the llm response.",
164+
alias='gen_ai.usage.output_tokens',
165+
description='The number of tokens in the llm response.',
162166
)
163167
gen_ai_usage_search_units: Optional[float] = Field(
164168
None,
165-
alias="gen_ai.usage.search_units",
166-
description="The number of search units used in the request.",
169+
alias='gen_ai.usage.search_units',
170+
description='The number of search units used in the request.',
167171
)
168-
gen_ai_request_seed: Optional[str | int] = Field(
169-
None, alias="gen_ai.request.seed", description="Seed from the input request"
172+
gen_ai_request_seed: Optional[Union[str, int]] = Field(
173+
None, alias='gen_ai.request.seed', description='Seed from the input request'
170174
)
171175
gen_ai_request_frequency_penalty: Optional[float] = Field(
172176
None,
173-
alias="gen_ai.request.frequency_penalty",
174-
description="Frequency penalty from the input request",
177+
alias='gen_ai.request.frequency_penalty',
178+
description='Frequency penalty from the input request',
175179
)
176180
gen_ai_request_presence_penalty: Optional[float] = Field(
177181
None,
178-
alias="gen_ai.request.presence_penalty",
179-
description="Presence penalty from the input request",
182+
alias='gen_ai.request.presence_penalty',
183+
description='Presence penalty from the input request',
180184
)
181185
gen_ai_request_connectors: Optional[str] = Field(
182186
None,
183-
alias="gen_ai.request.connectors",
184-
description="An array of connectors from the input request json stringified",
187+
alias='gen_ai.request.connectors',
188+
description='An array of connectors from the input request json stringified',
185189
)
186190
gen_ai_request_tools: Optional[str] = Field(
187191
None,
188-
alias="gen_ai.request.tools",
189-
description="An array of tools from the input request json stringified",
192+
alias='gen_ai.request.tools',
193+
description='An array of tools from the input request json stringified',
190194
)
191195
gen_ai_request_tool_results: Optional[str] = Field(
192196
None,
193-
alias="gen_ai.request.tool_results",
194-
description="An array of tool results from the input request json stringified",
197+
alias='gen_ai.request.tool_results',
198+
description='An array of tool results from the input request json stringified',
195199
)
196200
gen_ai_request_embedding_inputs: Optional[str] = Field(
197201
None,
198-
alias="gen_ai.request.embedding_inputs",
199-
description="An array of embedding inputs from the input request json stringified",
202+
alias='gen_ai.request.embedding_inputs',
203+
description='An array of embedding inputs from the input request json stringified',
200204
)
201205
gen_ai_request_embedding_dataset_id: Optional[str] = Field(
202206
None,
203-
alias="gen_ai.request.embedding_dataset_id",
204-
description="Embedding dataset ID from the input request",
207+
alias='gen_ai.request.embedding_dataset_id',
208+
description='Embedding dataset ID from the input request',
205209
)
206210
gen_ai_request_embedding_input_type: Optional[str] = Field(
207211
None,
208-
alias="gen_ai.request.embedding_input_type",
212+
alias='gen_ai.request.embedding_input_type',
209213
description="Embedding input type from the input request. Allowed values: [ 'search_document', 'search_query', 'classification', 'clustering']",
210214
)
211215
gen_ai_request_embedding_job_name: Optional[str] = Field(
212216
None,
213-
alias="gen_ai.request.embedding_job_name",
214-
description="Embedding job name from the input request",
217+
alias='gen_ai.request.embedding_job_name',
218+
description='Embedding job name from the input request',
215219
)
216220
gen_ai_image_size: Optional[str] = Field(
217221
None,
218-
alias="gen_ai.image.size",
222+
alias='gen_ai.image.size',
219223
description="Image size from the input request. Allowed values: ['256x256', '512x512', '1024x1024']",
220224
)
221225
gen_ai_request_response_format: Optional[str] = Field(
222226
None,
223-
alias="gen_ai.request.response_format",
227+
alias='gen_ai.request.response_format',
224228
description="Response format from the input request. Allowed values: ['url', 'b64_json']",
225229
)
226-
http_max_retries: Optional[int] = Field(None, alias="http.max.retries")
227-
http_timeout: Optional[int] = Field(None, alias="http.timeout")
230+
http_max_retries: Optional[int] = Field(None, alias='http.max.retries')
231+
http_timeout: Optional[int] = Field(None, alias='http.timeout')
228232
gen_ai_cohere_rerank_query: Optional[str] = Field(
229233
None,
230-
alias="gen_ai.cohere.rerank.query",
231-
description="Query from the input request for the rerank api",
234+
alias='gen_ai.cohere.rerank.query',
235+
description='Query from the input request for the rerank api',
232236
)
233237
gen_ai_cohere_rerank_results: Optional[str] = Field(
234238
None,
235-
alias="gen_ai.cohere.rerank.results",
236-
description="Results from the rerank api",
239+
alias='gen_ai.cohere.rerank.results',
240+
description='Results from the rerank api',
237241
)

src/typescript/models/llm_span_attributes.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export interface LLMSpanAttributes {
147147
/**
148148
* Seed from the input request
149149
*/
150-
"gen_ai.request.seed"?: string;
150+
"gen_ai.request.seed"?: string | number;
151151
/**
152152
* Frequency penalty from the input request
153153
*/

src/typescript/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)