Run Functions
Use this adapter to manage runs.
Importing the adapter
import { runAdapter } from 'epicenter-libs';
The runAdapter namespace exports functions that make calls to the Run API.
For descriptions of the objects used by the Run adapter functions, read Run entities.
Create
Create run
Call the create() function to create a run.
By default, all runs are created with the user's ID (userKey), except in the case of world-scoped runs.
If no permit is specified, the platform assigns a default determined by the session user's role and the scope boundary. For a participant creating a run, the default readLock/writeLock is USER/USER, unless that run is scoped to a world, in which case PARTICIPANT/FACILITATOR is the default. Admins and facilitators/reviewers have their own defaults.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
POSTrequest to the/runendpoint. - Creates a new run using the provided
modelandscopeparameters. - Automatically assigns
userKeyfrom the current session unless the run is world-scoped. - Optionally includes execution context, model context, permissions, and routing options.
- Returns a
RunReadOutViewrepresenting the newly created run.
export async function create<
V extends object = RunVariables,
M extends object = RunMetadata,
>(
model: string,
scope: { userKey?: string } & GenericScope,
optionals: RunCreateOptions = {},
): Promise<RunReadOutView<V, M>>
Parameters
model: string- The name of your model file.scope: { userKey?: string } & GenericScope- Defines the scope of the run. Can consist ofGenericScopeplus auserKeyfor user specific scope.optionals: RunCreateOptions = {}- (Optional) Additional run creation options.readLock?: keyof typeof ROLE- (Optional) Read lock level. Part of the permit for the run.writeLock?: keyof typeof ROLE- (Optional) Write lock level. Part of the permit for the run.ephemeral?: boolean- (Optional) Iftrue, the run will only exist so long as it is in memory. Nothing is written to the database, history, or variables.trackingKey?: string- (Optional) A string that you can assign to a run as a marker. You can perform a search for runs that have a specifictrackingKey.modelContext?: ModelContext- (Optional) Model context file overrides. Not tracked by clone operations.executionContext?: ExecutionContext- (Optional) Carries arguments for model file worker on model initialization. This is tracked by clone operations.allowChannel?: boolean- (Optional) Opt into push notifications. Applicable to projects with phylogeny >= SILENT.RoutingOptions- Additional routing options for request handling.
Return value
A promise resolving to a RunReadOutView object containing details of the newly created run.
Usage example
import { runAdapter, SCOPE_BOUNDARY } from 'epicenter-libs';
await runAdapter.create('model.py', {
scopeBoundary: SCOPE_BOUNDARY.GROUP,
scopeKey: '0000017dd3bf540e5ada5b1e058f08f20461'
});
Clone run
Call the clone() function to create a copy of an existing run.
A cloned run starts with the same state as the source run. You can optionally provide new context overrides and tracking information for the cloned run.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
POSTrequest to the/run/clone/{RUN_KEY}endpoint. - Clones the run identified by
runKey. - Optionally includes execution context, model context, a tracking key, and routing options.
- Returns a
RunReadOutViewobject representing the cloned run.
export async function clone(
runKey: string,
optionals: {
ephemeral?: boolean;
trackingKey?: string;
modelContext?: ModelContext;
executionContext?: ExecutionContext;
} & RoutingOptions = {},
): Promise<RunReadOutView>
Parameters
runKey: string- Run key for the run you want to clone.optionals(Type:{ ephemeral?: boolean; trackingKey?: string; modelContext?: ModelContext; executionContext?: ExecutionContext } & RoutingOptions) - (Optional) Additional clone options.ephemeral?: boolean- (Optional) Iftrue, the run will only exist so long as it is in memory. Nothing is written to the database, history, or variables.trackingKey?: string- (Optional) A string that you can assign to the cloned run as a marker. You can perform a search for runs that have a specific trackingKey.modelContext?: ModelContext- (Optional) Model context file overrides. Not tracked by clone operations.executionContext?: ExecutionContext- (Optional) Carries arguments for model file worker on model initialization. This is tracked by clone operations.RoutingOptions- Additional routing options for request handling.
Return value
A promise resolving to a RunReadOutView object containing details of the cloned run.
Usage example
import { runAdapter } from 'epicenter-libs';
const clonedRun = await runAdapter.clone('00000173078afb05b4ae4c726637167a1a9e');
Retrieve
Use these methods to query the Epicenter API for runs.
Retrieve run
The get() function retrieves a run by the run key.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
GETrequest to the/run/{RUN_KEY}endpoint. - Retrieves the run identified by the provided run key.
- Returns a
RunReadOutViewobject containing the run’s details.
export async function get<
V extends object = RunVariables,
M extends object = RunMetadata,
>(
runKey: string,
optionals: RoutingOptions = {}
): Promise<RunReadOutView<V, M>>
Parameters
runKey(string) – The unique key identifying the run to retrieve.optionals(Type:RoutingOptions = {}) – Additional routing options.
Return value
A promise that resolves to a RunReadOutView<V, M> object representing the requested run.
Usage example
import { runAdapter } from 'epicenter-libs';
const run = await runAdapter.get('00000173078afb05b4ae4c726637167a1a9e');
Start run for world
The retrieveFromWorld() function returns the run associated with the given world key. If the world's run key is null, the function creates a new run and assigns the new run key to the world.
The run gets started and loaded into memory.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
POSTrequest to the endpoint/run/world/{WORLD_KEY} - Initiates a run using a provided model file and optional execution/model context.
- Optionally applies permission locks, ephemeral state, and notification support.
- Returns the retrieved or newly created run as a
RunReadOutViewobject.
export async function retrieveFromWorld(
worldKey: string,
model: string,
optionals: {
readLock?: keyof typeof ROLE;
writeLock?: keyof typeof ROLE;
ephemeral?: boolean;
trackingKey?: string;
modelContext?: ModelContext;
executionContext?: ExecutionContext;
allowChannel?: boolean;
} & RoutingOptions = {},
): Promise<RunReadOutView>
Parameters
worldKey(string) – The key identifying the world to retrieve the run for.model(string) – Model file name to use when creating the run if it does not already exist.optionals:readLock?: keyof typeof ROLE- (Optional) Read lock level. Part of the permit for the run.writeLock?: keyof typeof ROLE- (Optional) Write lock level. Part of the permit for the run.ephemeral?: boolean- (Optional) Iftrue, the run will only exist so long as its in memory. Nothing is written to the database, history, or variables.trackingKey?: string- (Optional) A string that you can assign to a run as a marker. You can perform a search for runs that have a specifictrackingKey.modelContext?: ModelContext- (Optional) Model context file overrides. Not tracked by clone operations.executionContext?: ExecutionContext- (Optional) Carries arguments for model file worker on model initialization. This is tracked by clone operations.allowChannel?: boolean- (Optional) Opt into push notifications. Applicable to projects with phylogeny >= SILENT.RoutingOptions- Additional routing options for request handling.
Return value
A promise that resolves to a RunReadOutView.
Usage example
import { runAdapter } from 'epicenter-libs';
// Retrieve the run for a world key, or create it if it doesn't exist
const run = await runAdapter.retrieveFromWorld(
'0000017a445032dc38cb2cecd5fc13708314',
'model.py',
);
Get run using strategy
The getWithStrategy() function fetches an existing run or creates a new one, depending on the strategy provided.
Provide a value for the strategy param using the RunStrategy enum.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Determines whether to fetch the run or create a new one according to the strategy argument provided.
- To fetch runs, uses the
query()function. - For strategies that create runs, delegates to the
create() function(and therefore inheritsRunCreateOptionsbehavior such as permits, tracking, context, etc.). - Throws an error if an invalid strategy is provided.
- Returns the retrieved or newly created run as a
RunReadOutViewobject.
export async function getWithStrategy<
V extends object = RunVariables,
M extends object = RunMetadata,
>(
strategy: RunStrategy,
model: string,
scope: GenericScope,
optionals: {
// initOperations?: Array<string | { name: string, params?: unknown[]}>,
} & RunCreateOptions = {},
): Promise<RunReadOutView<V, M>>
Parameters
strategy(RunStrategy): Determines the strategy to use.model(string): The name of your model file.scope(GenericScope): The scope associated of the run.
optionals(Type:{ } & RunCreateOptions):RunCreateOptions– Options used when creating a run (permits, ephemeral, trackingKey, modelContext, executionContext, etc.).
Return value
A promise that resolves to a RunReadOutView<V, M> containing the retrieved or newly created run.
Usage example
import { runAdapter, SCOPE_BOUNDARY } from 'epicenter-libs';
const run = await runAdapter.getWithStrategy(
'reuse-across-sessions',
'model.py',
{
scopeBoundary: SCOPE_BOUNDARY.GROUP,
scopeKey: '0000017dd3bf540e5ada5b1e058f08f20461',
},
);
Filtered query
To search for runs within a group or an episode, or for runs with a specific scope, call the query() function.
This function loads model variables only from archived state. It does not restore runs to memory.
When searching within a group, set the includeEpisodes parameter to true to include runs tied to specific episodes.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
GETrequest to one of the following endpoints:/run/{SCOPE_BOUNDARY}/{SCOPE_KEY}/{MODEL}/run/in/{GROUP_NAME}/{MODEL}/run/in/{GROUP_NAME}/{EPISODE_NAME}/{MODEL}
- Returns a paginated list of
RunReadOutViewobjects. - When
variablesare requested, the response maps returned variable arrays into keyed objects for easier access.
export async function query<
V extends object = RunVariables,
M extends object = RunMetadata,
>(
model: string,
searchOptions: {
timeout?: number;
variables?: (keyof V)[];
metadata?: (keyof M)[];
scope?: { userKey?: string } & GenericScope;
groupName?: string;
episodeName?: string;
includeEpisodes?: boolean;
} & GenericSearchOptions,
optionals: RoutingOptions = {}
): Promise<Page<RunReadOutView<V, M>>>
Parameters
model(string) – The name of your model file.searchOptions(object) – Search configuration:scope?: { userKey?: string } & GenericScope– (Optional) Defines the scope of the run. Can consist ofGenericScopeplus auserKeyfor user-specific scope.scopeBoundary– Defines the type of scope.scopeKey– Unique identifier tied to the scope.userKey?– When provided, automatically filters results to that user.
groupName?: string– (Optional) Search within a specific group.episodeName?: string– (Optional) Search within a specific episode.includeEpisodes?: boolean– (Optional) When searching within a group, include runs tied to specific episodes. Default isfalse.variables?: (keyof V)[]– (Optional) List of variables to include with the runs found.metadata?: (keyof M)[]– (Optional) List of metadata to include with the runs found.timeout?: number– (Optional) Number of seconds to wait for the server response.GenericSearchOptions– Additional search options including:filtersortfirstmax(maximum 200 results per request)
optionals(Type:RoutingOptions = {}) – Additional routing options.
Return value
A promise resolving to a Page<RunReadOutView<V, M>>, containing:
- A paginated list of matching runs
- Included variables and metadata (if requested)
- Pagination metadata
Usage example
import { runAdapter, SCOPE_BOUNDARY } from 'epicenter-libs';
const page = await runAdapter.query('model.xlsx', {
scope: {
scopeBoundary: SCOPE_BOUNDARY.GROUP,
scopeKey: '0000017dd3bf540e5ada5b1e058f08f20461'
},
filter: [
'var.score>=24',
'run.hidden=false'
],
sort: ['+run.created'],
variables: ['score'],
metadata: ['classification'],
max: 50
});
Update
Update run
Update a run.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
PATCHrequest to the/run/{RUN_KEY}endpoint when updating a single run. - Uses
PATCH /runwithrunKeyas a query parameter when updating multiple runs. - Automatically builds a
permitobject whenreadLockorwriteLockis provided. - Returns a
RunReadOutViewobject representing the updated run.
export async function update(
runKey: string | string[],
update: {
readLock?: keyof typeof ROLE;
writeLock?: keyof typeof ROLE;
trackingKey?: string;
marked?: boolean;
hidden?: boolean;
closed?: boolean;
allowChannel?: boolean;
},
optionals: RoutingOptions = {},
): Promise<RunReadOutView>
Parameters
runKey(string | string[]) – The key (or keys) identifying the run(s) to update.update(Type:{ readLock?: keyof typeof ROLE; writeLock?: keyof typeof ROLE; trackingKey?: string; marked?: boolean; hidden?: boolean; closed?: boolean; allowChannel?: boolean }) – Object containing run attributes to update.readLock?: keyof typeof ROLE– (Optional) Read lock level. Part of the permit for the run.writeLock?: keyof typeof ROLE– (Optional) Write lock level. Part of the permit for the run.trackingKey(string) – (Optional) A string that you can assign to a run as a marker.marked(boolean) – (Optional) Equivalent to the “saved” flag in v2.hidden(boolean) – (Optional) Equivalent to the “trashed” flag in v2.closed(boolean) – (Optional) Marks the run as closed, meaning it will not be restored again.allowChannel(boolean) – (Optional) Opt into push notifications. Applicable to projects with phylogeny >= SILENT.
optionals(Type:RoutingOptions = {}) – Additional routing options for request handling.
Return value
A promise that resolves to a RunReadOutView object containing details of the updated run.
Usage example
import { runAdapter } from 'epicenter-libs';
const updatedRun = await runAdapter.update(
'00000173078afb05b4ae4c726637167a1a9e',
{
readLock: 'FACILITATOR',
writeLock: 'FACILITATOR',
marked: true,
hidden: false,
}
);
Manage
Restore run
Call the restore() function to restore an existing run into memory.
Restoring a run loads its saved state so it can resume execution. You can optionally override the model and execution context when restoring.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
POSTrequest to the/run/restore/{RUN_KEY}endpoint. - Restores the run identified by
runKeyinto memory. - Optionally includes execution context, model context overrides, and routing options.
- Returns a
RunReadOutViewobject representing the restored run.
export async function restore(
runKey: string,
optionals: {
ephemeral?: boolean;
modelContext?: ModelContext;
executionContext?: ExecutionContext;
} & RoutingOptions = {},
): Promise<RunReadOutView>
Parameters
runKey: string- Run key for the run you want to restore.optionals(Type:{ ephemeral?: boolean; modelContext?: ModelContext; executionContext?: ExecutionContext } & RoutingOptions) - (Optional) Additional restore options.ephemeral?: boolean- (Optional) Iftrue, the run will only exist so long as it is in memory. Nothing is written to the database, history, or variables.modelContext?: ModelContext- (Optional) Model context file overrides. Not tracked by clone operations.executionContext?: ExecutionContext- (Optional) Carries arguments for model file worker on model initialization. This is tracked by clone operations.RoutingOptions- Additional routing options for request handling.
Return value
A promise resolving to a RunReadOutView object containing details of the restored run.
Usage example
import { runAdapter } from 'epicenter-libs';
const restoredRun = await runAdapter.restore('00000173078afb05b4ae4c726637167a1a9e');
Rewind run
The rewind() function stops the run, re-starts it, and replays it to a specified point.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
POSTrequest to the/run/rewind/{RUN_KEY}endpoint. - Sends the number of steps to rewind as
rewindCountin the request body. - Optionally includes
ephemeraland model context overrides. - Returns a
RunReadOutViewobject representing the rewound run.
export async function rewind(
runKey: string,
steps: number,
optionals: {
ephemeral?: boolean,
modelContext?: ModelContext,
} & RoutingOptions = {}
): Promise<RunReadOutView>
Parameters
runKey(string) – The run key identifying the run to rewind.steps(number) – The number of steps to rewind the run.optionals(Type:{ ephemeral?: boolean; modelContext?: ModelContext } & RoutingOptions):ephemeral?(boolean) – (Optional) Iftrue, the run will only exist so long as it is in memory. Nothing is written to the database, history, or variables.modelContext?: ModelContext– (Optional) .ctx2 file overrides. Not tracked by clone operations.RoutingOptions– Additional routing options for request handling.
Return value
A promise that resolves to a RunReadOutView object containing details of the rewound run.
Usage example
import { runAdapter } from 'epicenter-libs';
const rewoundRun = await runAdapter.rewind(
'00000173078afb05b4ae4c726637167a1a9e',
5
);
The migrate() function copies a run to a different episode.
Permissions
Requires a role of FACILITATOR or higher.
Function description
- Constructs a
POSTrequest to the endpoint/run/migrate/to/{EPISODE_KEY}/{RUN_KEY}. - Returns the migrated run.
export async function migrate<
V extends object = RunVariables,
M extends object = RunMetadata,
>(
runKey: string,
episodeKey: string,
optionals: {
ephemeral?: boolean;
trackingKey?: string;
modelContext?: ModelContext;
executionContext?: ExecutionContext;
} & RoutingOptions = {},
): Promise<RunReadOutView<V, M>>
Parameters
runKey(string): The run key for the run you want to copy and migrate.episodeKey(string): The key of the episode to which the run is being migrated.optionals: Optional parameters that can include:ephemeral(boolean) - Iftrue, the run will only exist so long as its in memory. Nothing is written to the database, history, or variables.trackingKey(string) - A string that you can assign to a run as a marker. You can perform a search for runs that have a specifictrackingKey.modelContext(ModelContext) - Model context file overrides. Not tracked by clone operations.executionContext(ExecutionContext) - Carries arguments for model file worker on model initialization. This is tracked by migrate operations.RoutingOptions: Additional routing options.
Return value
A promise that resolves to a RunReadOutView<V, M> containing the migrated run.
Usage example
import { runAdapter } from 'epicenter-libs';
const migratedRun = await runAdapter.migrate(
'00000173078afb05b4ae4c726637167a1a9e',
'0000017dd3bf540e5ada5b1e058f08f20461',
);
Delete
Delete run
The remove() function does not actually delete the run. The run is instead removed from memory. The function can be used as a means of preserving server CPUs, and should be used when you do not expect to perform any additional actions that would bring the run back into memory.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
DELETErequest to the endpoint/run/{runKey}. - Sends the
runKeyas part of the request URL. - Executes the request and returns a
voidpromise upon success.
export async function remove(
runKey: string,
optionals: RoutingOptions = {}
): Promise<void>
Parameters
runKey(string): The run key identifying the run to be deleted.optionals(Type:RoutingOptions = {}): Additional routing options.
Return value
A promise that resolves to void when the run is successfully deleted.
Usage example
import { runAdapter } from 'epicenter-libs';
runAdapter.remove('0000017a445032dc38cb2cecd5fc13563218');
Delete run for world
The removeFromWorld() function closes the run and removes it from memory. It also sets the runKey in the specified world to null.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Sends a
DELETErequest to the/run/world/{worldKey}endpoint. - Returns a void promise upon successful deletion.
export async function removeFromWorld(
worldKey: string,
optionals: RoutingOptions = {},
): Promise<void>
Parameters
worldKey(string): The key identifying the world.optionals(Type:RoutingOptions = {}): Additional routing options.
Return value
A promise that resolves to void when successful.
Usage example
import { runAdapter } from 'epicenter-libs';
await runAdapter.removeFromWorld('0000017a445032dc38cb2cecd5fc13765987');
Singular runs
Create singular run
The createSingular() function creates a singular run, if one does not yet exist.
If a singular run already exists in the project, the function returns the existing one.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
POSTrequest to the/run/singularendpoint. - Creates a project-scoped run using the specified model file.
- Optionally includes permissions, execution context, model context overrides, and routing options.
- Returns a
RunReadOutViewobject representing the newly created run.
export async function createSingular<
V extends object = RunVariables,
M extends object = RunMetadata,
>(
model: string,
optionals: RunCreateOptions = {},
): Promise<RunReadOutView<V, M>>
Parameters
model: string- The name of your model file.optionals: RunCreateOptions = {}- (Optional) Additional run creation options.readLock?: keyof typeof ROLE- (Optional) Read lock level. Part of the permit for the run.writeLock?: keyof typeof ROLE- (Optional) Write lock level. Part of the permit for the run.ephemeral?: boolean- (Optional) Iftrue, the run will only exist so long as it is in memory. Nothing is written to the database, history, or variables.modelContext?: ModelContext- (Optional) .ctx2 file overrides. Not tracked by clone operations.executionContext?: ExecutionContext- (Optional) Carries arguments for model file worker on model initialization. This is tracked by clone operations.RoutingOptions- Additional routing options for request handling.
Return value
A promise resolving to a RunReadOutView object containing details of the newly created run.
Usage example
import { runAdapter } from 'epicenter-libs';
await runAdapter.createSingular('model.py');
Get singular run key
The getSingularRunKey() returns the unique runKey for the project's singular run.
Permissions
Requires a role of ANONYMOUS or higher.
Function description
- Constructs a
GETrequest to the/run/singular/keyendpoint. - Returns the
runKeyassociated with the project’s singular run.
export async function getSingularRunKey(
optionals: RoutingOptions = {}
): Promise<number>
Parameters
optionals: RoutingOptions = {}- (Optional) Additional routing options for request handling.
Return value
- Type:
Promise<number> - Description: A promise resolving to the singular run key.
Usage example
import { runAdapter } from 'epicenter-libs';
runAdapter.getSingularRunKey();
Variables
Get variables from a run
The getVariables() function retrieves the current values of specified variables from one or more runs.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
POSTrequest to:/run/variable/{RUN_KEY}for a single run/run/variablefor multiple runs
- Sends the requested variable names using the
includeparameter. - Supports optional
timeout,ritual, andignorableflags. - When multiple
runKeyvalues are provided, the response returns an array of{ runKey, variables }objects. - When a single
runKeyis provided, the response returns a key-value object of the requested variables. - When
runKeyis an array, only theEXORCISEritual is permitted.
export async function getVariables<V extends object = RunVariables>(
runKey: string | string[],
variables: (keyof V)[],
optionals: {
timeout?: number;
ritual?: keyof typeof RITUAL;
ignorable?: boolean;
} & RoutingOptions = {},
): Promise<
| Pick<V, keyof V>
| { runKey: string; variables: Pick<V, keyof V> }[]
>
Parameters
runKey(string | string[]) – Identifier for your run or runs.variables((keyof V)[]) – List of variable names to retrieve.optionals(Type:{ timeout?: number; ritual?: keyof typeof RITUAL; ignorable?: boolean } & RoutingOptions):timeout?(number) – Number of seconds to wait for the server response.ritual?: keyof typeof RITUAL– Ritual describing how to store and remove the run from memory. WhenrunKeyis an array, only theEXORCISEritual is permitted.ignorable?(boolean) – Iftrue, suppresses errors when variables are not found.RoutingOptions– Additional routing options.
Return value
A promise that resolves to:
- If
runKeyis a single string, aPick<V, keyof V>object mapping variable names to their values. - If
runKeyis an array, an array of objects with the shape:{
runKey: string;
variables: Pick<V, keyof V>;
}
Usage example
import { runAdapter } from 'epicenter-libs';
// Single run
const vars = await runAdapter.getVariables(
'00000173078afb05b4ae4c726637167a1a9e',
['score', 'status']
);
// Multiple runs
const varsArray = await runAdapter.getVariables(
[
'00000173078afb05b4ae4c726637167a1a9e',
'0000017dd3bf540e5ada5b1e058f08f20461'
],
['score', 'status']
);
Retrieve a run variable
The getVariable() function retrieves one or more model variables for one or more runs.
This is a convenience wrapper around getVariables():
- If a single
runKeyand single variable are provided, the function performs aGETrequest. - If multiple run keys or multiple variables are provided, the function delegates to
getVariables()and performs aPOSTrequest.
Permissions
Requires a role of ANONYMOUS or higher.
Function description
- Constructs a
GETrequest to/run/variable/{RUN_KEY}/{VARIABLE}when retrieving a single variable from a single run. - Delegates to
getVariables()when retrieving multiple variables or targeting multiple runs. - Supports optional
timeoutandritualparameters. - Returns:
- A single variable value (single run + single variable)
- A keyed object of variables (single run + multiple variables)
- An array of
{ runKey, variables }objects (multiple runs)
export async function getVariable<V extends object = RunVariables>(
runKey: string | string[],
variable: keyof V | (keyof V)[],
optionals: {
timeout?: number;
ritual?: keyof typeof RITUAL;
} & RoutingOptions = {},
): Promise<
| V[keyof V]
| Pick<V, keyof V>
| { runKey: string; variables: Pick<V, keyof V> }[]
>
Parameters
runKey(string | string[]) – Key (or list of keys) for the run(s) to retrieve the variable(s) from.variable(keyof V | (keyof V)[]) – Variable name or list of variable names to retrieve.optionals(Type:{ timeout?: number; ritual?: keyof typeof RITUAL } & RoutingOptions):timeout?(number) – Number of seconds to wait for the server response.ritual?: keyof typeof RITUAL– Optional ritual.RoutingOptions– Additional routing options.
Return value
A promise that resolves to one of the following:
- If
runKeyis a single string andvariableis a single key: The value of the requested variable (V[keyof V]). - If
runKeyis a single string andvariableis an array: APick<V, keyof V>object mapping variable names to their values. - If
runKeyis an array: An array of objects with the shape:{
runKey: string;
variables: Pick<V, keyof V>;
}
Usage example
import { runAdapter } from 'epicenter-libs';
// Single runKey, single variable
const value = await runAdapter.getVariable(
'00000173078afb05b4ae4c726637167a1a9e',
'score'
);
// Multiple runKeys, multiple variables
const varsArray = await runAdapter.getVariable(
[
'00000173078afb05b4ae4c726637167a1a9e',
'0000017dd3bf540e5ada5b1e058f08f20461'
],
['score', 'status']
);
Update run variables
The updateVariables() function updates model variables for one or more runs.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
PATCHrequest to:/run/variable/{RUN_KEY}when updating a single run/run/variablewhen updating multiple runs
- Sends updated variable values in the request body.
- Supports optional
timeoutandritualparameters. - When
runKeyis an array, only theEXORCISEritual is permitted. - Returns an object containing the updated variable names and their new values.
export async function updateVariables<V extends object = RunVariables>(
runKey: string | string[],
update: Partial<V>,
optionals: {
timeout?: number;
ritual?: keyof typeof RITUAL;
} & RoutingOptions = {},
): Promise<Partial<V>>
Parameters
runKey(string | string[]) – A single run key or an array of run keys indicating which run(s) to update.update(Partial<V>) – An object mapping variable names to their updated values.optionals(Type:{ timeout?: number; ritual?: keyof typeof RITUAL } & RoutingOptions):timeout?(number) – Number of seconds to wait for the server response.ritual?: keyof typeof RITUAL– Specifies the ritual to follow when updating. WhenrunKeyis an array, only theEXORCISEritual is permitted.RoutingOptions– Additional routing options.
Return value
A promise that resolves to a Partial<V> object containing the variables that were updated and their new values.
Usage example
import { runAdapter } from 'epicenter-libs';
const updated = await runAdapter.updateVariables(
'00000173078afb05b4ae4c726637167a1a9e',
{
price: 100,
foo: 'bar',
}
);
Operations
Execute operation
Use the operation() function to execute a named operation on a run.
Permissions
Requires a role of ANONYMOUS or higher.
Function description
- Constructs a
POSTrequest to the/run/operationendpoint. - Provides the run key, operation name, and arguments.
- Supplies optional arguments, including
timeoutandritual. - Can target one or multiple runs, though certain rituals like
EXORCISEmust be used when calling across multiple runs.
export async function operation(
runKey: string | string[],
name: string, // Operation name
args: unknown[] = [], // Operation arguments
optionals: {
timeout?: number,
ritual?: keyof typeof RITUAL,
} & RoutingOptions = {}
): Promise<unknown>
Parameters
runKey: string | string[]– The run identifier or a list of run identifiers the operation should be applied to.name: string– The name of the operation to execute inside the model run.args: unknown[] = []– (Optional) Arguments to pass to the operation.optionals– (Optional) Additional routing and execution control options:timeout?: number– (Optional) Maximum duration (in ms) to wait for a response.ritual?: keyof typeof RITUAL– (Optional) The ritual that determines how the run is revived or restored from memory/archive.RoutingOptions– Additional routing and request handling options.
Return value
A promise resolving to the result of the executed operation.
Usage example
import { runAdapter, RITUAL } from 'epicenter-libs';
const result = await runAdapter.operation(
'0000019975d0kdvso160de2450566846kr45',
'calculatePrice',
[42, 'premium'],
{ ritual: RITUAL.REANIMATE, timeout: 5000 }
);
console.log(result);
Trigger actions
The action() function executes one or more actions on one or more runs.
Permissions
Requires a role of ANONYMOUS or higher.
Function description
- Constructs a
POSTrequest to:/run/action/{RUN_KEY}when executing actions on a single run/run/actionwhen executing actions on multiple runs
- Supports action types such as
setandexecute(depending on the providedActionabledefinitions). - Supports an optional
ritualparameter. If multiplerunKeyvalues are provided, theEXORCISEritual is used. - Returns an object containing the action results.
export async function action(
runKey: string | string[],
actionList: Actionable[],
optionals: {
timeout?: number;
ritual?: keyof typeof RITUAL;
} & RoutingOptions = {},
): Promise<Record<string, unknown>>
Parameters
runKey(string | string[]) – A single run key or an array of run keys.actionList(Actionable[]) – A list of actions to perform.name(string) – The name of the variable or method to act upon.value?(unknown) – The value to assign (forsetactions).arguments?(unknown[]) – Arguments to pass (forexecuteactions).objectType(string) – The type of action (for example,setorexecute).
optionals(Type:{ timeout?: number; ritual?: keyof typeof RITUAL } & RoutingOptions):timeout?(number) – Number of seconds to wait for the server response.ritual?(keyof typeof RITUAL) – Ritual describing how to store and remove the run from memory.RoutingOptions = {}– Additional routing options.
Return value
A promise that resolves to a Record<string, unknown> object containing the results of the executed actions.
Usage example
import { runAdapter } from 'epicenter-libs';
const actions = [
{ name: 'price', value: 100, objectType: 'set' },
{ name: 'simulate', arguments: [10], objectType: 'execute' },
];
// Execute actions on a single run
const result = await runAdapter.action(
'00000173078afb05b4ae4c726637167a1a9e',
actions,
);
// Execute actions on multiple runs
const results = await runAdapter.action(
[
'00000173078afb05b4ae4c726637167a1a9e',
'0000017dd3bf540e5ada5b1e058f08f20461',
],
actions,
);
Metadata
Get run metadata
The getMetadata() function retrieves metadata for one or more runs.
The function uses a POST request rather than GET.
Permissions
Requires a role of ANONYMOUS or higher.
Function description
- Constructs a
POSTrequest to the/run/metaendpoint. - Sends the requested metadata keys using the
includeparameter. - Accepts a single
runKeyor an array of run keys. - When multiple run keys are provided, returns an array of
{ runKey, data }objects. - When a single run key is provided, returns an object containing the requested metadata key-value pairs.
export async function getMetadata<M extends object = RunMetadata>(
runKey: string | string[],
metadata: (keyof M)[],
optionals: {
timeout?: number;
} & RoutingOptions = {},
): Promise<
| Pick<M, keyof M>
| { runKey: string; data: Pick<M, keyof M> }[]
>
Parameters
runKey(string | string[]) – A single run key or an array of run keys for which metadata is requested.metadata((keyof M)[]) – List of metadata keys to retrieve (typed to the generic metadata shapeM).optionals(Type:{ timeout?: number } & RoutingOptions):timeout?(number) – Number of seconds to wait for the server response.RoutingOptions– Additional routing options.
Return value
A promise that resolves to one of the following:
- If
runKeyis a single string, aPick<M, keyof M>object containing the requested metadata key-value pairs. - If
runKeyis an array, an array of objects with the shape:{
runKey: string;
data: Pick<M, keyof M>;
}
Usage example
import { runAdapter } from 'epicenter-libs';
// Single run
const meta = await runAdapter.getMetadata(
'00000173078afb05b4ae4c726637167a1a9e',
['meta1', 'meta2']
);
// Multiple runs
const metaArray = await runAdapter.getMetadata(
[
'00000173078afb05b4ae4c726637167a1a9e',
'0000017dd3bf540e5ada5b1e058f08f20461'
],
['meta1', 'meta2']
);
Update run metadata
The updateMetadata() function updates metadata for one or more runs.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Constructs a
PATCHrequest to:/run/meta/{RUN_KEY}when updating a single run/run/metawhen updating multiple runs
- When
runKeyis an array, therunKeyvalues are sent as query parameters. - Sends metadata update operations in the request body.
- Supports
set,push, andpopupdate operations. - Returns an object containing the updated metadata.
export async function updateMetadata<M extends object = RunMetadata>(
runKey: string | string[],
update: MetadataUpdate<M>,
optionals: {
timeout?: number;
} & RoutingOptions = {},
): Promise<Partial<M>>
Parameters
runKey(string | string[]) – A single run key or an array of run keys indicating which run(s) to update.update(MetadataUpdate<M>) – Metadata update operations.set?(Partial<M>) – Key-value pairs to set in the metadata.push?(Partial<M>) – Key-value pairs to push to array metadata.pop?(Partial<Record<keyof M, MetadataPop>>) – Keys with pop operations (first, last, or all) to remove from array metadata.
optionals(Type:{ timeout?: number } & RoutingOptions):timeout?(number) – Number of seconds to wait for the server response.RoutingOptions– Additional routing options.
Return value
A promise that resolves to a Partial<M> object containing the updated metadata.
Usage example
import { runAdapter } from 'epicenter-libs';
// Set metadata values
const updated = await runAdapter.updateMetadata('00000173078afb05b4ae4c726637167a1a9e', {
set: {
classification: 'new-classification',
categorization: 'new-categorization',
},
});
// Push values to array metadata
const pushed = await runAdapter.updateMetadata('00000173078afb05b4ae4c726637167a1a9e', {
push: {
history: 'new-entry',
},
});
// Pop values from array metadata
const popped = await runAdapter.updateMetadata('00000173078afb05b4ae4c726637167a1a9e', {
pop: {
history: { objectType: 'last' },
},
});
Introspect
The introspect functions return metadata for a model or for a specific model run.
Introspect model
Use the introspect() function to retrieve metadata about a specific model.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Sends a
GETrequest to introspect a model, providing the model file name as a path parameter. - Returns the API response in a Result object.
export async function introspect(
model: string,
optionals: RoutingOptions = {}
): Promise<Record<string, unknown>>
Parameters
model: string– The name or path of the model file to introspect.optionals: RoutingOptions = {}– (Optional) Additional routing and request handling options. SeeRoutingOptionsfor details.
Return value
A promise resolving to a Record<string, unknown> containing the introspected metadata associated with the given model file.
Usage example
import { runAdapter } from 'epicenter-libs';
const modelInfo = await runAdapter.introspect('pricing-model.py');
console.log(modelInfo);
Introspect run
Use the introspectWithRunKey() function to retrieve metadata for a specific model run.
Permissions
Requires a role of PARTICIPANT or higher.
Function description
- Sends a
GETrequest to introspect a run, providing arunKeyas a path parameter. - Returns the API response in a Result object.
export async function introspectWithRunKey(
runKey: string,
optionals: RoutingOptions = {}
): Promise<Record<string, unknown>>
Parameters
runKey: string– The unique identifier for the run to be introspected.optionals: RoutingOptions = {}– (Optional) Additional routing and request handling options. SeeRoutingOptionsfor details.
Return value
A promise resolving to a Record<string, unknown> containing the introspected model metadata associated with the given run.
Usage example
import { runAdapter } from 'epicenter-libs';
const modelInfo = await runAdapter.introspectWithRunKey('abc123');
console.log(modelInfo);