Skip to main content

Overview

Core types are predefined GraphQL types provided by Exulu IMP for managing platform resources. These types are always available in the schema, regardless of your implementation.

Agent

agent

AI agent configurations and instances.
type agent {
  id: ID!
  name: String!
  description: String
  backend: String!
  type: String!
  createdAt: Date!
  updatedAt: Date!

  # Backend-specific fields
  provider: String
  providerName: String
  modelName: String
  systemInstructions: String
  authenticationInformation: String

  # Configuration
  rateLimit: RateLimiterRule
  streaming: Boolean
  capabilities: AgentCapabilities
  maxContextLength: Int

  # Workflows
  workflows: AgentWorkflows

  # Access control (if RBAC enabled)
  RBAC: RBACData

  # Routing
  slug: String
}
Example query:
query {
  agentById(id: "agent-123") {
    id
    name
    provider
    modelName
    capabilities {
      text
      images
      files
    }
    workflows {
      enabled
      queue {
        name
      }
    }
  }
}

AgentCapabilities

Defines what content types the agent can process.
type AgentCapabilities {
  text: Boolean
  images: [String]    # e.g., [".png", ".jpg"]
  files: [String]     # e.g., [".pdf", ".docx"]
  audio: [String]
  video: [String]
}

RateLimiterRule

Rate limiting configuration for agent requests.
type RateLimiterRule {
  name: String
  rate_limit: RateLimiterRuleRateLimit
}

type RateLimiterRuleRateLimit {
  time: Int    # Time window in seconds
  limit: Int   # Max requests per time window
}

Session types

agent_sessions

Conversation sessions between users and agents.
type agent_sessions {
  id: ID!
  agent: ID!
  user: ID
  name: String
  createdAt: Date!
  updatedAt: Date!
  RBAC: RBACData
}
Example query:
query {
  agent_sessionsPagination(
    limit: 20
    filters: [{ agent: { eq: "agent-123" } }]
  ) {
    items {
      id
      name
      createdAt
    }
  }
}

agent_messages

Individual messages within a session.
type agent_messages {
  id: ID!
  session: ID!
  role: String!       # "user" | "assistant" | "system"
  content: String!
  createdAt: Date!
  updatedAt: Date!
}

User management types

user

User accounts for authentication and access control.
type user {
  id: Int!
  name: String
  email: String!
  emailVerified: Date
  image: String
  password: String
  type: String        # "api" | "user"
  apikey: String
  role: ID
  super_admin: Boolean
  createdAt: Date!
  updatedAt: Date!
}
Example query:
query {
  usersPagination(
    filters: [{ type: { eq: "user" } }]
  ) {
    items {
      id
      name
      email
      role
      super_admin
    }
  }
}
The password and apikey fields are write-only for security. They are hashed with bcrypt and cannot be retrieved.

role

Role definitions for RBAC.
type role {
  id: ID!
  name: String!
  agents: String      # "read" | "write"
  evals: String
  workflows: String
  variables: String
  users: String
  api: String
  createdAt: Date!
  updatedAt: Date!
}
Example mutation:
mutation {
  rolesCreateOne(
    input: {
      name: "Developer"
      agents: "write"
      evals: "write"
      workflows: "read"
      variables: "read"
      users: "read"
    }
  ) {
    item {
      id
      name
    }
  }
}

Evaluation types

test_cases

Test cases for evaluating agent performance.
type test_cases {
  id: ID!
  name: String!
  description: String
  inputs: JSON!                           # UIMessage[]
  expected_output: String!
  expected_tools: JSON                    # string[]
  expected_knowledge_sources: JSON        # string[]
  expected_agent_tools: JSON              # string[]
  createdAt: Date!
  updatedAt: Date!
  RBAC: RBACData
}
Example:
mutation {
  test_casesCreateOne(
    input: {
      name: "Weather Query"
      description: "User asks about weather"
      inputs: [
        { role: "user", content: "What's the weather like?" }
      ]
      expected_output: "Based on current data, it's 68°F and sunny."
      expected_tools: ["get_weather"]
    }
  ) {
    item {
      id
      name
    }
  }
}

eval_sets

Collections of test cases for batch evaluation.
type eval_sets {
  id: ID!
  name: String!
  description: String
  test_case_ids: JSON       # string[]
  createdAt: Date!
  updatedAt: Date!
  RBAC: RBACData
}

eval_runs

Evaluation execution records.
type eval_runs {
  id: ID!
  name: String!
  description: String
  agent_id: ID!
  test_case_ids: JSON           # string[]
  eval_functions: JSON          # string[]
  config: JSON
  scoring_method: String
  pass_threshold: Float
  timeout_in_seconds: Int
  createdAt: Date!
  updatedAt: Date!
  RBAC: RBACData
}

Workflow types

workflow_templates

Workflow definitions with agent execution steps.
type workflow_templates {
  id: ID!
  name: String!
  description: String
  agent: ID!
  steps_json: JSON
  variables: [String]     # Extracted from steps_json
  createdAt: Date!
  updatedAt: Date!
  RBAC: RBACData
}
Example query:
query {
  workflow_templateById(id: "workflow-123") {
    id
    name
    agent
    variables
  }
}

Configuration types

variables

Encrypted configuration values (alternative to .env files).
type variables {
  id: ID!
  name: String!
  value: String!
  encrypted: Boolean!
  description: String
  createdAt: Date!
  updatedAt: Date!
}
Values are encrypted with AES using NEXTAUTH_SECRET. Use ExuluVariables.get() to retrieve decrypted values.

projects

Project organization for grouping resources.
type projects {
  id: ID!
  name: String!
  description: String
  createdAt: Date!
  updatedAt: Date!
}

Prompt management types

prompt_library

Saved prompts for reuse across agents.
type prompt_library {
  id: ID!
  name: String!
  content: String!
  tags: JSON          # string[]
  category: String
  description: String
  createdAt: Date!
  updatedAt: Date!
  RBAC: RBACData
}
Example query:
query {
  prompt_libraryPagination(
    filters: [
      { tags: { contains: ["support", "greeting"] } }
    ]
  ) {
    items {
      id
      name
      content
      tags
    }
  }
}

prompt_favorites

User’s favorited prompts.
type prompt_favorites {
  id: ID!
  user: ID!
  prompt: ID!
  createdAt: Date!
  updatedAt: Date!
}

Analytics types

statistics

Usage statistics and analytics.
type statistics {
  id: ID!
  name: String!
  label: String!
  type: String!
  trigger: String!
  count: Int!
  user: ID
  role: ID
  createdAt: Date!
  updatedAt: Date!
}
Aggregate statistics:
query {
  statisticsStatistics(
    groupBy: "label"
    filters: [
      { type: { eq: "agent_run" } }
    ]
    limit: 10
  ) {
    group
    count
  }
}

Job management types

Job

Background job information from BullMQ.
type Job {
  id: String!
  name: String!
  returnvalue: JSON
  stacktrace: [String]
  finishedOn: Date
  processedOn: Date
  attemptsMade: Int
  failedReason: String
  state: String!
  data: JSON
  timestamp: Date
}
Query jobs:
query {
  jobs(
    queue: eval_runs
    statusses: [active, waiting, failed]
    page: 1
    limit: 50
  ) {
    items {
      id
      name
      state
      failedReason
    }
  }
}

RBAC

RBACData

Access control information for resources.
type RBACData {
  type: String!       # "public" | "private" | "users" | "roles"
  users: [RBACUser!]
  roles: [RBACRole!]
}

type RBACUser {
  id: ID!
  rights: String!     # "read" | "write"
}

type RBACRole {
  id: ID!
  rights: String!     # "read" | "write"
}

RBACInput

Input type for setting RBAC permissions.
input RBACInput {
  users: [RBACUserInput!]
  roles: [RBACRoleInput!]
}

input RBACUserInput {
  id: ID!
  rights: String!     # "read" | "write"
}

input RBACRoleInput {
  id: ID!
  rights: String!     # "read" | "write"
}

Next steps