Compare commits
1 Commits
master
...
fd6ee4f182
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd6ee4f182 |
1504
src/index.tsx
1504
src/index.tsx
File diff suppressed because it is too large
Load Diff
@@ -78,7 +78,6 @@ fragment VideoCardFields on VideoGQL {
|
|||||||
replies {
|
replies {
|
||||||
id
|
id
|
||||||
message
|
message
|
||||||
replyToCommentId
|
|
||||||
user {
|
user {
|
||||||
...UserSocialsFields
|
...UserSocialsFields
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
# Legacy shot-sim operations still used by mobile master's
|
|
||||||
# LiveStreamPicker / RecordedShotPicker; remove when those are deleted.
|
|
||||||
|
|
||||||
query GetRecordedStreams($limit: Int! = 25) {
|
|
||||||
getFeedVideos(
|
|
||||||
limit: $limit
|
|
||||||
filters: { isStreamCompleted: true, excludeVideosWithNoShots: true }
|
|
||||||
includePrivate: MINE
|
|
||||||
feedInput: { allUsers: true }
|
|
||||||
) {
|
|
||||||
videos {
|
|
||||||
id
|
|
||||||
name
|
|
||||||
createdAt
|
|
||||||
screenshotUri
|
|
||||||
framesPerSecond
|
|
||||||
totalShots
|
|
||||||
owner {
|
|
||||||
id
|
|
||||||
username
|
|
||||||
profileImageUri
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,19 +1,10 @@
|
|||||||
# Lightweight two-step picker data for Shot Lab's video-first source: recent
|
# Lightweight two-step picker data for loading a recorded shot into Shot Lab.
|
||||||
# videos from the requested audience (mine, followed users, or public), then
|
query GetRecordedStreams($limit: Int! = 25) {
|
||||||
# that video's shots. The stream fields hint at "actively updating" without
|
|
||||||
# gating.
|
|
||||||
query GetShotLabVideos(
|
|
||||||
$feedInput: VideoFeedInputGQL!
|
|
||||||
$includePrivate: IncludePrivateEnum!
|
|
||||||
$limit: Int! = 25
|
|
||||||
$after: String = null
|
|
||||||
) {
|
|
||||||
getFeedVideos(
|
getFeedVideos(
|
||||||
limit: $limit
|
limit: $limit
|
||||||
after: $after
|
filters: { isStreamCompleted: true, excludeVideosWithNoShots: true }
|
||||||
includeCallersVideos: false
|
includePrivate: MINE
|
||||||
includePrivate: $includePrivate
|
feedInput: { allUsers: true }
|
||||||
feedInput: $feedInput
|
|
||||||
) {
|
) {
|
||||||
videos {
|
videos {
|
||||||
id
|
id
|
||||||
@@ -27,15 +18,6 @@ query GetShotLabVideos(
|
|||||||
username
|
username
|
||||||
profileImageUri
|
profileImageUri
|
||||||
}
|
}
|
||||||
stream {
|
|
||||||
id
|
|
||||||
isCompleted
|
|
||||||
lastSegmentUploadedAt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pageInfo {
|
|
||||||
hasNextPage
|
|
||||||
endCursor
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,11 +36,26 @@ query GetRecordedStreamShots($videoId: Int!, $limit: Int! = 200) {
|
|||||||
serializedShotPaths {
|
serializedShotPaths {
|
||||||
b64EncodedBuffer
|
b64EncodedBuffer
|
||||||
}
|
}
|
||||||
|
cueObjectFeatures {
|
||||||
|
cueObjectDistance
|
||||||
|
cueObjectAngle
|
||||||
|
cueBallSpeed
|
||||||
|
shotDirection
|
||||||
|
spinType
|
||||||
|
}
|
||||||
pocketingIntentionFeatures {
|
pocketingIntentionFeatures {
|
||||||
make
|
make
|
||||||
|
targetPocketDistance
|
||||||
|
targetPocketAngle
|
||||||
|
targetPocketAngleDirection
|
||||||
|
marginOfErrorInDegrees
|
||||||
|
intendedPocketType
|
||||||
|
difficulty
|
||||||
}
|
}
|
||||||
pocketingIntentionInfo {
|
pocketingIntentionInfo {
|
||||||
|
ballId
|
||||||
pocketId
|
pocketId
|
||||||
|
pathMetadataIndex
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,65 +14,12 @@ query GetSessionCoach($videoId: Int!) {
|
|||||||
unknownOutcomeCount
|
unknownOutcomeCount
|
||||||
analyzedShotCount
|
analyzedShotCount
|
||||||
makePercentage
|
makePercentage
|
||||||
longestMakeStreak
|
|
||||||
recentBaseline {
|
|
||||||
sessionCount
|
|
||||||
attemptCount
|
|
||||||
madeCount
|
|
||||||
makePercentage
|
|
||||||
}
|
|
||||||
positiveCandidates {
|
|
||||||
...SessionCoachCandidateFields
|
|
||||||
}
|
|
||||||
primaryCandidate {
|
primaryCandidate {
|
||||||
...SessionCoachCandidateFields
|
...SessionCoachCandidateFields
|
||||||
}
|
}
|
||||||
candidates {
|
candidates {
|
||||||
...SessionCoachCandidateFields
|
...SessionCoachCandidateFields
|
||||||
}
|
}
|
||||||
agentGeneration {
|
|
||||||
...SessionCoachGenerationFields
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
query GetSessionCoachGenerationStatus($videoId: Int!, $generationId: ID!) {
|
|
||||||
getSessionCoachGenerationStatus(
|
|
||||||
videoId: $videoId
|
|
||||||
generationId: $generationId
|
|
||||||
) {
|
|
||||||
id
|
|
||||||
state
|
|
||||||
createdAt
|
|
||||||
updatedAt
|
|
||||||
startedAt
|
|
||||||
lastEnqueuedAt
|
|
||||||
enqueueCount
|
|
||||||
completedAt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mutation RequestSessionCoachGeneration($videoId: Int!) {
|
|
||||||
requestSessionCoachGeneration(videoId: $videoId) {
|
|
||||||
state
|
|
||||||
agentGeneration {
|
|
||||||
...SessionCoachGenerationFields
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mutation SubmitSessionCoachFeedback(
|
|
||||||
$videoId: Int!
|
|
||||||
$generationId: ID!
|
|
||||||
$response: SessionCoachFeedbackResponseEnum!
|
|
||||||
) {
|
|
||||||
submitSessionCoachFeedback(
|
|
||||||
videoId: $videoId
|
|
||||||
generationId: $generationId
|
|
||||||
response: $response
|
|
||||||
) {
|
|
||||||
response
|
|
||||||
updatedAt
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,56 +47,5 @@ fragment SessionCoachCandidateFields on SessionCoachCandidateGQL {
|
|||||||
patternShotCount
|
patternShotCount
|
||||||
score
|
score
|
||||||
rankReason
|
rankReason
|
||||||
baselineSessionCount
|
|
||||||
baselineAttemptCount
|
|
||||||
baselineMadeCount
|
|
||||||
baselineMakePercentage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment SessionCoachGenerationFields on SessionCoachGenerationGQL {
|
|
||||||
id
|
|
||||||
state
|
|
||||||
createdAt
|
|
||||||
completedAt
|
|
||||||
decision {
|
|
||||||
selectedPositiveCandidateId
|
|
||||||
positiveTitle
|
|
||||||
positiveBody
|
|
||||||
selectedCandidateId
|
|
||||||
supportingCandidateIds
|
|
||||||
supportingShotIds
|
|
||||||
sessionSummary
|
|
||||||
title
|
|
||||||
body
|
|
||||||
suggestedAction
|
|
||||||
drillId
|
|
||||||
drillReason
|
|
||||||
practiceAttemptCount
|
|
||||||
practiceTarget
|
|
||||||
}
|
|
||||||
diagnostics {
|
|
||||||
analysisVersion
|
|
||||||
promptVersion
|
|
||||||
providerKey
|
|
||||||
modelName
|
|
||||||
inputHash
|
|
||||||
attemptCount
|
|
||||||
maxAttempts
|
|
||||||
enqueueCount
|
|
||||||
latencyMs
|
|
||||||
inputTokens
|
|
||||||
cachedInputTokens
|
|
||||||
outputTokens
|
|
||||||
failureCode
|
|
||||||
updatedAt
|
|
||||||
startedAt
|
|
||||||
lastEnqueuedAt
|
|
||||||
abstentionReason
|
|
||||||
synthesisRationale
|
|
||||||
}
|
|
||||||
feedback {
|
|
||||||
response
|
|
||||||
updatedAt
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
mutation CreateShotShareLink($shotIds: [Int!]!, $paddingSeconds: Float = null) {
|
|
||||||
createShotShareLink(
|
|
||||||
input: { shotIds: $shotIds, paddingSeconds: $paddingSeconds }
|
|
||||||
) {
|
|
||||||
slug
|
|
||||||
url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,73 +1,3 @@
|
|||||||
fragment TableStateLayoutFields on TableStateGQL {
|
|
||||||
identifierToPosition
|
|
||||||
identifierToColor {
|
|
||||||
hex
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment DetectionBoxFields on BoundingBoxGQL {
|
|
||||||
left
|
|
||||||
top
|
|
||||||
width
|
|
||||||
height
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment DetectionPocketPointFields on PocketPointsGQL {
|
|
||||||
topLeft {
|
|
||||||
x
|
|
||||||
y
|
|
||||||
}
|
|
||||||
topSide {
|
|
||||||
x
|
|
||||||
y
|
|
||||||
}
|
|
||||||
topRight {
|
|
||||||
x
|
|
||||||
y
|
|
||||||
}
|
|
||||||
bottomLeft {
|
|
||||||
x
|
|
||||||
y
|
|
||||||
}
|
|
||||||
bottomSide {
|
|
||||||
x
|
|
||||||
y
|
|
||||||
}
|
|
||||||
bottomRight {
|
|
||||||
x
|
|
||||||
y
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Everything needed to redraw a detection over the image it came from:
|
|
||||||
# the detector's boxes plus the homography that turned them into plane
|
|
||||||
# positions. Boxes, pocket boxes, and source points share the crop's
|
|
||||||
# coordinate space; the crop locates that space in the full frame.
|
|
||||||
#
|
|
||||||
# Only the photo query selects this. The shot query returns its source
|
|
||||||
# frame (frameImage) but positions there come from the stored homography,
|
|
||||||
# so there are no fresh boxes to draw; the live query returns no image at
|
|
||||||
# all and is polled every five seconds.
|
|
||||||
fragment TableStateDetectionFields on TableStateGQL {
|
|
||||||
identifierToBox {
|
|
||||||
...DetectionBoxFields
|
|
||||||
}
|
|
||||||
homography {
|
|
||||||
crop {
|
|
||||||
...DetectionBoxFields
|
|
||||||
}
|
|
||||||
pockets {
|
|
||||||
...DetectionBoxFields
|
|
||||||
}
|
|
||||||
sourcePoints {
|
|
||||||
...DetectionPocketPointFields
|
|
||||||
}
|
|
||||||
destPoints {
|
|
||||||
...DetectionPocketPointFields
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
query GetTableState(
|
query GetTableState(
|
||||||
$b64Image: String!
|
$b64Image: String!
|
||||||
$tableSize: Float
|
$tableSize: Float
|
||||||
@@ -78,8 +8,10 @@ query GetTableState(
|
|||||||
tableSize: $tableSize
|
tableSize: $tableSize
|
||||||
useHomography: $useHomography
|
useHomography: $useHomography
|
||||||
) {
|
) {
|
||||||
...TableStateLayoutFields
|
identifierToPosition
|
||||||
...TableStateDetectionFields
|
identifierToColor {
|
||||||
|
hex
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +20,10 @@ query GetLiveTableState($videoId: Int!) {
|
|||||||
videoId
|
videoId
|
||||||
frameIndex
|
frameIndex
|
||||||
tableState {
|
tableState {
|
||||||
...TableStateLayoutFields
|
identifierToPosition
|
||||||
|
identifierToColor {
|
||||||
|
hex
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -98,11 +33,11 @@ query GetShotTableState($shotId: Int!) {
|
|||||||
shotId
|
shotId
|
||||||
videoId
|
videoId
|
||||||
frameIndex
|
frameIndex
|
||||||
# The b64 JPEG frame the layout was detected in, so the client can show
|
|
||||||
# the shot's actual starting frame instead of the video's thumbnail.
|
|
||||||
frameImage
|
|
||||||
tableState {
|
tableState {
|
||||||
...TableStateLayoutFields
|
identifierToPosition
|
||||||
|
identifierToColor {
|
||||||
|
hex
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ query getUsageStats($days: Int! = 30) {
|
|||||||
activationCohort
|
activationCohort
|
||||||
activationActivated
|
activationActivated
|
||||||
payingUsers
|
payingUsers
|
||||||
pastDueUsers
|
|
||||||
newPaidToday
|
|
||||||
newPaid7d
|
newPaid7d
|
||||||
newPaid30d
|
newPaid30d
|
||||||
retentionPrevActive
|
retentionPrevActive
|
||||||
@@ -20,7 +18,6 @@ query getUsageStats($days: Int! = 30) {
|
|||||||
activated7d
|
activated7d
|
||||||
paid7d
|
paid7d
|
||||||
activatedNotPaid7d
|
activatedNotPaid7d
|
||||||
paidTotal
|
|
||||||
}
|
}
|
||||||
totalUsers
|
totalUsers
|
||||||
totalVideos
|
totalVideos
|
||||||
|
|||||||
@@ -131,7 +131,6 @@ query GetVideoSocialDetailsById($videoId: Int!) {
|
|||||||
replies {
|
replies {
|
||||||
id
|
id
|
||||||
message
|
message
|
||||||
replyToCommentId
|
|
||||||
user {
|
user {
|
||||||
...UserSocialsFields
|
...UserSocialsFields
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,52 +48,6 @@ mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stream {
|
stream {
|
||||||
id
|
|
||||||
uploadCompletionCursor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mutation GetUploadLinks($videoId: Int!, $segmentIndexes: [Int!]!) {
|
|
||||||
getUploadLinks(videoId: $videoId, segmentIndexes: $segmentIndexes) {
|
|
||||||
value {
|
|
||||||
... on UploadLinkBatch {
|
|
||||||
links {
|
|
||||||
segmentIndex
|
|
||||||
uploadUrl
|
|
||||||
headers {
|
|
||||||
key
|
|
||||||
value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
alreadyUploaded
|
|
||||||
}
|
|
||||||
... on GetUploadLinkErrors {
|
|
||||||
error {
|
|
||||||
... on MustHaveSetForUploadLinkErr {
|
|
||||||
resolution
|
|
||||||
framesPerSecond
|
|
||||||
}
|
|
||||||
... on ProcessingFailedErr {
|
|
||||||
processing {
|
|
||||||
status
|
|
||||||
errors {
|
|
||||||
message
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
... on StorageLimitExceededErr {
|
|
||||||
reason
|
|
||||||
tierName
|
|
||||||
retainedStorageUsedBytes
|
|
||||||
retainedStorageLimitBytes
|
|
||||||
remainingStorageBytes
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stream {
|
|
||||||
id
|
|
||||||
uploadCompletionCursor
|
uploadCompletionCursor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -173,7 +127,6 @@ fragment UploadStreamWithDetails on VideoGQL {
|
|||||||
name
|
name
|
||||||
startTime
|
startTime
|
||||||
stream {
|
stream {
|
||||||
id
|
|
||||||
isCompleted
|
isCompleted
|
||||||
lastIntendedSegmentBound
|
lastIntendedSegmentBound
|
||||||
uploadCompletionCursor
|
uploadCompletionCursor
|
||||||
|
|||||||
148
src/schema.gql
148
src/schema.gql
@@ -214,7 +214,6 @@ type CohortStatsGQL {
|
|||||||
activated7d: Int!
|
activated7d: Int!
|
||||||
paid7d: Int!
|
paid7d: Int!
|
||||||
activatedNotPaid7d: Int!
|
activatedNotPaid7d: Int!
|
||||||
paidTotal: Int!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type CommentGQL {
|
type CommentGQL {
|
||||||
@@ -222,7 +221,6 @@ type CommentGQL {
|
|||||||
user: UserGQL!
|
user: UserGQL!
|
||||||
message: String!
|
message: String!
|
||||||
replies: [CommentGQL!]!
|
replies: [CommentGQL!]!
|
||||||
replyToCommentId: Int
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type CountLeaderboardGQL {
|
type CountLeaderboardGQL {
|
||||||
@@ -260,11 +258,6 @@ input CreatePoolHallInput {
|
|||||||
timezone: String = null
|
timezone: String = null
|
||||||
}
|
}
|
||||||
|
|
||||||
input CreateShotShareLinkInput {
|
|
||||||
shotIds: [Int!]!
|
|
||||||
paddingSeconds: Float = null
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateSubscriptionResultGQL {
|
type CreateSubscriptionResultGQL {
|
||||||
checkoutUrl: String!
|
checkoutUrl: String!
|
||||||
sessionId: String!
|
sessionId: String!
|
||||||
@@ -408,7 +401,6 @@ input FilterInput @oneOf {
|
|||||||
userId: [Int!]
|
userId: [Int!]
|
||||||
runId: [Int!]
|
runId: [Int!]
|
||||||
username: [String!]
|
username: [String!]
|
||||||
playerIndex: [Int!]
|
|
||||||
fargoRating: FloatRangeFilter
|
fargoRating: FloatRangeFilter
|
||||||
make: [Boolean!]
|
make: [Boolean!]
|
||||||
tags: [VideoTagInput!]
|
tags: [VideoTagInput!]
|
||||||
@@ -466,8 +458,6 @@ type FunnelStatsGQL {
|
|||||||
activationCohort: Int!
|
activationCohort: Int!
|
||||||
activationActivated: Int!
|
activationActivated: Int!
|
||||||
payingUsers: Int!
|
payingUsers: Int!
|
||||||
pastDueUsers: Int!
|
|
||||||
newPaidToday: Int!
|
|
||||||
newPaid7d: Int!
|
newPaid7d: Int!
|
||||||
newPaid30d: Int!
|
newPaid30d: Int!
|
||||||
retentionPrevActive: Int!
|
retentionPrevActive: Int!
|
||||||
@@ -535,11 +525,6 @@ type GetUploadLinkReturn {
|
|||||||
stream: UploadStreamGQL
|
stream: UploadStreamGQL
|
||||||
}
|
}
|
||||||
|
|
||||||
type GetUploadLinksReturn {
|
|
||||||
value: UploadLinkBatchGetUploadLinkErrors!
|
|
||||||
stream: UploadStreamGQL
|
|
||||||
}
|
|
||||||
|
|
||||||
type HLSPlaylistGQL {
|
type HLSPlaylistGQL {
|
||||||
videoId: Int!
|
videoId: Int!
|
||||||
m3u8Text: String!
|
m3u8Text: String!
|
||||||
@@ -715,7 +700,6 @@ type Mutation {
|
|||||||
cancelCameraClaimSession(claimSessionId: ID!): CameraClaimSession!
|
cancelCameraClaimSession(claimSessionId: ID!): CameraClaimSession!
|
||||||
endCameraLease(leaseId: ID!): CameraLease!
|
endCameraLease(leaseId: ID!): CameraLease!
|
||||||
extendCameraLease(leaseId: ID!, additionalMinutes: Int! = 60): CameraLease!
|
extendCameraLease(leaseId: ID!, additionalMinutes: Int! = 60): CameraLease!
|
||||||
createShotShareLink(input: CreateShotShareLinkInput!): ShareLinkGQL!
|
|
||||||
finalizePlayerAssignments(
|
finalizePlayerAssignments(
|
||||||
input: FinalizePlayerAssignmentsInput!
|
input: FinalizePlayerAssignmentsInput!
|
||||||
): [PlayerClusterGQL!]!
|
): [PlayerClusterGQL!]!
|
||||||
@@ -732,12 +716,6 @@ type Mutation {
|
|||||||
shotId: Int!
|
shotId: Int!
|
||||||
fieldsToEdit: EditableShotFieldInputGQL!
|
fieldsToEdit: EditableShotFieldInputGQL!
|
||||||
): EditShotReturn!
|
): EditShotReturn!
|
||||||
submitSessionCoachFeedback(
|
|
||||||
videoId: Int!
|
|
||||||
generationId: ID!
|
|
||||||
response: SessionCoachFeedbackResponseEnum!
|
|
||||||
): SessionCoachFeedbackGQL!
|
|
||||||
requestSessionCoachGeneration(videoId: Int!): SessionCoachGQL!
|
|
||||||
getProfileImageUploadLink(
|
getProfileImageUploadLink(
|
||||||
fileExt: String = ".png"
|
fileExt: String = ".png"
|
||||||
): GetProfileUploadLinkReturn!
|
): GetProfileUploadLinkReturn!
|
||||||
@@ -775,7 +753,6 @@ type Mutation {
|
|||||||
expectedDurationSeconds: Float = null
|
expectedDurationSeconds: Float = null
|
||||||
): CreateUploadStreamReturn!
|
): CreateUploadStreamReturn!
|
||||||
getUploadLink(videoId: Int!, segmentIndex: Int!): GetUploadLinkReturn!
|
getUploadLink(videoId: Int!, segmentIndex: Int!): GetUploadLinkReturn!
|
||||||
getUploadLinks(videoId: Int!, segmentIndexes: [Int!]!): GetUploadLinksReturn!
|
|
||||||
getHlsInitUploadLink(videoId: Int!): GetUploadLinkReturn!
|
getHlsInitUploadLink(videoId: Int!): GetUploadLinkReturn!
|
||||||
setSegmentDuration(
|
setSegmentDuration(
|
||||||
videoId: Int!
|
videoId: Int!
|
||||||
@@ -1077,10 +1054,6 @@ type Query {
|
|||||||
limit: Int! = 500
|
limit: Int! = 500
|
||||||
countRespectsLimit: Boolean! = false
|
countRespectsLimit: Boolean! = false
|
||||||
): GetRunsResult!
|
): GetRunsResult!
|
||||||
getSessionCoachGenerationStatus(
|
|
||||||
videoId: Int!
|
|
||||||
generationId: ID!
|
|
||||||
): SessionCoachGenerationStatusGQL
|
|
||||||
getSessionCoach(videoId: Int!): SessionCoachGQL!
|
getSessionCoach(videoId: Int!): SessionCoachGQL!
|
||||||
videoPlayerClusters(videoId: Int!): [PlayerClusterGQL!]!
|
videoPlayerClusters(videoId: Int!): [PlayerClusterGQL!]!
|
||||||
getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]!
|
getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]!
|
||||||
@@ -1314,25 +1287,11 @@ type SegmentAlreadyUploadedErr {
|
|||||||
segmentId: Int!
|
segmentId: Int!
|
||||||
}
|
}
|
||||||
|
|
||||||
type SegmentUploadLink {
|
|
||||||
segmentIndex: Int!
|
|
||||||
uploadUrl: String!
|
|
||||||
headers: [Header]!
|
|
||||||
}
|
|
||||||
|
|
||||||
type SerializedShotPathsGQL {
|
type SerializedShotPathsGQL {
|
||||||
b64EncodedBuffer: String
|
b64EncodedBuffer: String
|
||||||
}
|
}
|
||||||
|
|
||||||
type SessionCoachBaselineGQL {
|
|
||||||
sessionCount: Int!
|
|
||||||
attemptCount: Int!
|
|
||||||
madeCount: Int!
|
|
||||||
makePercentage: Float!
|
|
||||||
}
|
|
||||||
|
|
||||||
enum SessionCoachCandidateFamilyEnum {
|
enum SessionCoachCandidateFamilyEnum {
|
||||||
OVERALL
|
|
||||||
AIMING
|
AIMING
|
||||||
CUT_ANGLE
|
CUT_ANGLE
|
||||||
SPIN
|
SPIN
|
||||||
@@ -1356,31 +1315,11 @@ type SessionCoachCandidateGQL {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum SessionCoachCandidateKindEnum {
|
enum SessionCoachCandidateKindEnum {
|
||||||
BASELINE_COMPARISON
|
|
||||||
SESSION_STREAK
|
|
||||||
STRENGTH_PATTERN
|
|
||||||
DIRECTIONAL_MISS
|
DIRECTIONAL_MISS
|
||||||
OUTCOME_PATTERN
|
OUTCOME_PATTERN
|
||||||
USAGE_PATTERN
|
USAGE_PATTERN
|
||||||
}
|
}
|
||||||
|
|
||||||
type SessionCoachDecisionGQL {
|
|
||||||
selectedPositiveCandidateId: ID
|
|
||||||
positiveTitle: String
|
|
||||||
positiveBody: String
|
|
||||||
selectedCandidateId: ID
|
|
||||||
supportingCandidateIds: [ID!]!
|
|
||||||
supportingShotIds: [Int!]!
|
|
||||||
sessionSummary: String
|
|
||||||
title: String
|
|
||||||
body: String
|
|
||||||
suggestedAction: String
|
|
||||||
drillId: String
|
|
||||||
drillReason: String
|
|
||||||
practiceAttemptCount: Int
|
|
||||||
practiceTarget: String
|
|
||||||
}
|
|
||||||
|
|
||||||
type SessionCoachEvidenceGQL {
|
type SessionCoachEvidenceGQL {
|
||||||
bucketKey: String!
|
bucketKey: String!
|
||||||
bucketLabel: String!
|
bucketLabel: String!
|
||||||
@@ -1394,22 +1333,6 @@ type SessionCoachEvidenceGQL {
|
|||||||
patternShotCount: Int!
|
patternShotCount: Int!
|
||||||
score: Float!
|
score: Float!
|
||||||
rankReason: String!
|
rankReason: String!
|
||||||
baselineSessionCount: Int!
|
|
||||||
baselineAttemptCount: Int!
|
|
||||||
baselineMadeCount: Int!
|
|
||||||
baselineMakePercentage: Float
|
|
||||||
}
|
|
||||||
|
|
||||||
type SessionCoachFeedbackGQL {
|
|
||||||
response: SessionCoachFeedbackResponseEnum!
|
|
||||||
updatedAt: DateTime!
|
|
||||||
}
|
|
||||||
|
|
||||||
enum SessionCoachFeedbackResponseEnum {
|
|
||||||
HELPFUL
|
|
||||||
NOT_RELEVANT
|
|
||||||
NOT_INSIGHTFUL
|
|
||||||
NOT_ENOUGH_EVIDENCE
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type SessionCoachGQL {
|
type SessionCoachGQL {
|
||||||
@@ -1427,61 +1350,8 @@ type SessionCoachGQL {
|
|||||||
unknownOutcomeCount: Int!
|
unknownOutcomeCount: Int!
|
||||||
analyzedShotCount: Int!
|
analyzedShotCount: Int!
|
||||||
makePercentage: Float
|
makePercentage: Float
|
||||||
longestMakeStreak: Int!
|
|
||||||
recentBaseline: SessionCoachBaselineGQL
|
|
||||||
positiveCandidates: [SessionCoachCandidateGQL!]!
|
|
||||||
primaryCandidate: SessionCoachCandidateGQL
|
primaryCandidate: SessionCoachCandidateGQL
|
||||||
candidates: [SessionCoachCandidateGQL!]!
|
candidates: [SessionCoachCandidateGQL!]!
|
||||||
agentGeneration: SessionCoachGenerationGQL
|
|
||||||
}
|
|
||||||
|
|
||||||
type SessionCoachGenerationDiagnosticsGQL {
|
|
||||||
analysisVersion: String!
|
|
||||||
promptVersion: String!
|
|
||||||
providerKey: String!
|
|
||||||
modelName: String!
|
|
||||||
inputHash: String!
|
|
||||||
attemptCount: Int!
|
|
||||||
maxAttempts: Int!
|
|
||||||
enqueueCount: Int!
|
|
||||||
latencyMs: Int
|
|
||||||
inputTokens: Int
|
|
||||||
cachedInputTokens: Int
|
|
||||||
outputTokens: Int
|
|
||||||
failureCode: String
|
|
||||||
updatedAt: DateTime!
|
|
||||||
startedAt: DateTime
|
|
||||||
lastEnqueuedAt: DateTime
|
|
||||||
abstentionReason: String
|
|
||||||
synthesisRationale: String
|
|
||||||
}
|
|
||||||
|
|
||||||
type SessionCoachGenerationGQL {
|
|
||||||
id: ID!
|
|
||||||
state: SessionCoachGenerationStateEnum!
|
|
||||||
createdAt: DateTime!
|
|
||||||
completedAt: DateTime
|
|
||||||
decision: SessionCoachDecisionGQL
|
|
||||||
diagnostics: SessionCoachGenerationDiagnosticsGQL
|
|
||||||
feedback: SessionCoachFeedbackGQL
|
|
||||||
}
|
|
||||||
|
|
||||||
enum SessionCoachGenerationStateEnum {
|
|
||||||
QUEUED
|
|
||||||
RUNNING
|
|
||||||
READY
|
|
||||||
FAILED
|
|
||||||
}
|
|
||||||
|
|
||||||
type SessionCoachGenerationStatusGQL {
|
|
||||||
id: ID!
|
|
||||||
state: SessionCoachGenerationStateEnum!
|
|
||||||
createdAt: DateTime!
|
|
||||||
updatedAt: DateTime!
|
|
||||||
startedAt: DateTime
|
|
||||||
lastEnqueuedAt: DateTime
|
|
||||||
enqueueCount: Int!
|
|
||||||
completedAt: DateTime
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum SessionCoachIneligibilityReasonEnum {
|
enum SessionCoachIneligibilityReasonEnum {
|
||||||
@@ -1496,11 +1366,6 @@ enum SessionCoachStateEnum {
|
|||||||
FAILED
|
FAILED
|
||||||
}
|
}
|
||||||
|
|
||||||
type ShareLinkGQL {
|
|
||||||
slug: String!
|
|
||||||
url: String!
|
|
||||||
}
|
|
||||||
|
|
||||||
type ShotAnnotationGQL {
|
type ShotAnnotationGQL {
|
||||||
shotId: Int!
|
shotId: Int!
|
||||||
type: ShotAnnotationTypeGQL!
|
type: ShotAnnotationTypeGQL!
|
||||||
@@ -1569,7 +1434,6 @@ type ShotTableStateGQL {
|
|||||||
videoId: Int!
|
videoId: Int!
|
||||||
frameIndex: Int!
|
frameIndex: Int!
|
||||||
tableState: TableStateGQL!
|
tableState: TableStateGQL!
|
||||||
frameImage: String
|
|
||||||
}
|
}
|
||||||
|
|
||||||
input ShotsOrderingComponent @oneOf {
|
input ShotsOrderingComponent @oneOf {
|
||||||
@@ -1751,7 +1615,6 @@ type TableStateGQL {
|
|||||||
identifierToPosition: [[Float!]!]!
|
identifierToPosition: [[Float!]!]!
|
||||||
homography: HomographyInfoGQL
|
homography: HomographyInfoGQL
|
||||||
identifierToColor: [RGBColorGQL]!
|
identifierToColor: [RGBColorGQL]!
|
||||||
identifierToBox: [BoundingBoxGQL!]!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type TagClassGQL {
|
type TagClassGQL {
|
||||||
@@ -1837,13 +1700,6 @@ type UploadLink {
|
|||||||
headers: [Header]!
|
headers: [Header]!
|
||||||
}
|
}
|
||||||
|
|
||||||
type UploadLinkBatch {
|
|
||||||
links: [SegmentUploadLink!]!
|
|
||||||
alreadyUploaded: [Int!]!
|
|
||||||
}
|
|
||||||
|
|
||||||
union UploadLinkBatchGetUploadLinkErrors = UploadLinkBatch | GetUploadLinkErrors
|
|
||||||
|
|
||||||
union UploadLinkGetProfileUploadLinkErrors =
|
union UploadLinkGetProfileUploadLinkErrors =
|
||||||
UploadLink
|
UploadLink
|
||||||
| GetProfileUploadLinkErrors
|
| GetProfileUploadLinkErrors
|
||||||
@@ -1973,7 +1829,7 @@ type VideoExportJobGQL {
|
|||||||
shotIds: [Int!]
|
shotIds: [Int!]
|
||||||
runId: Int
|
runId: Int
|
||||||
downloadUrl: String
|
downloadUrl: String
|
||||||
fileSizeBytes: BigInt
|
fileSizeBytes: Int
|
||||||
expiresAt: DateTime
|
expiresAt: DateTime
|
||||||
createdAt: DateTime
|
createdAt: DateTime
|
||||||
}
|
}
|
||||||
@@ -2024,7 +1880,7 @@ type VideoGQL {
|
|||||||
startTime: DateTime
|
startTime: DateTime
|
||||||
endTime: DateTime
|
endTime: DateTime
|
||||||
elapsedTime: Float
|
elapsedTime: Float
|
||||||
framesPerSecond: Float
|
framesPerSecond: Float!
|
||||||
tableSize: Float!
|
tableSize: Float!
|
||||||
pocketSize: Float
|
pocketSize: Float
|
||||||
private: Boolean!
|
private: Boolean!
|
||||||
|
|||||||
Reference in New Issue
Block a user