Member Junction
    Preparing search index...

    Module @memberjunction/ai-engine-base - v6.2.0-edge.5

    @memberjunction/ai-engine-base

    Base AI Engine package for MemberJunction. Provides a comprehensive metadata cache for all AI-related entities -- models, vendors, prompts, agents, configurations, modalities, permissions, and more. This package extends BaseEngine to load and cache AI metadata in a single batch, making it available on both server and client without duplicating data loading logic.

    graph TD
        subgraph Dependencies
            CORE["@memberjunction/core
    BaseEngine"] style CORE fill:#2d6a9f,stroke:#1a4971,color:#fff CE["@memberjunction/core-entities"] style CE fill:#2d6a9f,stroke:#1a4971,color:#fff ACP["@memberjunction/ai-core-plus
    Extended Entities"] style ACP fill:#2d6a9f,stroke:#1a4971,color:#fff end AIB["AIEngineBase
    Singleton Metadata Cache"] style AIB fill:#2d8659,stroke:#1a5c3a,color:#fff subgraph "Cached Metadata" M["Models & Model Types"] style M fill:#7c5295,stroke:#563a6b,color:#fff V["Vendors & Model Vendors"] style V fill:#7c5295,stroke:#563a6b,color:#fff P["Prompts, Categories & Types"] style P fill:#7c5295,stroke:#563a6b,color:#fff A["Agents, Types & Relationships"] style A fill:#7c5295,stroke:#563a6b,color:#fff CFG["Configurations & Params"] style CFG fill:#b8762f,stroke:#8a5722,color:#fff MOD["Modalities & Limits"] style MOD fill:#b8762f,stroke:#8a5722,color:#fff PERM["Permissions & Credentials"] style PERM fill:#b8762f,stroke:#8a5722,color:#fff end CORE --> AIB CE --> AIB ACP --> AIB AIB --> M AIB --> V AIB --> P AIB --> A AIB --> CFG AIB --> MOD AIB --> PERM SRV["AIEngine (Server)"] style SRV fill:#2d6a9f,stroke:#1a4971,color:#fff AIB --> SRV
    npm install @memberjunction/ai-engine-base
    

    The core class that loads and caches all AI metadata. Access via AIEngineBase.Instance.

    import { AIEngineBase } from '@memberjunction/ai-engine-base';

    // Initialize (typically at app startup)
    await AIEngineBase.Instance.Config(false, contextUser);

    // Access cached metadata
    const models = AIEngineBase.Instance.Models;
    const agents = AIEngineBase.Instance.Agents;
    const prompts = AIEngineBase.Instance.Prompts;
    Property Entity Description
    Models AI Models All registered AI models with extended properties
    ModelTypes AI Model Types Model type categories (LLM, Embeddings, etc.)
    Vendors MJ: AI Vendors AI service providers
    ModelVendors MJ: AI Model Vendors Model-vendor associations
    Prompts AI Prompts All prompt definitions with category associations
    PromptModels MJ: AI Prompt Models Prompt-model associations
    PromptTypes AI Prompt Types Prompt type categories
    PromptCategories AI Prompt Categories Hierarchical prompt organization
    Agents AI Agents All agent definitions with actions and notes
    AgentTypes MJ: AI Agent Types Agent type definitions
    AgentActions AI Agent Actions Actions associated with agents
    AgentPrompts MJ: AI Agent Prompts Prompts associated with agents
    AgentSteps MJ: AI Agent Steps Flow agent step definitions
    AgentStepPaths MJ: AI Agent Step Paths Transitions between flow steps
    AgentRelationships MJ: AI Agent Relationships Sub-agent relationships
    AgentPermissions MJ: AI Agent Permissions User/role permission grants
    AgentConfigurations MJ: AI Agent Configurations Semantic presets (Fast, High Quality)
    Configurations MJ: AI Configurations Global AI configurations with inheritance
    ConfigurationParams MJ: AI Configuration Params Key-value parameters for configurations
    ModelCosts MJ: AI Model Costs Cost tracking per model/vendor
    ModelPriceTypes MJ: AI Model Price Types Price type definitions
    ModelPriceUnitTypes MJ: AI Model Price Unit Types Unit type definitions
    CredentialBindings MJ: AI Credential Bindings Credential bindings for vendors/models
    Modalities MJ: AI Modalities Input/output modality definitions
    AgentModalities MJ: AI Agent Modalities Agent modality support
    ModelModalities MJ: AI Model Modalities Model modality support
    VectorDatabases Vector Databases Vector database configurations
    ArtifactTypes MJ: Artifact Types Artifact type definitions
    AgentPairedAgents MJ: AI Agent Paired Agents Realtime co-agent → target-agent pairing junction
    AgentChannels MJ: AI Agent Channels Interactive-channel registry (plugin classes, transport)

    Realtime pairing + channel registries (new): AgentPairedAgents (MJ: AI Agent Paired Agents) and AgentChannels (MJ: AI Agent Channels) are cached as unfiltered local datasets like every other small metadata table here. Pairing rows constrain which target agents a Realtime co-agent may front (Sequence ordering, at most one IsDefault per co-agent; zero rows = universal co-agent), and channel rows declare the interactive-channel surfaces (e.g. the live Whiteboard) with their server/client plugin class keys and IsActive flag. Consumers (the voice picker/session services, RealtimeChannelServerHost, and RealtimeClientSessionResolver) read these getters and filter in memory instead of issuing per-call RunViews — BaseEngine's save/delete/remote-invalidate reactivity keeps both caches fresh.

    // Get the highest-power model of a given type
    const bestLLM = await AIEngineBase.Instance.GetHighestPowerLLM('OpenAI', contextUser);
    const bestEmbedding = await AIEngineBase.Instance.GetHighestPowerModel('OpenAI', 'Embeddings', contextUser);

    // Get agent by name
    const agent = AIEngineBase.Instance.GetAgentByName('Customer Support Agent');

    // Get sub-agents (children + relationships)
    const subAgents = AIEngineBase.Instance.GetSubAgents(agentId, 'Active');

    // Configuration presets
    const presets = AIEngineBase.Instance.GetAgentConfigurationPresets(agentId);
    const defaultPreset = AIEngineBase.Instance.GetDefaultAgentConfigurationPreset(agentId);

    The cached collections are plain arrays, but the engine also exposes lazily-built lookup indexes and memoized helpers so hot paths (model selection, credential resolution) don't re-scan them on every call. All indexes are rebuilt automatically when the metadata reloads.

    const eng = AIEngineBase.Instance;

    // O(1) by-ID lookups (keys are NormalizeUUID'd — case/whitespace safe)
    const model = eng.ModelsByID.get(NormalizeUUID(modelId));
    const vendor = eng.VendorsByID.get(NormalizeUUID(vendorId));
    const config = eng.ConfigurationsByID.get(NormalizeUUID(configId));
    const type = eng.ModelTypesByID.get(NormalizeUUID(typeId));

    // Grouped indexes
    const vendorsForModel = eng.ModelVendorsByModelID.get(NormalizeUUID(modelId)) ?? [];
    const modelsForPrompt = eng.PromptModelsByPromptID.get(NormalizeUUID(promptId)) ?? [];

    // Inference-provider check (memoized vendor-type lookup; Model-Developer fallback)
    if (eng.IsInferenceProvider(modelVendor)) { /* runs the model, not just develops it */ }
    const inferenceTypeId = eng.InferenceProviderTypeID; // memoized

    When you already hold a model entity, prefer model.ModelVendors (the per-model vendor array the engine attaches at load) over ModelVendorsByModelID. The index exists for callers that only have a ModelID.

    Configurations support parent-child inheritance chains:

    // Get the full inheritance chain (child -> parent -> grandparent)
    const chain = AIEngineBase.Instance.GetConfigurationChain(configId);

    // Get parameters with inheritance (child overrides parent)
    const params = AIEngineBase.Instance.GetConfigurationParamsWithInheritance(configId);
    // Get active cost for a model/vendor combination
    const cost = AIEngineBase.Instance.GetActiveModelCost(modelId, vendorId, 'Realtime');
    // Get credential bindings for a vendor
    const bindings = AIEngineBase.Instance.GetCredentialBindingsForTarget('Vendor', vendorId);

    // Check if bindings exist
    const hasBindings = AIEngineBase.Instance.HasCredentialBindings('ModelVendor', modelVendorId);

    The modality system tracks which input/output types (Text, Image, Audio, Video, File) agents and models support.

    // Check if an agent supports image input
    const supportsImages = AIEngineBase.Instance.AgentSupportsModality(agentId, 'Image', 'Input');

    // Check if agent accepts any attachments
    const supportsAttachments = AIEngineBase.Instance.AgentSupportsAttachments(agentId);

    // Get aggregated attachment limits for UI configuration
    const limits = AIEngineBase.Instance.GetAgentAttachmentLimits(agentId, modelId);
    // limits.enabled, limits.maxAttachments, limits.maxAttachmentSizeBytes, limits.acceptedFileTypes
    // Check individual permissions
    const canView = await AIEngineBase.Instance.CanUserViewAgent(agentId, user);
    const canRun = await AIEngineBase.Instance.CanUserRunAgent(agentId, user);

    // Get all permissions at once
    const perms = await AIEngineBase.Instance.GetUserAgentPermissions(agentId, user);
    // perms.canView, perms.canRun, perms.canEdit, perms.canDelete, perms.isOwner

    // Get all accessible agents for a user
    const agents = await AIEngineBase.Instance.GetAccessibleAgents(user, 'run');
    Export Purpose
    ModalityLimits Resolved limits for a specific modality (size, count, dimension, formats)
    AgentAttachmentLimits Aggregated attachment limits for UI components
    PriceUnitTypes Price unit type utilities
    AIAgentPermissionHelper Static helper for agent permission checks
    EffectiveAgentPermissions Complete permission set for a user/agent combination
    AICredentialBindingEntityExtended Extended credential binding entity

    AIEngineBase is the single source of truth for which skills an agent may use, via two methods with distinct purposes:

    Method Question it answers Gates applied
    GetSkillsForAgent(agent, user?) May this agent+user use this skill at all? (availability) AIAgent.AcceptsSkills (None/All/Limited) × AISkill.Status='Active' × per-grant MJ: AI Agent Skills.Status (Limited only) × user Run permission (when user supplied)
    GetAutoActivatableSkillsForAgent(agent, user?) May this agent self-activate this skill? (trigger) Everything above plus the double activation gate: AIAgent.SkillActivationMode === 'Auto' AND AISkill.ActivationMode === 'Auto' (both default 'RequestedOnly')

    Use the availability set for the user-requested path (/skill mentions → ExecuteAgentParams.requestedSkillIDs) and for pickers/tooling; use the auto set for anything the agent triggers on its own judgment (the prompt catalog, Skill-step validation). Because both ActivationMode defaults are RequestedOnly, the Auto × Auto "super agent" posture is always a deliberate double opt-in.

    Bundle membership is resolved by ID via GetSkillActionIDs(skillID) / GetSkillSubAgentIDs(skillID); skill permission rows are cached on SkillPermissions and evaluated by AISkillPermissionHelper (open-by-default). Full architecture: Agent Skills & Plan Mode Guide.

    • @memberjunction/core -- BaseEngine, Metadata, RunView
    • @memberjunction/core-entities -- Generated entity classes
    • @memberjunction/ai -- Core AI abstractions
    • @memberjunction/ai-core-plus -- Extended entity classes
    • @memberjunction/global -- Class factory
    • @memberjunction/templates-base-types -- Template engine integration

    Classes

    AIAgentPermissionHelper
    AIEngineBase
    AISkillPermissionHelper
    BasePriceUnitType
    BaseTimePriceUnitType
    LinearPriceUnitType
    MJAICredentialBindingEntityExtended
    PerHundredThousandTokensPriceUnitType
    PerImagePriceUnitType
    PerMillionTokensPriceUnitType
    PerThousandTokensPriceUnitType
    TimePerHourPriceUnitType
    TimePerMinutePriceUnitType

    Interfaces

    AgentAttachmentLimits
    AvatarVideoTokenExclusion
    EffectiveAgentPermissions
    EffectiveAgentPersona
    EffectiveSkillPermissions
    ModalityLimits
    NormalizedUsage
    PricedAvatarVideo
    PromptRunCostLine
    RealtimeUsageMergeOptions
    RealtimeUsageMergeResult
    RealtimeUsageRecord
    ResolvedAgentPersona
    ResolvedModelPersona
    UnpricedAvatarVideo
    UserRunnableAgentSummary

    Type Aliases

    AvatarVideoUnpricedReason

    Variables

    AVATAR_VIDEO_COST_LINE_MODALITY
    COST_LINES_DETAILS_KEY
    LINEAR_PRICE_UNIT_DRIVER_CLASS
    REALTIME_USAGE_DETAILS_KEY
    TOKEN_PRICE_UNIT_TYPE_DIVISORS

    Functions

    AddRealtimeUsageRecord
    BuildCostLines
    ExcludeAvatarVideoTokens
    HasRealtimeUsage
    MergeRealtimeUsageRecord
    ParseRealtimeUsageRecord
    PriceAvatarVideoOutput
    ReadCostLines
    ReadRealtimeUsageRecord
    RoundCost
    WriteCostLines