feat(ldai): stamp modelKey and modelVersion on AI usage events (AIC-2850)#414
Merged
atornsii merged 3 commits intoJul 22, 2026
Merged
Conversation
…850) Read modelKey and modelVersion from the AI Config variation payload and expose them on Config. Stamp both fields on every metric event alongside existing modelName and providerName. modelVersion defaults to 1 when absent; modelKey is omitted when empty. Neither field is included in the resumption token. Additive and backward compatible with older payloads. Co-authored-by: Anthony Torns II <atornsii@users.noreply.github.com>
Contributor
|
Holding based on our conversation today and we will follow up on slack before reviewing. |
Contributor
|
We are also in the process of migrating this to the go-server-sdk-ai repository. |
atornsii
marked this pull request as ready for review
July 9, 2026 20:31
atornsii
marked this pull request as draft
July 15, 2026 21:36
Gonfalon moved these two fields from the payload's model object to _ldMeta (launchdarkly/gonfalon#67230) to avoid modelVersion reading as the underlying LLM's own version. Field names are unchanged; only the JSON location moves. The SDK's public Config.ModelKey()/ModelVersion() and the tracker's stamped event fields are untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
atornsii
marked this pull request as ready for review
July 16, 2026 16:55
jsonbailey
reviewed
Jul 16, 2026
| Set("modelName", ldvalue.String(config.ModelName())) | ||
| Set("modelName", ldvalue.String(config.ModelName())). | ||
| Set("modelVersion", ldvalue.Int(config.ModelVersion())) | ||
| if config.ModelKey() != "" { |
Contributor
There was a problem hiding this comment.
should we exclude the modelVersion if the model key is empty? Wrap them both in the if check?
Contributor
Author
There was a problem hiding this comment.
No we want modelVersion to default to 1, meaning "unversioned model," whenever the key isn't present. We have legacy models and inline models attached that won't have a key
jsonbailey
approved these changes
Jul 16, 2026
modelKey/modelVersion should only be visible via the tracker's stamped event data, mirroring how VariationKey/Version are treated. They now flow from the already-parsed _ldMeta fields straight into newTracker as explicit parameters instead of being read off Config. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jsonbailey
approved these changes
Jul 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
modelKeyandmodelVersionfrom the AI Config variation payload (model.modelKey/model.modelVersion) and expose them onConfigviaModelKey()/ModelVersion()accessors and builder methodsmodelKey(when present) andmodelVersionon allTrackermetric event payloads, alongside existingmodelName/providerNamefieldsmodelVersionto1when absent, matching variation version handling; exclude both fields from the resumption tokenPart of AIC-2850 / AIC-2849. Depends on backend payload work (AIC-2876) shipping
modelKey/modelVersionon variations.Test plan
go build ./...inldai/go vet ./...inldai/go test ./...inldai/(all passed)Requirements
Related issues
Describe the solution you've provided
The Go AI SDK now parses
modelKeyandmodelVersionfrom the variation'smodelobject, exposes them throughConfigaccessors, and includes them in thetrackDatastamped on every metric event.modelVersionis always emitted (defaulting to 1);modelKeyis omitted when empty. Neither field is included in the resumption token.Describe alternatives you've considered
Threading
modelKey/modelVersionas explicit constructor parameters tonewTracker(as in the Python SDK PR) was considered but rejected in favor of sourcing fromConfig, matching the existingmodelName/providerNamepattern.Additional context
Mirrors python-server-sdk-ai#208.