Skip to content

feat(server-ai): stamp model metadata on AI usage events#192

Open
atornsii wants to merge 5 commits into
mainfrom
atornsii/AIC-2977/model-versioning-changes
Open

feat(server-ai): stamp model metadata on AI usage events#192
atornsii wants to merge 5 commits into
mainfrom
atornsii/AIC-2977/model-versioning-changes

Conversation

@atornsii

@atornsii atornsii commented Jul 14, 2026

Copy link
Copy Markdown

Requirements

  • I have added test coverage for new or changed functionality
  • I have followed the repository's pull request submission guidelines
  • I have validated my changes against all supported platform versions

Related issues

Describe the solution you've provided

Read modelKey and modelVersion from AI Config model payloads, expose them on the public model/tracking data types, and stamp them on every emitted tracker metric event. Model version defaults to 1, null/empty/whitespace model keys are omitted, and the resumption-token format remains unchanged.

Describe alternatives you've considered

This mirrors the established JavaScript and .NET SDK implementations.

Additional context

Depends on AIC-2876 for the backend payload fields.

Test plan

  • JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 lib/sdk/server-ai/gradlew test -p lib/sdk/server-ai
  • JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 lib/sdk/server-ai/gradlew build -p lib/sdk/server-ai
  • JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 lib/sdk/server-ai/gradlew javadoc -p lib/sdk/server-ai
  • CI Java 8/11/17 matrix
Open in Web Open in Cursor 

cursoragent and others added 5 commits July 14, 2026 18:56
Co-authored-by: Anthony Torns II <atornsii@users.noreply.github.com>
Co-authored-by: Anthony Torns II <atornsii@users.noreply.github.com>
Co-authored-by: Anthony Torns II <atornsii@users.noreply.github.com>
Co-authored-by: Anthony Torns II <atornsii@users.noreply.github.com>
…oken test

Model.getModelKey() previously returned an empty string for a
blank-but-present modelKey payload value, contradicting its own Javadoc
contract and diverging from TrackData/tracker normalization. Trim it to
null in AIConfigParser like other string fields.

Also strengthen resumptionTokenExcludesModelMetadata to decode the token
and assert the wire format has no modelKey/modelVersion, rather than
relying solely on token equality across two trackers.

Co-authored-by: Cursor <cursoragent@cursor.com>
@atornsii atornsii marked this pull request as ready for review July 14, 2026 19:47
@atornsii atornsii requested a review from a team as a code owner July 14, 2026 19:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants