input AbCampaignFilter {
active: Boolean
status: AbcampaignStatus
project: IdOrKey
}
type AbReport {
pValue: Float
variants: [AbVariantReport!]!
}
type AbVariantReport {
variant: ModelService!
interval: Interval
mean: Float!
scores: Int!
comparisons: [AbVariantReportComparison!]
}
type AbVariantReportComparison {
variant: ModelService!
scores: Int!
wins: Int!
losses: Int!
tiesGood: Int!
tiesBad: Int!
}
type Abcampaign {
id: UUID!
key: String!
name: String
metric: Metric
project: Project
autoDeploy: Boolean!
status: AbcampaignStatus!
scoreType: ScoreType!
trafficSplit: Float!
beginDate: Timestamp!
endDate: Timestamp
createdAt: Timestamp!
report: AbReport!
models: [ModelService!]!
scores: Int!
hasEnoughScores: Boolean!
}
input AbcampaignCreate {
key: KeyInput!
name: String
metric: IdOrKey!
project: IdOrKey!
modelServices: [IdOrKey!]!
autoDeploy: Boolean!
trafficSplit: Float!
scoreType: ScoreType! = DIRECT
}
enum AbcampaignStatus {
WARMUP
IN_PROGRESS
DONE
CANCELLED
}
type Activity {
interactions: InteractionOutput!
scores: ActivityOutput!
}
type ActivityOutput {
value: Int!
trend: Float
}
input AddExternalModelInput {
name: String!
provider: ExternalModelProviderName!
providerData: ModelProviderDataInput
description: String
}
input AddHFModelInput {
modelId: String!
outputModelName: String!
outputModelKey: KeyInput
hfToken: String!
computePool: IdOrKey
numGpus: Int! = 0
}
input AddModelInput {
path: String!
name: String!
key: KeyInput
}
input AddModelsToProjectInput {
project: IdOrKey!
models: [IdOrKey!]!
}
type AddModelsToProjectResult {
success: Boolean!
failures: [ModelBindingFailure!]!
}
input AdminInput {
empty: String
}
input AnthropicProviderDataInput {
apiKey: String!
externalModelId: String!
endpoint: String
extraParams: JsObject
}
type ApiKey {
key: String
createdAt: Timestamp!
}
input ApiKeyCreate {
user: IdOrKey!
"""
If not provided, previous keys expire immediately
"""
expirationForPreviousKeys: InputDatetime
}
union ArtifactByproducts = EvaluationByproducts | DatasetByproducts | ModelByproducts
input ArtifactFilter {
kinds: [JobArtifactKind!]
jobId: UUID
}
enum ArtifactProcessingModeInput {
ON_REGISTRATION
ON_COMPLETION
}
type AuthProvider {
name: String!
key: String!
kind: AuthProviderKind!
loginUrl: String!
}
enum AuthProviderKind {
OIDC
}
type BatchInferenceJobStageOutput {
totalNumSamples: Int
processedNumSamples: Int
monitoringLink: String
}
enum BillingCycle {
YEARLY
}
"""
Report token usage on this billing cycle: from the start of the period until now
Also indicate a projection usage at the end of the period
"""
type BillingUsage {
now: Timestamp!
start: Timestamp!
end: Timestamp!
usage: UsageStats!
"""
projection of token usage at the end of the billing cycle based on the current usage
"""
projection: UsageStats!
}
type BufferInfo {
modelName: String!
bufferName: String!
start: Int
size: Int!
dtype: String!
bufferType: String!
device: String!
}
input CancelAllocationInput {
harmonyGroup: String!
jobId: String!
}
input CapabilityFilter {
any: [ModelCapabilityFilter!]
all: [ModelCapabilityFilter!]
}
input CategoricalSeriesInputGql {
name: String!
values: [Float!]!
}
type ChatMessage {
role: String!
"""
Returns a text-only representation (backward compatible).
For multimodal content, use `content_parts` instead.
"""
content: String!
"""
Returns all content parts including images.
"""
contentParts: [ChatMessageContentPart!]!
}
union ChatMessageContentPart = TextContentPart | ImageContentPart
type ComparisonScore {
id: UUID!
createdAt: Timestamp!
project: Project
metric: Metric
preferedCompletion: Completion
otherCompletion: Completion
}
input CompleteInput {
placeholder: Boolean = null
}
type Completion {
id: UUID!
promptHash: String
chatMessages: [ChatMessage!]!
"""
Returns a text-only representation of the completion (backward compatible).
For multimodal completions, use `completion_parts` instead.
"""
completion(maxLength: Int): String
"""
Returns all content parts of the completion including images.
"""
completionParts: [ChatMessageContentPart!]
source: CompletionSource!
modelService: ModelService
model: Model
createdBy: User
directScores(filter: ScoreFilterInput): [DirectScore!]!
comparisonScores: [ComparisonScore!]!
session: Session!
history: [CompletionHistoryEntryOuput!]!
labels(withProtected: Boolean! = false): [CompletionLabel!]!
createdAt: Timestamp!
siblingsCount(filter: ListCompletionsFilterInput!): Int!
hasUserMetadata: Boolean!
userMetadata: JSON
metadata: CompletionMetadata!
canEdit: Boolean!
}
input CompletionComparisonFilterInput {
metric: IdOrKey!
}
type CompletionConnection {
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
A list of edges.
"""
edges: [CompletionEdge!]!
"""
A list of nodes.
"""
nodes: [Completion!]!
totalCount: Int!
}
"""
An edge in a connection.
"""
type CompletionEdge {
"""
The item at the end of the edge
"""
node: Completion!
"""
A cursor for use in pagination
"""
cursor: String!
}
"""
Advanced filter expression supporting AND/OR/NOT logic
"""
input CompletionFilterExpression @oneOf {
"""
Combine multiple conditions with AND (all must match)
"""
and: [CompletionFilterExpression!]
"""
Combine multiple conditions with OR (at least one must match)
"""
or: [CompletionFilterExpression!]
"""
Negate a condition
"""
not: CompletionFilterExpression
"""
Filter by time
"""
timerange: TimeRange
"""
Filter by model
"""
model: IdOrKeyCondition
"""
Filter by label key-value pairs
"""
label: LabelCondition
"""
Filter by score/metric values
"""
scores: ScoreCondition
"""
Filter by completion source
"""
source: CompletionSource
"""
Filter by prompt hash
"""
promptHash: StringCondition
"""
Filter by session ID
"""
sessionId: UUID
"""
Filter by created_by user (ID or email)
"""
createdBy: IdOrKeyCondition
"""
Filter by completion ID
"""
completionId: UUID
"""
Filter by completion content
"""
completion: TextCondition
"""
Filter by prompt content
"""
prompt: TextCondition
}
enum CompletionGroupBy {
MODEL
PROMPT
}
type CompletionGroupData {
key: String
count: Int!
directScoresStats: [CompletionGroupScoreStats!]!
completions(page: CursorPageInput!, order: [OrderPair!]! = [{field: "id", order: DESC}]): CompletionConnection!
}
type CompletionGroupDataConnection {
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
A list of edges.
"""
edges: [CompletionGroupDataEdge!]!
"""
A list of nodes.
"""
nodes: [CompletionGroupData!]!
groupBy: CompletionGroupBy!
totalCount: Int!
}
"""
An edge in a connection.
"""
type CompletionGroupDataEdge {
"""
The item at the end of the edge
"""
node: CompletionGroupData!
"""
A cursor for use in pagination
"""
cursor: String!
}
type CompletionGroupScoreStats {
metric: Metric!
scores: Int!
average: Float
max: Float
min: Float
stddev: Float
sum: Float
}
type CompletionHistoryEntryOuput {
level: Int!
completionId: UUID!
prompt: String!
completion: String!
createdAt: TimestampSec!
}
type CompletionLabel {
key: String!
value: String!
}
input CompletionLabelValue {
key: String!
value: String!
}
type CompletionMetadata {
parameters: JSON
timings: JSON
system: JSON
usage: Usage
}
input CompletionScoreFilterInput {
metric: IdOrKey!
gt: Float
gte: Float
eq: Float
neq: Float
lt: Float
lte: Float
reasons: [String!]
}
input CompletionSelectionQuery @oneOf {
fromSelection: CompletionsById
fromFilters: CompletionsByFilters
fromGroups: FromGroupsQuery
}
enum CompletionSource {
LIVE
OFFLINE
AUTOMATION
DATASET
EVALUATION
}
input CompletionsByFilters {
filters: ListCompletionsFilterInput!
exclude: [UUID!]!
}
input CompletionsById {
include: [UUID!]!
}
type ComputePool {
id: UUID!
key: String!
name: String!
createdAt: Timestamp!
allHarmonyGroups: [HarmonyGroup!]!
harmonyGroups: [HarmonyGroup!]!
capabilities: [ComputePoolCapability!]!
}
enum ComputePoolCapability {
INFERENCE
JOB
}
union ConnectionConfig = SlackConfig | SmtpConfig | WebhookConfig | GitHubConfig
input ConnectionConfigInput @oneOf {
slack: ConnectionConfigInputSlack
smtp: ConnectionConfigInputSmtp
webhook: ConnectionConfigInputWebhook
gitHub: ConnectionConfigInputGitHub
}
input ConnectionConfigInputGitHub {
apiToken: String!
org: String
repo: String
}
input ConnectionConfigInputSlack {
webhookUrl: String!
botToken: String
}
input ConnectionConfigInputSmtp {
host: String!
port: Int!
username: String!
password: String!
fromEmail: String!
toEmails: [String!]!
}
input ConnectionConfigInputWebhook {
url: String!
method: String!
headers: JSONObject!
}
type Contract {
quota: Float!
startDate: Timestamp!
endDate: Timestamp!
cycle: BillingCycle!
"""
Get token usage on Adaptive models for the current billing cycle
returns an error if 'now' is before the start date of the contract
"""
usage(now: InputDatetime): BillingUsage!
}
input CreateIntegrationConfigInput {
connection: ConnectionConfigInput!
notificationSettings: NotificationSettingsInput
deliveryPolicy: DeliveryPolicyInput
}
input CreateIntegrationInput {
name: String!
provider: String!
config: CreateIntegrationConfigInput!
}
input CreateMonitoringRunInput {
"""
Run name (unique per project for non-deleted runs)
"""
name: String!
"""
Configuration/hyperparameters (JSON object)
"""
config: JSON! = "null"
"""
Resume an existing run with the same name instead of failing
"""
resume: Boolean! = false
}
input CreateRecipeInput {
name: String!
key: KeyInput
description: String
labels: [LabelInput!]
}
input CreateToolProviderInput {
key: KeyInput!
name: String!
uri: String!
protocol: Protocol!
}
input CursorPageInput {
first: Int
after: String
before: String
last: Int
offset: Int
}
input CustomConfigInput {
description: String
}
type CustomConfigOutput {
description: String
sources: [GraderSourceOutput!]!
}
type CustomRecipe {
id: UUID!
key: String
name: String!
isMultifile: Boolean!
editable: Boolean!
hidden: Boolean!
builtin: Boolean!
global: Boolean!
createdAt: Timestamp!
content(fileEntry: String): String
contentFiles: [String!]!
inputSchema: JSON!
jsonSchema: JSON!
contentHash: String!
description: String!
labels(withProtected: Boolean! = true): [Label!]!
updatedAt: Timestamp
createdBy: User
deletedAt: Timestamp
"""
URL to download the recipe zip file.
"""
downloadUrl: String
}
input CustomRecipeFilterInput {
labels: [LabelFilter!]
}
type CustomRecipeJobDetails {
args: JsObject!
recipeHash: String!
resumeArtifactId: UUID
"""
Image tag used for harmony pods (only set for experimental K8s jobs).
"""
harmonyImageTag: String
}
type Dataset {
id: UUID!
key: String
name: String!
createdAt: DateTime!
kind: DatasetKind!
records: Int
metricsUsage: [DatasetMetricUsage!]!
source: DatasetSource!
status: DatasetStatus
deleted: Boolean!
progress: DatasetProgress
downloadUrl: String!
project: Project!
}
type DatasetByproducts {
dataset: Dataset!
}
input DatasetCreate {
project: IdOrKey!
name: String!
key: KeyInput
source: DatasetSource
}
input DatasetCreateFromFilters {
project: IdOrKey!
name: String!
key: KeyInput
completionQuery: CompletionSelectionQuery!
sampleConfig: SampleConfig
scoreFilters: ScoreFilterInput
kind: DatasetKind!
metrics: [IdOrKey!]
}
input DatasetCreateFromMultipartUpload {
project: IdOrKey!
name: String!
key: KeyInput
source: DatasetSource
uploadSessionId: String!
}
enum DatasetKind {
PROMPT
PROMPT_COMPLETION
PROMPT_COMPLETION_SCORE
PREFERENCE
}
type DatasetMetricUsage {
metric: Metric!
scoreCount: Int!
comparisonCount: Int!
}
type DatasetProgress {
processedParts: Int!
totalParts: Int!
progress: Float!
processedLines: Int!
totalLines: Int!
}
enum DatasetSource {
UPLOADED
GENERATED
GENERATING
FILTERED
}
enum DatasetStatus {
PENDING
PROCESSING
READY
FAILED
}
type DatasetUploadProcessingStatus {
datasetId: UUID!
status: SessionStatus!
totalParts: Int!
processedParts: Int!
progress: Float!
error: String
}
input DatasetUploadProcessingStatusInput {
project: IdOrKey!
datasetId: UUID!
}
enum DateBucketUnit {
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
NO_GROUP_BY_DATE
}
"""
Implement the DateTime<Utc> scalar
The input/output is a string in RFC3339 format.
"""
scalar DateTime
type DeleteConfirm {
success: Boolean!
details: String
}
type DeleteEvent {
id: UUID!
projectIds: [UUID!]!
}
input DeleteModelInput {
model: IdOrKey!
}
enum DeliveryPolicy {
multishot
singleshot
}
enum DeliveryPolicyInput {
multishot
singleshot
}
enum DeliveryScope {
USER
TEAM
ORGANIZATION
ADMIN
}
enum DeliveryScopeInput {
USER
TEAM
ORGANIZATION
ADMIN
}
input DeployModelInput {
project: IdOrKey!
model: IdOrKey!
placement: ModelPlacementInput
"""
Wait for the model to be deployed or not
"""
wait: Boolean! = false
speculativeDecoding: SpeculativeDecodingInput
}
type DeployModelResult {
modelService: ModelService!
warnings: [String!]!
}
type DirectScore {
id: UUID!
value: Float!
metric: Metric
reason: String
details: String
createdAt: Timestamp!
createdByUser: User
source: ScoreSource!
}
input DuplicateRecipeInput {
name: String
key: KeyInput
description: String
}
type Emoji {
native: String!
}
input EmojiInput {
native: String!
}
type EvalJobStageOutput {
totalNumSamples: Int
processedNumSamples: Int
monitoringLink: String
}
input EvalStageInfoInput {
monitoringLink: String
totalNumSamples: Int
processedNumSamples: Int
}
type EvaluationByproducts {
evalResults: [EvaluationResult!]!
}
type EvaluationResult {
modelService: ModelService!
dataset: Dataset
metric: Metric!
mean: Float!
min: Float!
max: Float!
stddev: Float!
sum: Float!
count: Int!
sumSquared: Float!
jobId: UUID!
artifactId: UUID
scoreCount: Int!
grader: Grader
}
enum ExternalModelProviderName {
OPEN_AI
LEGACY_OPEN_AI
GOOGLE
ANTHROPIC
}
"""
Numeric matching condition for filter expressions, parameterized by the numeric type
"""
input FloatNumericCondition {
"""
Equal to value
"""
eq: Float
"""
Not Equal to value
"""
neq: Float
"""
Greater than value
"""
gt: Float
"""
Greater than or equal to value
"""
gte: Float
"""
Less than value
"""
lt: Float
"""
Less than or equal to value
"""
lte: Float
}
input FromGroupsQuery {
filters: ListCompletionsFilterInput!
grouping: CompletionGroupBy!
groups: [GroupSelectionQuery!]!
}
input FunctionConfigInput {
sourceCode: String!
description: String
}
type FunctionConfigOutput {
sourceCode: String
description: String
}
type GitHubConfig {
apiToken: String!
org: String
repo: String
}
type GlobalUsage {
total: UsageStats!
adaptiveModels: UsageStats!
externalModels: UsageStats!
byModel: [UsageStatsByModel!]!
signature: String!
}
input GlobalUsageFilterInput {
"""
use none to get "all time" data
"""
timerange: TimeRange
interval: DateBucketUnit!
timezone: String
modelIds: [UUID!]
userIds: [UUID!]
projectIds: [UUID!]
}
input GoogleProviderDataInput {
apiKey: String!
externalModelId: String!
endpoint: String
}
type GpuAllocation {
name: String!
numGpus: Int!
ranks: [Int!]!
createdAt: Timestamp!
job: Job
}
type Grader {
id: UUID!
name: String!
key: String
locked: Boolean!
graderType: GraderTypeEnum!
graderConfig: GraderConfig!
project: Project!
metric: Metric!
createdAt: Timestamp!
updatedAt: Timestamp!
}
union GraderConfig = JudgeConfigOutput | PrebuiltConfigOutput | RemoteConfigOutput | CustomConfigOutput | FunctionConfigOutput
input GraderConfigInput @oneOf {
judge: JudgeConfigInput
prebuilt: PrebuiltConfigInput
remote: RemoteConfigInput
custom: CustomConfigInput
function: FunctionConfigInput
}
input GraderCreateInput {
name: String!
key: KeyInput
graderType: GraderTypeEnum!
graderConfig: GraderConfigInput!
metric: MetricCreate
}
type GraderSourceOutput {
filePath: String!
recipe: CustomRecipe!
}
enum GraderTypeEnum {
JUDGE
PREBUILT
REMOTE
CUSTOM
FUNCTION
}
input GraderUpdateInput {
name: String
graderType: GraderTypeEnum
graderConfig: GraderConfigInput
}
input GroupSelection @oneOf {
exclude: [UUID!]
selectOnly: [UUID!]
}
input GroupSelectionQuery {
groupId: String!
selection: GroupSelection!
}
type HarmonyGroup {
id: UUID!
key: String!
computePool: ComputePool
status: HarmonyStatus!
url: String!
worldSize: Int!
inferencePartitionSize: Int!
gpuTotal: Int
gpuAllocated: Int
gpuAllocations: [GpuAllocation!]
gpuTypes: String!
createdAt: Timestamp!
onlineModels: [Model!]!
}
union HarmonyGroupMetricEvent = HarmonyMemoryUsage | HarmonyMidMetrics
type HarmonyMemoryUsage {
rank: Int!
totalMemoryBytes: Int!
maxMemory: Int!
freeMemory: Int
buffers: [BufferInfo!]!
}
type HarmonyMidMetrics {
rank: Int!
activeModel: String!
kvCacheUsedPercent: Float!
activeRequests: Int!
}
enum HarmonyStatus {
ONLINE
OFFLINE
}
input HeartbeatInput {
placeholder: Boolean = null
}
"""
id or key for the entity
"""
scalar IdOrKey
"""
String matching condition for filter expressions
"""
input IdOrKeyCondition @oneOf {
"""
Exact match
"""
eq: IdOrKey
"""
Match any of the provided values (OR)
"""
in: [IdOrKey!]
"""
Does not equal
"""
neq: IdOrKey
}
type ImageContentPart {
"""
URL to serve the image, e.g. /api/v1/images/{project_id}/{hash}.ext
"""
url: String!
}
"""
DateTime that could be read from several forms:
- string RFC 3339 or ISO 8601: '2024-02-21T09:51:03Z'
- string date (without time). Time is set as start of day: '2024-02-21'
- number as epoch milliseconds: 1708457468860
- relative string: 'now' or 'now - 1 month'. Format is 'now +/- <amount> <unit> |? <timezone?>'
"""
scalar InputDatetime
type InsertEvent {
id: UUID!
projectIds: [UUID!]!
}
"""
Numeric matching condition for filter expressions, parameterized by the numeric type
"""
input IntegerNumericCondition {
"""
Equal to value
"""
eq: Int
"""
Not Equal to value
"""
neq: Int
"""
Greater than value
"""
gt: Int
"""
Greater than or equal to value
"""
gte: Int
"""
Less than value
"""
lt: Int
"""
Less than or equal to value
"""
lte: Int
}
type Integration {
id: UUID!
teamId: UUID!
name: String!
capabilities: [IntegrationCapability!]!
config: IntegrationConfig!
enabled: Boolean!
createdAt: Timestamp!
}
enum IntegrationCapability {
NOTIFICATION_CHANNEL
DATA_SOURCE
CODE_SOURCE
}
type IntegrationConfig {
provider: String!
connection: ConnectionConfig!
notificationSettings: NotificationSettings
deliveryPolicy: DeliveryPolicy!
}
input InteractionOptionsInput {
projectId: IdOrKey!
}
type InteractionOptionsResult {
users: [User!]!
models: [Model!]!
labels: LabelUsage!
}
type InteractionOutput {
value: Int!
perSecond: Float
trend: Float
}
type InteractiveJobDetails {
ttlAfterDisconnectS: Int
connectedAt: Timestamp
lastDisconnectedAt: Timestamp
harmonyGroupId: UUID!
}
type Interval {
start: Float!
middle: Float!
end: Float!
}
"""
A scalar that can represent any JSON value.
"""
scalar JSON
"""
A scalar that can represent any JSON Object value.
"""
scalar JSONObject
type Job {
id: UUID!
project: Project
name: String!
status: JobStatus!
createdAt: Timestamp!
createdBy: User
startedAt: Timestamp
endedAt: Timestamp
durationMs: Int
stages: [JobStageOutput!]!
artifacts: [JobArtifact!]!
progress: Float!
error: String
kind: JobKind!
recipe: CustomRecipe
details: JobDetails
"""
Common details shared between all job types (compute pool, GPU count, GPU duration).
"""
commonDetails: JobDetailsCommon!
}
type JobArtifact {
id: UUID!
jobId: UUID!
name: String!
kind: JobArtifactKind!
status: JobArtifactStatus!
uri: String
metadata: JSON!
createdAt: Timestamp!
job: Job
downloadUrl: String
byproducts: ArtifactByproducts
}
input JobArtifactFilter {
kinds: [JobArtifactKind!]!
}
enum JobArtifactKind {
EVALUATION
CUSTOM
DATASET
MODEL
CHECKPOINT
}
enum JobArtifactKindInput {
EVALUATION
CUSTOM
DATASET
MODEL
CHECKPOINT
}
enum JobArtifactStatus {
PENDING
PROCESSING
READY
ERROR
}
type JobConnection {
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
A list of edges.
"""
edges: [JobEdge!]!
"""
A list of nodes.
"""
nodes: [Job!]!
totalCount: Int!
}
union JobDetails = CustomRecipeJobDetails | InteractiveJobDetails
"""
Common fields shared between all job types.
"""
type JobDetailsCommon {
computePoolId: UUID
numGpus: Int
gpuDurationMs: Int
}
"""
An edge in a connection.
"""
type JobEdge {
"""
The item at the end of the edge
"""
node: Job!
"""
A cursor for use in pagination
"""
cursor: String!
}
"""
Advanced filter expression supporting AND/OR/NOT logic for jobs
"""
input JobFilterExpression @oneOf {
"""
Combine multiple conditions with AND (all must match)
"""
and: [JobFilterExpression!]
"""
Combine multiple conditions with OR (at least one must match)
"""
or: [JobFilterExpression!]
"""
Negate a condition
"""
not: JobFilterExpression
"""
Filter by job kind
"""
kind: JobKind
"""
Filter by job status
"""
status: JobStatus
"""
Filter by creation date range
"""
timerange: TimeRange
"""
Filter by the user who created the job (ID or email)
"""
createdBy: IdOrKeyCondition
"""
Filter by custom recipe (ID or key)
"""
customRecipe: IdOrKeyCondition
"""
Filter by artifact kind (EXISTS subquery)
"""
artifact: JobArtifactKind
"""
Filter by job name (text search)
"""
name: TextCondition
"""
Filter by project (ID or key, intersected with visible projects)
"""
project: IdOrKeyCondition
}
input JobInput {
recipe: IdOrKey!
project: IdOrKey!
args: JsObject!
name: String
computePool: IdOrKey
numGpus: Int!
maxCpu: Float
maxRamGb: Float
maxDurationSecs: Int
"""
Use the experimental (container per job) recipe runner instead of the default sandbox runner
"""
useExperimentalRunner: Boolean! = false
"""
Image tag for K8s gang pods (e.g. "v2.1.0", "feat-xyz").
Only valid when `use_experimental_runner` is true.
Must match a pattern in the `harmony_image_tags_whitelist` platform setting.
Falls back to the server's own image tag, then "latest".
"""
imageTag: String
"""
Resume from a checkpoint artifact (pass the artifact_id of a checkpoint)
"""
resumeArtifactId: UUID
}
enum JobKind {
CUSTOM
INTERACTIVE
}
input JobOptionsInput {
projectId: IdOrKey
}
type JobOptionsResult {
users: [User!]!
recipes: [CustomRecipe!]!
projects: [Project!]!
}
input JobProgressEventInput @oneOf {
registerStages: RegisterStagesInput
updateProgress: UpdateProgressInput
reportError: ReportErrorInput
registerArtifact: RegisterArtifactInput
reportCheckpoint: ReportCheckpointInput
complete: CompleteInput
heartbeat: HeartbeatInput
}
type JobProgressResult {
success: Boolean!
message: String
}
input JobStageInfoInput {
train: TrainStageInfoInput
eval: EvalStageInfoInput
}
union JobStageInfoOutput = TrainingJobStageOutput | EvalJobStageOutput | BatchInferenceJobStageOutput
type JobStageOutput {
name: String!
status: JobStatusOutput!
parent: String
stageId: Int!
info: JobStageInfoOutput
startedAt: Timestamp
endedAt: Timestamp
durationMs: Int
}
enum JobStatus {
PENDING
RUNNING
COMPLETED
FAILED
CANCELED
}
enum JobStatusGQL {
PENDING
RUNNING
DONE
CANCELLED
ERROR
}
enum JobStatusOutput {
PENDING
RUNNING
DONE
CANCELLED
ERROR
}
input JobUpdatePayload {
jobId: UUID!
jobName: String!
jobStatus: JobStatusGQL!
jobProgress: Float!
jobStartedAt: DateTime!
jobEndedAt: DateTime
projectId: UUID!
jobInput: JSON!
jobOutputs: [JSON!]!
jobError: String
}
"""
A dictionary where keys are strings and values are JSON values
"""
scalar JsObject
input JudgeConfigInput {
model: IdOrKey!
criteria: String!
examples: [JudgeExampleInput!]!
systemTemplate: String!
userTemplate: String!
}
type JudgeConfigOutput {
criteria: String!
examples: [JudgeExample!]!
systemTemplate: String!
userTemplate: String!
model: Model!
}
type JudgeExample {
input: [ChatMessage!]!
output: String!
pass: Boolean!
reasoning: String
}
input JudgeExampleInput {
input: [JudgeExampleInputTurnEntry!]!
reasoning: String
output: String!
pass: Boolean!
id: UUID
}
input JudgeExampleInputTurnEntry {
role: String!
content: String!
}
"""
A key to be used for an entity, must be only lowercase alphanumeric characters, no more than 64 chars. Can include dashes and underscores
"""
scalar KeyInput
type Label {
key: String!
value: String!
}
"""
Label-specific filter condition
"""
input LabelCondition {
"""
Label key
"""
key: String!
"""
Label value condition (optional - if not set, just checks for key existence)
"""
value: StringCondition
}
input LabelFilter {
key: String!
value: [String!]
}
input LabelInput {
key: String!
value: String!
}
type LabelKeyUsage {
key: String!
count: Int!
values: [LabelValueUsage!]!
lastUsed: Timestamp!
}
type LabelUsage {
keys: [LabelKeyUsage!]!
}
type LabelValueUsage {
value: String!
count: Int!
lastUsed: Timestamp!
}
input ListCompletionsFilterInput {
project: IdOrKey!
models: [IdOrKey!]
timerange: TimeRange
sessionId: UUID
"""
Filter by the user who created the completion (user ID or email)
"""
createdBy: IdOrKey
scores: [CompletionScoreFilterInput!]
comparisons: [CompletionComparisonFilterInput!]
labels: [LabelFilter!]
promptHash: String
completionId: UUID
source: [CompletionSource!]
completion: String
prompt: String
"""
Advanced filter supporting AND/OR/NOT logic
When set, this takes precedence over the simple filter fields above
(except project which is always required)
"""
advancedFilter: CompletionFilterExpression
}
input ListJobsFilterInput {
project: IdOrKey
kind: [JobKind!]
status: [JobStatus!]
timerange: TimeRange
customRecipes: [IdOrKey!]
artifacts: JobArtifactFilter
createdBy: IdOrKey
name: String
"""
Advanced filter supporting AND/OR/NOT logic.
Cannot be used together with simple filter fields.
"""
advancedFilter: JobFilterExpression
}
input LogMonitoringCategoricalInput {
"""
Name (e.g., "class_distribution")
"""
name: String!
"""
Step/iteration number
"""
step: Int! = 0
"""
Category labels
"""
labels: [String!]!
"""
Values for each category
"""
values: [Float!]!
"""
Additional series for stacked charts
"""
series: [CategoricalSeriesInputGql!]! = []
}
input LogMonitoringTableInput {
"""
Table name
"""
name: String!
"""
Step/iteration number
"""
step: Int! = 0
"""
Column definitions
"""
columns: [TableColumnDefInput!]!
"""
Table data as rows
"""
data: [[JSON!]!]!
}
type MetaObject {
authProviders: ProviderList!
"""
Whether the free-text custom image tag input is enabled in job creation.
"""
allowCustomImageTag: Boolean!
}
type Metric {
id: UUID!
key: String
name: String!
createdAt: Timestamp!
deletedAt: Timestamp
kind: MetricKind!
description: String!
scoringType: MetricScoringType!
unit: String
"""
The category of this metric
"""
category: MetricCategory!
"""
The grader for this metric, if it has one (only when category is Grader)
"""
grader: Grader
"""
Return the list of projects which use this metric
"""
projects(filter: ProjectFilter! = {isArchived: false}): [Project!]!
activity(timerange: TimeRange): MetricActivity!
hasDirectScores: Boolean!
hasComparisonScores: Boolean!
project: Project
}
type MetricActivity {
scores: ActivityOutput!
}
enum MetricAggregation {
AVERAGE
SUM
COUNT
}
enum MetricCategory {
"""
Platform-managed metrics (completion_tokens, latency, etc.)
"""
SYSTEM
"""
Metrics scored by an automated grader
"""
GRADER
"""
User-defined metrics with manual scoring
"""
USER
}
input MetricCreate {
name: String!
key: KeyInput
kind: MetricKind!
scoringType: MetricScoringType! = HIGHER_IS_BETTER
description: String
unit: String
}
input MetricFilter {
categories: [MetricCategory!]
}
enum MetricKind {
SCALAR
BOOL
}
enum MetricScoringType {
HIGHER_IS_BETTER
LOWER_IS_BETTER
}
input MetricTrendInput {
timerange: TimeRange
aggregation: MetricAggregation! = AVERAGE
}
input MetricUpdate {
name: String
description: String
scoringType: MetricScoringType
}
type MetricWithContext {
id: UUID!
key: String
name: String!
kind: MetricKind!
scoringType: MetricScoringType!
description: String!
createdAt: DateTime!
deletedAt: DateTime
unit: String
"""
The category of this metric
"""
category: MetricCategory!
"""
The grader for this metric, if it has one (only when category is Grader)
"""
grader: Grader
scoreCount(timerange: TimeRange): Int!
comparisonCount(timerange: TimeRange): Int!
trend(input: MetricTrendInput! = {timerange: null, aggregation: AVERAGE}): TrendResult
timeseries(input: TimeseriesInput!): [Timeseries!]!
hasComparisonScores: Boolean!
hasDirectScores: Boolean!
}
type Model {
id: UUID!
name: String!
key: String!
createdAt: Timestamp!
"""
indicates if this model is spawned in mangrove or not.
Computed from real-time Cadence Redis state via DataLoader.
"""
online: ModelOnline!
"""
Error message from the first failed node, if any.
"""
error: String
activity(timerange: TimeRange): Activity!
metrics: [MetricWithContext!]!
"""
Return the list of projects which use this model
"""
projects(filter: ProjectFilter! = {isArchived: false}): [Project!]!
modelServices(filter: ProjectFilter! = {isArchived: false}): [ModelService!]!
providerName: ProviderName!
isExternal: Boolean!
order: Int!
inStorage: Boolean!
isAdapter: Boolean!
backbone: Model
parent: Model
"""
The job (run) that created this model, if any.
Returns null if there is no associated job, the job no longer exists,
or the current user does not have access to the job's project.
"""
trainingRun: Job
"""
indicates if a training is pending or running for this model
"""
isTraining: Boolean!
isPublished: Boolean!
isStable: Boolean!
isSpecDecDraft: Boolean!
capabilities: [ModelCapabilityFilter!]
supportedTp: [Int!]
family: String
publisher: String
size: Int
computeConfig: ModelComputeConfigOutput
"""
The URL used by Harmony/Mangrove to identify and load this model.
For internal models: `model_registry://<key>`
For external models: `<provider>://<model_id>?api_key=<key>`
"""
harmonyUrl: String!
externalProviderData: ModelExternalProviderData
"""
Detailed model status per harmony server node
"""
nodeStatuses: [ModelNodeStatus!]!
}
type ModelBindingFailure {
model: String!
reason: String!
}
type ModelByproducts {
model: Model!
}
enum ModelCapabilityFilter {
Embedding
TextGeneration
ImageUnderstanding
Reasoning
Regression
}
input ModelComputeConfigInput {
tp: Int
kvCacheLen: Int
maxSeqLen: Int
}
type ModelComputeConfigOutput {
tp: Int!
kvCacheLen: Int!
maxSeqLen: Int!
}
type ModelExternalProviderData {
provider: String!
externalModelId: String!
endpointUrl: String
extraParams: String
}
input ModelFilter {
inStorage: Boolean
available: Boolean
trainable: Boolean
capabilities: CapabilityFilter
viewAll: Boolean
online: [ModelOnline!]
published: Boolean
size: IntegerNumericCondition
}
type ModelNodeStatus {
status: NodeModelStatus!
error: String
progress: Float
harmonyServer: HarmonyGroup
}
enum ModelOnline {
"""
Ready on all expected nodes
"""
ONLINE
"""
Ready on some nodes but not all
"""
UNHEALTHY
"""
Spawning on at least one node, none failed
"""
PENDING
"""
No status in Redis (not spawned)
"""
OFFLINE
"""
Failed on at least one node
"""
ERROR
}
input ModelPlacementInput {
computePools: [IdOrKey!]!
maxTtftMs: Int
}
type ModelPlacementOutput {
computePools: [IdOrKey!]!
maxTtftMs: Int
}
input ModelProviderDataInput @oneOf {
openAI: OpenAIProviderDataInput
legacyOpenAI: OpenAIProviderDataInput
google: GoogleProviderDataInput
anthropic: AnthropicProviderDataInput
}
type ModelService {
status: ModelServiceStatus!
error: String
id: UUID!
projectId: UUID!
key: String!
name: String!
createdAt: Timestamp!
model: Model!
isDefault: Boolean!
desiredOnline: Boolean!
"""
Whether or not this model service has been deleted.
"""
deleted: Boolean!
activity(timerange: TimeRange): Activity!
systemPromptTemplate: SystemPromptTemplate
metrics: [MetricWithContext!]!
abCampaigns(filter: AbCampaignFilter! = {active: null, status: null, project: null}): [Abcampaign!]!
placement: ModelPlacementOutput
toolProviders: [ToolProvider!]!
}
input ModelServiceFilter {
model: IdOrKey
capabilities: CapabilityFilter
"""
If true (default), only return model services whose model has a binding.
If false, return all model services regardless of binding status.
"""
activeOnly: Boolean! = true
}
enum ModelServiceStatus {
PENDING
ONLINE
UNHEALTHY
OFFLINE
TURNED_OFF
ERROR
}
type MonitoringCategorical {
id: UUID!
runId: UUID!
name: String!
step: Int!
labels: [String!]!
values: [Float!]!
series: JSON!
createdAt: Timestamp!
}
type MonitoringRun {
id: UUID!
projectId: UUID!
name: String!
config: JSON!
status: MonitoringRunStatusGql!
startedAt: Timestamp!
endedAt: Timestamp
lastMetricAt: Timestamp
createdAt: Timestamp!
tables: [MonitoringTable!]!
categorical: [MonitoringCategorical!]!
}
enum MonitoringRunStatusGql {
RUNNING
FINISHED
FAILED
CRASHED
}
type MonitoringTable {
id: UUID!
runId: UUID!
name: String!
step: Int!
columns: JSON!
data: JSON!
createdAt: Timestamp!
}
union MutationEvent = UpdateEvent | DeleteEvent | InsertEvent
type MutationRoot {
createAbCampaign(input: AbcampaignCreate!): Abcampaign!
cancelAbCampaign(input: IdOrKey!): String!
resizeInferencePartition(input: ResizePartitionInput!): String!
restartInferencePartition(input: RestartPartitionInput!): String!
cancelAllocation(input: CancelAllocationInput!): String!
createCustomRecipe(project: IdOrKey!, input: CreateRecipeInput!, file: Upload!): CustomRecipe!
updateCustomRecipe(project: IdOrKey!, id: IdOrKey!, input: UpdateRecipeInput!, file: Upload): CustomRecipe!
deleteCustomRecipe(project: IdOrKey!, id: IdOrKey!): Boolean!
patchCustomRecipe(project: IdOrKey!, id: IdOrKey!, input: PatchRecipeInput!, files: [Upload!]!): CustomRecipe!
duplicateCustomRecipe(project: IdOrKey!, id: IdOrKey!, input: DuplicateRecipeInput!): CustomRecipe!
createDatasetFromMultipartUpload(input: DatasetCreateFromMultipartUpload!): DatasetUploadProcessingStatus!
createDataset(input: DatasetCreate!, file: Upload!): Dataset!
createDatasetFromFilters(input: DatasetCreateFromFilters!): Dataset!
deleteDataset(idOrKey: IdOrKey!, project: IdOrKey!): Boolean!
updateCompletion(input: UpdateCompletion!): Completion!
deleteCompletionSelection(project: IdOrKey!, selection: CompletionSelectionQuery!): Int!
deleteCompletion(id: UUID!): Int!
createJob(input: JobInput!): Job!
cancelJob(id: UUID!): Job!
updateJob(id: UUID!, input: UpdateJobInput!): Job!
deleteJob(id: UUID!): Boolean!
updateJobProgress(jobId: UUID!, event: JobProgressEventInput!): JobProgressResult!
createMetric(project: IdOrKey!, input: MetricCreate!): Metric!
updateMetric(project: IdOrKey!, metric: IdOrKey!, input: MetricUpdate!): Metric!
deleteMetric(project: IdOrKey!, metric: IdOrKey!): Boolean!
"""
Create or resume a monitoring run.
"""
createMonitoringRun(project: IdOrKey!, input: CreateMonitoringRunInput!): MonitoringRun!
"""
Update a monitoring run (status, name).
"""
updateMonitoringRun(project: IdOrKey!, runId: UUID!, input: UpdateMonitoringRunInput!): MonitoringRun!
"""
Soft-delete a monitoring run.
"""
deleteMonitoringRun(project: IdOrKey!, runId: UUID!): Boolean!
"""
Batch soft-delete multiple monitoring runs.
"""
deleteMonitoringRuns(project: IdOrKey!, runIds: [UUID!]!): Int!
"""
Log a table to a monitoring run.
"""
logMonitoringTable(project: IdOrKey!, runId: UUID!, input: LogMonitoringTableInput!): MonitoringTable!
"""
Log categorical data to a monitoring run.
"""
logMonitoringCategorical(project: IdOrKey!, runId: UUID!, input: LogMonitoringCategoricalInput!): MonitoringCategorical!
deployModel(input: DeployModelInput!): DeployModelResult!
updateModel(input: UpdateModelInput!): Model!
updateModelService(input: UpdateModelService!): ModelService!
"""
If a model is used by several projects with `desiredOnline = true`, you need to specify 'force = true' to be able to deactivate the model
"""
terminateModel(idOrKey: IdOrKey!, force: Boolean! = false): String!
addExternalModel(input: AddExternalModelInput!): Model!
addModel(input: AddModelInput!): Model!
importHfModel(input: AddHFModelInput!): Job!
updateModelComputeConfig(idOrKey: IdOrKey!, input: ModelComputeConfigInput!): Model!
addModelsToProject(input: AddModelsToProjectInput!): AddModelsToProjectResult!
"""
Removes a model from a project. If the model is not bound to any other project or published organisation wide, it is deleted from storage.
"""
removeModelFromProject(input: RemoveModelFromProjectInput!): Boolean!
"""
Deletes a model: removes from all projects, unpublishes from org registry,
and deletes from storage.
"""
deleteModel(input: DeleteModelInput!): Boolean!
"""
Create a new integration
"""
createIntegration(team: IdOrKey!, input: CreateIntegrationInput!): Integration!
"""
Update an integration
"""
updateIntegration(id: UUID!, input: UpdateIntegrationInput!): Integration!
deleteIntegration(id: UUID!): Boolean!
testNotification(input: TestNotificationInput!): TestNotificationResult!
addRemoteEnv(input: RemoteEnvCreate!): RemoteEnv!
removeRemoteEnv(idOrKey: IdOrKey!): String!
testRemoteEnv(input: RemoteEnvCreate!): RemoteEnvTest!
createProject(input: ProjectCreate!): Project!
updateProject(idOrKey: IdOrKey!, input: ProjectUpdate!): Project!
shareProject(idOrKey: IdOrKey!, input: ProjectShares!): Project!
createApiKey(input: ApiKeyCreate!): ApiKey!
setTeamMember(input: TeamMemberSet!): TeamMember!
removeTeamMember(input: TeamMemberRemove!): User!
createUser(input: UserCreate!): UserCreateResult!
deleteUser(user: IdOrKey!): User!
reactivateUser(user: IdOrKey!): User!
updateUser(user: IdOrKey!, input: UserUpdate!): User!
createRole(input: RoleCreate!): Role!
updateRole(input: RoleUpdate!): Role!
createTeam(input: TeamCreate!): Team!
addDirectScore(completionId: UUID!, metricId: IdOrKey!, input: ScoreAddInput!): DirectScore!
createGrader(project: IdOrKey!, input: GraderCreateInput!): Grader!
updateGrader(project: IdOrKey!, id: IdOrKey!, input: GraderUpdateInput!): Grader!
deleteGrader(project: IdOrKey!, id: IdOrKey!): DeleteConfirm!
lockGrader(project: IdOrKey!, id: IdOrKey!, locked: Boolean!): Grader!
validateFunctionGrader(project: IdOrKey!, code: String!, testSample: JSON): ValidationResult!
createToolProvider(project: IdOrKey!, input: CreateToolProviderInput!): ToolProvider!
updateToolProvider(idOrKey: IdOrKey!, project: IdOrKey!, input: UpdateToolProviderInput!): ToolProvider!
deleteToolProvider(idOrKey: IdOrKey!, project: IdOrKey!): Boolean!
}
enum NodeModelStatus {
SPAWNING
READY
FAILED
DEALLOCATING
}
input NotificationPayload @oneOf {
jobUpdate: JobUpdatePayload
}
input NotificationScopeInput @oneOf {
user: [UUID!]
team: IdOrKey
organization: OrganizationInput
admin: AdminInput
}
type NotificationSettings {
subscriptions: [NotificationSubscription!]!
}
input NotificationSettingsInput {
subscriptions: [SubscriptionInput!]!
}
type NotificationSubscription {
topicPattern: String!
scope: DeliveryScope!
targetFilter: JSON
}
input OpenAIProviderDataInput {
apiKey: String!
externalModelId: String!
endpoint: String
extraParams: JsObject
}
input OrderPair {
field: String!
order: SortDirection!
}
input OrganizationInput {
empty: String
}
"""
Information about pagination in a connection
"""
type PageInfo {
"""
When paginating backwards, are there more items?
"""
hasPreviousPage: Boolean!
"""
When paginating forwards, are there more items?
"""
hasNextPage: Boolean!
"""
When paginating backwards, the cursor to continue.
"""
startCursor: String
"""
When paginating forwards, the cursor to continue.
"""
endCursor: String
}
input PatchRecipeInput {
filesToDelete: [String!]
}
type PrebuiltConfigDefinition {
key: PrebuiltCriteriaKey!
name: String!
description: String!
}
input PrebuiltConfigInput {
key: PrebuiltCriteriaKey!
model: IdOrKey!
}
type PrebuiltConfigOutput {
criteria: PrebuiltConfigDefinition!
model: Model!
}
type PrebuiltCriteria {
key: String!
name: String!
description: String!
}
enum PrebuiltCriteriaKey {
FAITHFULNESS
ANSWER_RELEVANCY
CONTEXT_RELEVANCY
}
type Project {
id: UUID!
name: String!
key: String!
description: String!
createdAt: Timestamp!
isArchived: Boolean!
modelServices(filter: ModelServiceFilter = null): [ModelService!]!
modelService(idOrKey: IdOrKey!): ModelService
models(filter: ModelFilter = null): [Model!]!
defaultModelService: ModelService
activity(timerange: TimeRange): Activity!
metrics(filter: MetricFilter = null): [MetricWithContext!]!
metric(metric: IdOrKey!): MetricWithContext
abCampaigns(filter: AbCampaignFilter! = {active: null, status: null, project: null}): [Abcampaign!]!
widgets: [Widget!]!
metadata: ProjectMetadata!
permissions: [String!]!
shares: [Share!]!
settings: Settings!
labelUsage: LabelUsage!
toolProviders: [ToolProvider!]!
}
input ProjectCreate {
name: String!
team: IdOrKey
key: KeyInput
description: String
gradientColor: String
metadata: ProjectMetadataInput
settings: ProjectSettingsInput
widgets: [WidgetInput!]
}
input ProjectFilter {
isArchived: Boolean
}
type ProjectItem {
id: UUID!
key: String!
name: String!
description: String!
}
type ProjectMetadata {
emoji: Emoji
imageKey: String
}
input ProjectMetadataInput {
emoji: EmojiInput
imageKey: String
}
input ProjectSettingsInput {
defaultMetric: IdOrKey
}
input ProjectShareInput {
team: IdOrKey!
role: IdOrKey!
isOwner: Boolean!
}
input ProjectShares {
shares: [ProjectShareInput!]!
}
input ProjectUpdate {
name: String
description: String
widgets: [WidgetInput!]
metadata: ProjectMetadataInput
settings: ProjectSettingsInput
isArchived: Boolean
}
enum Protocol {
HTTP
}
type Provider {
name: String!
description: String!
capabilities: [IntegrationCapability!]!
allowedScopes: [DeliveryScope!]!
}
type ProviderList {
providers: [AuthProvider!]!
}
enum ProviderName {
OPEN_AI
LEGACY_OPEN_AI
HARMONY
GOOGLE
ANTHROPIC
}
type QueryRoot {
abCampaigns(filter: AbCampaignFilter! = {active: null, status: null, project: null}): [Abcampaign!]!
abCampaign(idOrKey: IdOrKey!): Abcampaign
contract: Contract
customRecipes(project: IdOrKey!, filter: CustomRecipeFilterInput! = {labels: null}): [CustomRecipe!]!
customRecipe(idOrKey: IdOrKey!, project: IdOrKey!): CustomRecipe
parseRecipeSchema(recipeContent: String!): JSON!
datasets(project: IdOrKey!): [Dataset!]!
dataset(idOrKey: IdOrKey!, project: IdOrKey!): Dataset
previewDatasetFromFilters(input: DatasetCreateFromFilters!): String!
datasetUploadProcessingStatus(input: DatasetUploadProcessingStatusInput!): DatasetUploadProcessingStatus!
interactionOptions(filter: InteractionOptionsInput!): InteractionOptionsResult!
completions(filter: ListCompletionsFilterInput!, page: CursorPageInput!, order: [OrderPair!]! = [{field: "id", order: DESC}]): CompletionConnection!
completionsGrouped(filter: ListCompletionsFilterInput!, scoreFilter: ScoreFilterInput! = {labels: null}, groupBy: CompletionGroupBy!, page: CursorPageInput!, order: [OrderPair!]! = [{field: "group", order: ASC}]): CompletionGroupDataConnection!
completion(project: IdOrKey!, id: UUID!): Completion
completionDownloadUrl(project: IdOrKey!, selection: CompletionSelectionQuery!): String!
completionAsDatasetDownloadUrl(project: IdOrKey!, selection: CompletionSelectionQuery!): String!
modelUsage(filter: UsageFilterInput!): [UsageAggregateItem!]!
modelUsageDetailsByProject(filter: UsagePerProjectFilterInput!): [UsageAggregatePerProjectItem!]!
modelUsageByProject(filter: UsagePerProjectFilterInput!): [UsageStatsByProject!]!
modelUsageByUser(filter: UsagePerUserFilterInput!): [UsageStatsByUser!]!
usageOptions(filter: UsageOptionsInput! = {timerange: null}): UsageOptionsResult!
globalUsage(filter: GlobalUsageFilterInput!): GlobalUsage!
jobOptions(filter: JobOptionsInput! = {projectId: null}): JobOptionsResult!
jobs(page: CursorPageInput!, filter: ListJobsFilterInput! = {project: null, kind: null, status: null, timerange: null, customRecipes: null, artifacts: null, createdBy: null, name: null, advancedFilter: null}, order: [OrderPair!]! = [{field: "id", order: DESC}]): JobConnection!
job(id: UUID!): Job
metrics(filter: MetricFilter! = {categories: null}): [Metric!]!
metric(projectIdOrKey: IdOrKey!, metricIdOrKey: IdOrKey!): Metric
"""
List monitoring runs for a project.
"""
monitoringRuns(project: IdOrKey!, limit: Int! = 100, offset: Int! = 0): [MonitoringRun!]!
"""
Get a single monitoring run by ID.
"""
monitoringRun(project: IdOrKey!, runId: UUID!): MonitoringRun!
"""
Batch-fetch tables for multiple runs in a single query.
"""
monitoringTables(project: IdOrKey!, runIds: [UUID!]!): [MonitoringTable!]!
"""
Batch-fetch categorical data for multiple runs in a single query.
"""
monitoringCategorical(project: IdOrKey!, runIds: [UUID!]!): [MonitoringCategorical!]!
"""
List all models that were created in the app
"""
models(filter: ModelFilter! = {inStorage: true, available: null, trainable: null, capabilities: {any: [TextGeneration], all: null}, viewAll: false, online: null, published: null, size: null}): [Model!]!
model(idOrKey: IdOrKey!): Model
allHarmonyGroups: [HarmonyGroup!]!
harmonyGroups: [HarmonyGroup!]!
computePools: [ComputePool!]!
providers: [Provider!]!
provider(name: String!): Provider
integrations(team: IdOrKey!): [Integration!]!
integration(id: UUID!): Integration
"""
Placeholder query
"""
notificationSystemStatus: String!
remoteEnvs: [RemoteEnv!]!
projects(filter: ProjectFilter! = {isArchived: false}): [Project!]!
project(idOrKey: IdOrKey!): Project
"""
Currently logged in user
"""
me: User
users: [User!]!
roles: [Role!]!
permissions: [String!]!
teams: [Team!]!
grader(id: IdOrKey!, project: IdOrKey!): Grader!
graders(project: IdOrKey!): [Grader!]!
prebuiltConfigs: [PrebuiltConfigDefinition!]!
prebuiltCriteria: [PrebuiltCriteria!]!
toolProvider(idOrKey: IdOrKey!, project: IdOrKey!): ToolProvider
artifacts(project: IdOrKey!, filter: ArtifactFilter): [JobArtifact!]!
artifact(project: IdOrKey!, id: UUID!): JobArtifact
searchProject(input: SearchInput!, project: IdOrKey!): SearchResult!
meta: MetaObject!
}
input RegisterArtifactInput {
artifactId: UUID!
name: String!
kind: JobArtifactKindInput!
metadata: JSON
sessionId: String
processingMode: ArtifactProcessingModeInput
}
input RegisterStagesInput {
stages: [StageDefinitionInput!]!
}
input RemoteConfigInput {
url: String!
}
type RemoteConfigOutput {
url: String!
version: String!
description: String!
}
type RemoteEnv {
id: UUID!
key: String!
name: String!
url: String!
description: String!
createdAt: Timestamp!
version: String!
status: RemoteEnvStatus!
metadataSchema: JSON
}
input RemoteEnvCreate {
url: String!
key: KeyInput
name: String
description: String
}
enum RemoteEnvStatus {
ONLINE
OFFLINE
}
union RemoteEnvTest = RemoteEnvTestOffline | RemoteEnvTestOnline
type RemoteEnvTestOffline {
error: String!
}
type RemoteEnvTestOnline {
name: String!
version: String!
description: String!
}
input RemoveModelFromProjectInput {
project: IdOrKey!
model: IdOrKey!
}
input ReportCheckpointInput {
artifactId: UUID!
step: Int!
completionPercentage: Float!
modelCheckpointNames: JSONObject! = {}
userData: JSON
}
input ReportErrorInput {
error: String!
}
input ResizePartitionInput {
computePool: String!
size: Int!
}
input RestartPartitionInput {
computePool: String!
}
type Role {
id: UUID!
key: String!
name: String!
createdAt: Timestamp!
permissions: [String!]!
}
input RoleCreate {
key: KeyInput
name: String!
permissions: [String!]!
}
input RoleUpdate {
role: IdOrKey!
name: String
permissions: [String!]
}
input SampleConfig {
selectionType: SelectionTypeInput!
sampleSize: Int
}
input ScoreAddInput {
value: JSON!
details: String
reason: String
}
"""
Score/metric filter condition with numeric comparisons
"""
input ScoreCondition {
"""
Metric to filter by
"""
metric: IdOrKey!
"""
Numeric value condition
"""
value: FloatNumericCondition
"""
Filter by score reasons
"""
reasons: [String!]
}
input ScoreFilterInput {
labels: [LabelFilter!]
}
enum ScoreSource {
GRADER
USER
SYSTEM
UNKNOWN
}
enum ScoreType {
DIRECT
COMPARISON
}
input SearchInput {
query: String!
}
type SearchResult {
jobs: [Job!]!
artifacts(filter: ArtifactFilter): [JobArtifact!]!
}
enum SelectionTypeInput {
ALL
RANDOM
LAST
}
type Session {
id: UUID!
turns: [Completion!]!
}
enum SessionStatus {
PENDING
DONE
ERROR
}
type Settings {
defaultMetric: MetricWithContext
}
type Share {
team: Team!
role: Role!
isOwner: Boolean!
}
type SlackConfig {
webhookUrl: String!
botToken: String
}
type SmtpConfig {
host: String!
port: Int!
username: String
password: String
fromEmail: String!
}
enum SortDirection {
ASC
DESC
}
input SpeculativeDecodingInput {
numDraftSteps: Int!
}
input StageDefinitionInput {
stageKey: String!
stageId: Int!
parent: String
}
"""
String matching condition for filter expressions
"""
input StringCondition @oneOf {
"""
Exact match
"""
eq: String
"""
Match any of the provided values (OR)
"""
in: [String!]
"""
Does not equal
"""
neq: String
}
input SubscriptionInput {
topicPattern: String!
scope: DeliveryScopeInput!
targetFilter: JSON
}
type SubscriptionRoot {
"""
Return events concerning the designated harmony_group
When a client first connects, it will receive some past events to get the current status of the system
Then the client will only receive new events
"""
harmonyGroupMetrics(harmonyGroup: String!): HarmonyGroupMetricEvent!
"""
Subscribe to dataset updates for a specific project
"""
datasetsUpdated(projectId: IdOrKey!): MutationEvent!
"""
Subscribe to job updates for a specific project
"""
jobsUpdated(projectId: IdOrKey!): MutationEvent!
modelsUpdated(projectId: IdOrKey!): MutationEvent!
}
type SystemPromptTemplate {
id: UUID!
name: String!
template: String!
arguments: [String!]!
createdAt: DateTime!
createdBy: UUID!
}
input TableColumnDefInput {
name: String!
type: String
}
type Team {
id: UUID!
key: String!
name: String!
createdAt: Timestamp!
}
input TeamCreate {
key: KeyInput
name: String!
}
type TeamMember {
user: User!
team: Team!
role: Role!
}
input TeamMemberRemove {
user: IdOrKey!
team: IdOrKey!
}
input TeamMemberSet {
user: IdOrKey!
team: IdOrKey!
role: IdOrKey!
}
type TeamWithrole {
team: Team!
role: Role!
}
input TestNotificationInput {
topic: String!
scope: NotificationScopeInput!
payload: NotificationPayload!
}
type TestNotificationResult {
eventId: UUID!
message: String!
}
input TextCondition @oneOf {
"""
Exact match
"""
eq: String
"""
Text contains this substring (case insensitive)
"""
contains: String
}
type TextContentPart {
text: String!
}
input TimeRange {
from: InputDatetime!
to: InputDatetime!
}
type Timeseries {
model: Model
timeBuckets: [Timestamp!]!
count: [Int!]!
values: [Float]!
aggregation: MetricAggregation!
}
input TimeseriesInput {
interval: TimeseriesInterval!
timerange: TimeRange
timezone: String
byModel: Boolean! = false
aggregation: MetricAggregation! = AVERAGE
}
enum TimeseriesInterval {
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
MILLENNIUM
}
"""
Unix timestamp in milliseconds
"""
scalar Timestamp
"""
Unix timestamp in seconds
"""
scalar TimestampSec
type ToolProvider {
id: UUID!
key: String!
name: String!
createdAt: Timestamp!
uri: String!
protocol: Protocol!
}
input TrainStageInfoInput {
monitoringLink: String
totalNumSamples: Int
processedNumSamples: Int
checkpoints: [String!]
}
type TrainingJobStageOutput {
monitoringLink: String
totalNumSamples: Int
processedNumSamples: Int
checkpoints: [String!]!
}
type TrendResult {
trend: Float!
previous: Float!
current: Float!
}
"""
A UUID is a unique 128-bit number, stored as 16 octets. UUIDs are parsed as
Strings within GraphQL. UUIDs are used to assign unique identifiers to
entities without requiring a central allocating authority.
# References
* [Wikipedia: Universally Unique Identifier](http://en.wikipedia.org/wiki/Universally_unique_identifier)
* [RFC4122: A Universally Unique Identifier (UUID) URN Namespace](http://tools.ietf.org/html/rfc4122)
"""
scalar UUID
type UnitConfig {
symbol: String!
position: UnitPosition!
}
input UnitConfigInput {
symbol: String!
position: UnitPosition!
}
enum UnitPosition {
LEFT
RIGHT
}
input UpdateCompletion {
id: UUID!
"""
remove some label value. This operation is atomic
"""
removeLabels: [CompletionLabelValue!]
"""
add a label value. This operation is atomic
"""
addLabels: [CompletionLabelValue!]
"""
set the completion labels to this list. If you want to only add or remove specific labels,
it's better to use `add_labels` or `remove_labels`
"""
setLabels: [CompletionLabelValue!]
"""
set metadata associated with this prompt for use with external reward servers
"""
metadata: JSON
}
type UpdateEvent {
id: UUID!
projectIds: [UUID!]!
}
input UpdateIntegrationConfigInput {
connection: ConnectionConfigInput
notificationSettings: NotificationSettingsInput
deliveryPolicy: DeliveryPolicyInput
}
input UpdateIntegrationInput {
name: String
config: UpdateIntegrationConfigInput
enabled: Boolean
}
input UpdateJobInput {
name: String
}
input UpdateModelInput {
model: IdOrKey!
published: Boolean
stable: Boolean
}
input UpdateModelService {
project: IdOrKey!
modelService: IdOrKey!
isDefault: Boolean
desiredOnline: Boolean
name: String
systemPromptTemplate: UUID
placement: ModelPlacementInput
toolProviders: [IdOrKey!]
"""
Optional speculative decoding configuration
"""
speculativeDecoding: SpeculativeDecodingInput
}
input UpdateMonitoringRunInput {
"""
New status
"""
status: MonitoringRunStatusGql
"""
New name
"""
name: String
}
input UpdateProgressInput {
stageKey: String!
info: JobStageInfoInput!
}
input UpdateRecipeInput {
name: String
description: String
labels: [LabelInput!]
}
input UpdateToolProviderInput {
name: String
uri: String
protocol: Protocol
}
"""
A multipart file upload
"""
scalar Upload
type Usage {
completionTokens: Int!
promptTokens: Int!
totalTokens: Int!
}
type UsageAggregateItem {
bucketTs: Timestamp!
promptTokens: Int!
completionTokens: Int!
totalTokens: Int!
interactions: Int!
}
type UsageAggregatePerProjectItem {
project: ProjectItem!
modelService: ModelService
promptTokens: Int!
completionTokens: Int!
totalTokens: Int!
interactions: Int!
}
input UsageFilterInput {
modelId: UUID!
timerange: TimeRange
unit: DateBucketUnit!
timezone: String
userIds: [UUID!]
projectIds: [UUID!]
}
input UsageOptionsInput {
timerange: TimeRange
}
type UsageOptionsResult {
users: [User!]!
projects: [Project!]!
models: [Model!]!
}
input UsagePerProjectFilterInput {
timerange: TimeRange
interval: DateBucketUnit!
timezone: String
modelIds: [UUID!]
userIds: [UUID!]
projectIds: [UUID!]
}
input UsagePerUserFilterInput {
timerange: TimeRange
interval: DateBucketUnit!
timezone: String
modelIds: [UUID!]
userIds: [UUID!]
projectIds: [UUID!]
}
type UsageStats {
totalTokens: Int!
interactions: Int!
promptTokens: Int!
completionTokens: Int!
}
type UsageStatsByModel {
model: Model!
totalTokens: Int!
interactions: Int!
promptTokens: Int!
completionTokens: Int!
timeseries: [UsageAggregateItem!]!
}
type UsageStatsByProject {
projectId: UUID!
totalTokens: Int!
interactions: Int!
promptTokens: Int!
completionTokens: Int!
timeseries: [UsageAggregateItem!]!
}
type UsageStatsByUser {
userId: UUID!
totalTokens: Int!
interactions: Int!
promptTokens: Int!
completionTokens: Int!
timeseries: [UsageAggregateItem!]!
}
type User {
id: UUID!
email: String!
name: String!
userType: UserType!
createdAt: Timestamp!
deleted: Boolean!
deletedAt: Timestamp
firstActivity: Timestamp
"""
Last activity timestamp.
Returns the most recent of: last login OR last API key usage.
"""
lastActivity: Timestamp
teams: [TeamWithrole!]!
}
input UserCreate {
"""
Email address. Required for human users. For system users, if not provided, it will be derived from name as {name}@system.adaptive.local
"""
email: String
"""
User display name. For system users, must contain only lowercase letters (a-z), numbers, hyphens, and underscores.
"""
name: String!
teams: [UserCreateTeamWithRole!]!
"""
Type of user to create. Defaults to Human. System users cannot log in via OIDC but can authenticate via API tokens.
"""
userType: UserType! = HUMAN
"""
Whether to generate an API key for this user. Defaults to false.
"""
generateApiKey: Boolean
}
type UserCreateResult {
user: User!
"""
The generated API key, present when `generate_api_key` is true
"""
generatedApiKey: String
}
input UserCreateTeamWithRole {
team: IdOrKey!
role: IdOrKey!
}
"""
The type of user account (exposed via GraphQL)
"""
enum UserType {
"""
A human user that can log in via OIDC
"""
HUMAN
"""
A system/service account that can only authenticate via API tokens
"""
SYSTEM
}
input UserUpdate {
name: String
addTeams: [UserCreateTeamWithRole!]
removeTeams: [IdOrKey!]
}
type ValidationCheck {
name: String!
passed: Boolean!
message: String!
}
type ValidationResult {
valid: Boolean!
checks: [ValidationCheck!]!
warnings: [String!]!
}
type WebhookConfig {
url: String!
method: String!
headers: JSONObject!
}
type Widget {
title: String!
metric: String!
aggregation: MetricAggregation!
unit: UnitConfig!
}
input WidgetInput {
title: String!
metric: String!
aggregation: MetricAggregation!
unit: UnitConfigInput!
}
"""
Directs the executor to include this field or fragment only when the `if` argument is true.
"""
directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
"""
Indicates that an Input Object is a OneOf Input Object (and thus requires exactly one of its field be provided)
"""
directive @oneOf on INPUT_OBJECT
"""
Directs the executor to skip this field or fragment when the `if` argument is true.
"""
directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
"""
Provides a scalar specification URL for specifying the behavior of custom scalar types.
"""
directive @specifiedBy(url: String!) on SCALAR
schema {
query: QueryRoot
mutation: MutationRoot
subscription: SubscriptionRoot
}