ai-station/.venv/lib/python3.12/site-packages/literalai/api/helpers/gql.py

1219 lines
22 KiB
Python

from typing import List, Union
from literalai.helper import ensure_values_serializable
from literalai.observability.step import Step, StepDict
STEP_FIELDS = """
id
threadId
rootRunId
parentId
startTime
endTime
createdAt
type
error
input
output
metadata
environment
scores {
id
type
name
value
comment
}
tags
generation {
prompt
completion
createdAt
provider
model
variables
messages
messageCompletion
tools
settings
stepId
tokenCount
inputTokenCount
outputTokenCount
ttFirstToken
duration
tokenThroughputInSeconds
error
type
}
name
attachments {
id
stepId
threadId
metadata
mime
name
objectKey
url
}"""
THREAD_FIELDS = (
"""
id
name
metadata
tags
createdAt
participant {
id
identifier
metadata
}
steps {
"""
+ STEP_FIELDS
+ """
}"""
)
SHALLOW_THREAD_FIELDS = """
id
name
metadata
tags
createdAt
participant {
id
identifier
metadata
}
"""
GET_PARTICIPANTS = """query GetParticipants(
$after: ID,
$before: ID,
$cursorAnchor: DateTime,
$filters: [participantsInputType!],
$first: Int,
$last: Int,
$projectId: String,
) {
participants(
after: $after,
before: $before,
cursorAnchor: $cursorAnchor,
filters: $filters,
first: $first,
last: $last,
projectId: $projectId,
) {
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
totalCount
edges {
cursor
node {
id
createdAt
lastEngaged
threadCount
tokenCount
identifier
metadata
}
}
}
}
"""
CREATE_PARTICIPANT = """mutation CreateUser($identifier: String!, $metadata: Json) {
createParticipant(identifier: $identifier, metadata: $metadata) {
id
identifier
metadata
}
}
"""
UPDATE_PARTICIPANT = """mutation UpdateUser(
$id: String!,
$identifier: String,
$metadata: Json,
) {
updateParticipant(
id: $id,
identifier: $identifier,
metadata: $metadata
) {
id
identifier
metadata
}
}
"""
GET_PARTICIPANT = """query GetUser($id: String, $identifier: String) {
participant(id: $id, identifier: $identifier) {
id
identifier
metadata
createdAt
}
}"""
DELETE_PARTICIPANT = """
mutation DeleteUser($id: String!) {
deleteParticipant(id: $id) {
id
}
}
"""
GET_THREADS = (
"""
query GetThreads(
$after: ID,
$before: ID,
$cursorAnchor: DateTime,
$filters: [ThreadsInputType!],
$orderBy: ThreadsOrderByInput,
$first: Int,
$last: Int,
$projectId: String,
$stepTypesToKeep: [StepType!],
) {
threads(
after: $after,
before: $before,
cursorAnchor: $cursorAnchor,
filters: $filters,
orderBy: $orderBy,
first: $first,
last: $last,
projectId: $projectId,
stepTypesToKeep: $stepTypesToKeep,
) {
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
totalCount
edges {
cursor
node {
"""
+ THREAD_FIELDS
+ """
}
}
}
}
"""
)
LIST_THREADS = """query listThreads(
$first: Int
$after: ID
$last: Int
$before: ID
$skip: Int
$projectId: String
$filters: [ThreadsInputType!]
$orderBy: ThreadsOrderByInput
$cursorAnchor: DateTime
) {
threads(
first: $first
after: $after
last: $last
before: $before
skip: $skip
projectId: $projectId
filters: $filters
orderBy: $orderBy
cursorAnchor: $cursorAnchor
) {
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
}
totalCount
edges {
node {
id
createdAt
tokenCount
name
metadata
duration
tags
participant {
identifier
id
}
}
}
}
}"""
CREATE_THREAD = (
"""
mutation CreateThread(
$name: String,
$metadata: Json,
$participantId: String,
$tags: [String!],
) {
createThread(
name: $name
metadata: $metadata
participantId: $participantId
tags: $tags
) {
"""
+ SHALLOW_THREAD_FIELDS
+ """
}
}
"""
)
UPSERT_THREAD = (
"""
mutation UpsertThread(
$id: String!,
$name: String,
$metadata: Json,
$participantId: String,
$tags: [String!],
) {
upsertThread(
id: $id
name: $name
metadata: $metadata
participantId: $participantId
tags: $tags
) {
"""
+ SHALLOW_THREAD_FIELDS
+ """
}
}
"""
)
UPDATE_THREAD = (
"""
mutation UpdateThread(
$id: String!,
$name: String,
$metadata: Json,
$participantId: String,
$tags: [String!],
) {
updateThread(
id: $id
name: $name
metadata: $metadata
participantId: $participantId
tags: $tags
) {
"""
+ SHALLOW_THREAD_FIELDS
+ """
}
}
"""
)
GET_THREAD = (
"""
query GetThread($id: String!) {
threadDetail(id: $id) {
"""
+ THREAD_FIELDS
+ """
}
}
"""
)
DELETE_THREAD = """
mutation DeleteThread($thread_id: String!) {
deleteThread(id: $thread_id) {
id
}
}
"""
GET_SCORES = """
query GetScores(
$after: ID,
$before: ID,
$cursorAnchor: DateTime,
$filters: [scoresInputType!],
$orderBy: ScoresOrderByInput,
$first: Int,
$last: Int,
$projectId: String,
) {
scores(
after: $after,
before: $before,
cursorAnchor: $cursorAnchor,
filters: $filters,
orderBy: $orderBy,
first: $first,
last: $last,
projectId: $projectId,
) {
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
totalCount
edges {
cursor
node {
comment
createdAt
id
projectId
stepId
datasetExperimentItemId
type
updatedAt
name
value
tags
step {
thread {
id
participant {
identifier
}
}
}
}
}
}
}
"""
CREATE_SCORE = """
mutation CreateScore(
$name: String!,
$type: ScoreType!,
$value: Float!,
$stepId: String,
$datasetExperimentItemId: String,
$comment: String,
$tags: [String!],
) {
createScore(
name: $name,
type: $type,
value: $value,
stepId: $stepId,
datasetExperimentItemId: $datasetExperimentItemId,
comment: $comment,
tags: $tags,
) {
id
name,
type,
value,
stepId,
datasetExperimentItemId,
comment,
tags,
}
}
"""
UPDATE_SCORE = """
mutation UpdateScore(
$id: String!,
$comment: String,
$value: Float!,
) {
updateScore(
id: $id,
comment: $comment,
value: $value,
) {
id
name,
type,
value,
stepId,
datasetExperimentItemId,
comment
}
}
"""
DELETE_SCORE = """
mutation DeleteScore($id: String!) {
deleteScore(id: $id) {
id
}
}
"""
CREATE_ATTACHMENT = """
mutation CreateAttachment(
$metadata: Json,
$mime: String,
$name: String!,
$objectKey: String,
$stepId: String!,
$url: String,
) {
createAttachment(
metadata: $metadata,
mime: $mime,
name: $name,
objectKey: $objectKey,
stepId: $stepId,
url: $url,
) {
id
threadId
stepId
metadata
mime
name
objectKey
url
}
}
"""
UPDATE_ATTACHMENT = """
mutation UpdateAttachment(
$id: String!,
$metadata: Json,
$mime: String,
$name: String,
$objectKey: String,
$projectId: String,
$url: String,
) {
updateAttachment(
id: $id,
metadata: $metadata,
mime: $mime,
name: $name,
objectKey: $objectKey,
projectId: $projectId,
url: $url,
) {
id
threadId
stepId
metadata
mime
name
objectKey
url
}
}
"""
GET_ATTACHMENT = """
query GetAttachment($id: String!) {
attachment(id: $id) {
id
threadId
stepId
metadata
mime
name
objectKey
url
}
}
"""
DELETE_ATTACHMENT = """
mutation DeleteAttachment($id: String!) {
deleteAttachment(id: $id) {
id
}
}
"""
CREATE_STEP = (
"""
mutation CreateStep(
$threadId: String,
$rootRunId: String,
$type: StepType,
$startTime: DateTime,
$endTime: DateTime,
$input: Json,
$output: Json,
$metadata: Json,
$parentId: String,
$name: String,
$tags: [String!],
) {
createStep(
threadId: $threadId,
rootRunId: $rootRunId,
type: $type,
startTime: $startTime,
endTime: $endTime,
input: $input,
output: $output,
metadata: $metadata,
parentId: $parentId,
name: $name,
tags: $tags,
) {
"""
+ STEP_FIELDS
+ """
}
}
"""
)
UPDATE_STEP = (
"""
mutation UpdateStep(
$id: String!,
$type: StepType,
$input: Json,
$output: Json,
$metadata: Json,
$name: String,
$startTime: DateTime,
$endTime: DateTime,
$parentId: String,
$tags: [String!],
) {
updateStep(
id: $id,
type: $type,
startTime: $startTime,
endTime: $endTime,
input: $input,
output: $output,
metadata: $metadata,
name: $name,
tags: $tags,
parentId: $parentId,
) {
"""
+ STEP_FIELDS
+ """
}
}
"""
)
GET_STEPS = (
"""
query GetSteps(
$after: ID,
$before: ID,
$cursorAnchor: DateTime,
$filters: [stepsInputType!],
$orderBy: StepsOrderByInput,
$first: Int,
$last: Int,
$projectId: String,
) {
steps(
after: $after,
before: $before,
cursorAnchor: $cursorAnchor,
filters: $filters,
orderBy: $orderBy,
first: $first,
last: $last,
projectId: $projectId,
) {
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
totalCount
edges {
cursor
node {
"""
+ STEP_FIELDS
+ """
}
}
}
}
"""
)
GET_STEP = (
"""
query GetStep($id: String!) {
step(id: $id) {"""
+ STEP_FIELDS
+ """
}
}
"""
)
DELETE_STEP = """
mutation DeleteStep($id: String!) {
deleteStep(id: $id) {
id
}
}
"""
GET_GENERATIONS = """
query GetGenerations(
$after: ID,
$before: ID,
$cursorAnchor: DateTime,
$filters: [generationsInputType!],
$orderBy: GenerationsOrderByInput,
$first: Int,
$last: Int,
$projectId: String,
) {
generations(
after: $after,
before: $before,
cursorAnchor: $cursorAnchor,
filters: $filters,
orderBy: $orderBy,
first: $first,
last: $last,
projectId: $projectId,
) {
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
totalCount
edges {
cursor
node {
id
projectId
prompt
completion
createdAt
provider
model
variables
messages
messageCompletion
tools
settings
stepId
tokenCount
duration
inputTokenCount
outputTokenCount
ttFirstToken
duration
tokenThroughputInSeconds
error
type
tags
metadata
step {
threadId
thread {
participant {
identifier
}
}
}
}
}
}
}
"""
CREATE_GENERATION = """
mutation CreateGeneration($generation: GenerationPayloadInput!) {
createGeneration(generation: $generation) {
id,
type
}
}
"""
CREATE_DATASET = """
mutation createDataset(
$name: String!
$description: String
$metadata: Json
$type: DatasetType
) {
createDataset(
name: $name
description: $description
metadata: $metadata
type: $type
) {
id
createdAt
name
description
metadata
type
}
}
"""
UPDATE_DATASET = """
mutation UpdateDataset(
$id: String!
$name: String
$description: String
$metadata: Json
) {
updateDataset(
id: $id
name: $name
description: $description
metadata: $metadata
) {
id
createdAt
name
description
metadata
type
}
}
"""
DELETE_DATASET = """
mutation DeleteDataset(
$id: String!
) {
deleteDataset(
id: $id
) {
id
createdAt
name
description
metadata
type
}
}
"""
CREATE_EXPERIMENT = """
mutation CreateDatasetExperiment(
$name: String!
$datasetId: String
$promptExperimentId: String
$params: Json
) {
createDatasetExperiment(
name: $name
datasetId: $datasetId
promptExperimentId: $promptExperimentId
params: $params
) {
id
name
datasetId
promptExperimentId
params
}
}
"""
CREATE_EXPERIMENT_ITEM = """
mutation CreateDatasetExperimentItem(
$datasetExperimentId: String!
$experimentRunId: String
$datasetItemId: String
$input: Json
$output: Json
) {
createDatasetExperimentItem(
datasetExperimentId: $datasetExperimentId
datasetItemId: $datasetItemId
experimentRunId: $experimentRunId
input: $input
output: $output
) {
id
input
output
datasetExperimentId
experimentRunId
datasetItemId
}
}
"""
CREATE_DATASET_ITEM = """
mutation CreateDatasetItem(
$datasetId: String!
$input: Json!
$expectedOutput: Json
$metadata: Json
$generationId: String
) {
createDatasetItem(
datasetId: $datasetId
input: $input
expectedOutput: $expectedOutput
metadata: $metadata
generationId: $generationId
) {
id
createdAt
datasetId
metadata
input
expectedOutput
intermediarySteps
stepId
}
}
"""
GET_DATASET_ITEM = """
query GetDataItem($id: String!) {
datasetItem(id: $id) {
id
createdAt
datasetId
metadata
input
expectedOutput
intermediarySteps
stepId
}
}
"""
DELETE_DATASET_ITEM = """
mutation DeleteDatasetItem($id: String!) {
deleteDatasetItem(id: $id) {
id
createdAt
datasetId
metadata
input
expectedOutput
intermediarySteps
stepId
}
}
"""
ADD_STEP_TO_DATASET = """
mutation AddStepToDataset(
$datasetId: String!
$stepId: String!
$metadata: Json
) {
addStepToDataset(
datasetId: $datasetId
stepId: $stepId
metadata: $metadata
) {
id
createdAt
datasetId
metadata
input
expectedOutput
intermediarySteps
stepId
}
}
"""
ADD_GENERATION_TO_DATASET = """
mutation AddGenerationToDataset(
$datasetId: String!
$generationId: String!
$metadata: Json
) {
addGenerationToDataset(
datasetId: $datasetId
generationId: $generationId
metadata: $metadata
) {
id
createdAt
datasetId
metadata
input
expectedOutput
intermediarySteps
stepId
}
}
"""
CREATE_PROMPT_LINEAGE = """mutation createPromptLineage(
$name: String!
$description: String
) {
createPromptLineage(
name: $name
description: $description
) {
id
name
deletedAt
}
}"""
GET_PROMPT_LINEAGE = """query promptLineage(
$name: String!
) {
promptLineage(
name: $name
) {
id
deletedAt
}
}"""
CREATE_PROMPT_VERSION = """mutation createPromptVersion(
$lineageId: String!
$versionDesc: String
$templateMessages: Json
$tools: Json
$settings: Json
$variables: Json
$variablesDefaultValues: Json
) {
createPromptVersion(
lineageId: $lineageId
versionDesc: $versionDesc
templateMessages: $templateMessages
tools: $tools
settings: $settings
variables: $variables
variablesDefaultValues: $variablesDefaultValues
) {
id
lineage {
name
deletedAt
}
version
createdAt
tools
settings
templateMessages
}
}"""
CREATE_PROMPT_VARIANT = """mutation createPromptExperiment(
$fromLineageId: String
$fromVersion: Int
$scoreTemplateId: String
$templateMessages: Json
$settings: Json
$tools: Json
$variables: Json
) {
createPromptExperiment(
fromLineageId: $fromLineageId
fromVersion: $fromVersion
scoreTemplateId: $scoreTemplateId
templateMessages: $templateMessages
settings: $settings
tools: $tools
variables: $variables
) {
id
fromLineageId
fromVersion
scoreTemplateId
projectId
projectUserId
tools
settings
variables
templateMessages
}
}
"""
GET_PROMPT_VERSION = """
query GetPrompt($id: String, $name: String, $version: Int) {
promptVersion(id: $id, name: $name, version: $version) {
createdAt
id
label
settings
status
tags
templateMessages
tools
type
updatedAt
url
variables
variablesDefaultValues
version
lineage {
name
deletedAt
}
}
}
"""
GET_PROMPT_AB_TESTING = """query getPromptLineageRollout($projectId: String, $lineageName: String!) {
promptLineageRollout(projectId: $projectId, lineageName: $lineageName) {
pageInfo {
startCursor
endCursor
}
edges {
node {
version
rollout
}
}
}
}
"""
UPDATE_PROMPT_AB_TESTING = """mutation updatePromptLineageRollout(
$projectId: String
$name: String!
$rollouts: [PromptVersionRolloutInput!]!
) {
updatePromptLineageRollout(
projectId: $projectId
name: $name
rollouts: $rollouts
) {
ok
message
errorCode
}
}"""
def serialize_step(event, id):
result = {}
for key, value in event.items():
# Only keep the keys that are not None to avoid overriding existing values
if value is not None:
result[f"{key}_{id}"] = value
return result
def steps_variables_builder(steps: List[Union["StepDict", "Step"]]):
variables = {}
for i in range(len(steps)):
step = steps[i]
if isinstance(step, Step):
if step.input:
step.input = ensure_values_serializable(step.input)
if step.output:
step.output = ensure_values_serializable(step.output)
variables.update(serialize_step(step.to_dict(), i))
else:
if step.get("input"):
step["input"] = ensure_values_serializable(step["input"])
if step.get("output"):
step["output"] = ensure_values_serializable(step["output"])
if step.get("metadata"):
step["metadata"] = ensure_values_serializable(step["metadata"])
variables.update(serialize_step(step, i))
return variables
def steps_query_variables_builder(steps):
generated = ""
for id in range(len(steps)):
generated += f"""$id_{id}: String!
$threadId_{id}: String
$rootRunId_{id}: String
$type_{id}: StepType
$startTime_{id}: DateTime
$endTime_{id}: DateTime
$error_{id}: String
$input_{id}: Json
$output_{id}: Json
$metadata_{id}: Json
$parentId_{id}: String
$name_{id}: String
$tags_{id}: [String!]
$generation_{id}: GenerationPayloadInput
$scores_{id}: [ScorePayloadInput!]
$attachments_{id}: [AttachmentPayloadInput!]
"""
return generated
def steps_ingest_steps_builder(steps):
generated = ""
for id in range(len(steps)):
generated += f"""
step{id}: ingestStep(
id: $id_{id}
threadId: $threadId_{id}
rootRunId: $rootRunId_{id}
startTime: $startTime_{id}
endTime: $endTime_{id}
type: $type_{id}
error: $error_{id}
input: $input_{id}
output: $output_{id}
metadata: $metadata_{id}
parentId: $parentId_{id}
name: $name_{id}
tags: $tags_{id}
generation: $generation_{id}
scores: $scores_{id}
attachments: $attachments_{id}
) {{
ok
message
}}
"""
return generated
def steps_query_builder(steps):
return f"""
mutation AddStep({steps_query_variables_builder(steps)}) {{
{steps_ingest_steps_builder(steps)}
}}
"""