ObjectStackObjectStack

Model Registry

Model Registry protocol schemas

AI Model Registry Protocol

Centralized registry for managing AI models, prompt templates, and model versioning. Enables AI-powered ObjectStack applications to discover and use LLMs consistently.

Source: packages/spec/src/ai/model-registry.zod.ts

TypeScript Usage

import { ModelCapabilitySchema, ModelConfigSchema, ModelLimitsSchema, ModelPricingSchema, ModelProviderSchema, ModelRegistrySchema, ModelRegistryEntrySchema, ModelSelectionCriteriaSchema, PromptTemplateSchema, PromptVariableSchema } from '@objectstack/spec/ai';
import type { ModelCapability, ModelConfig, ModelLimits, ModelPricing, ModelProvider, ModelRegistry, ModelRegistryEntry, ModelSelectionCriteria, PromptTemplate, PromptVariable } from '@objectstack/spec/ai';

// Validate data
const result = ModelCapabilitySchema.parse(data);

ModelCapability

Properties

PropertyTypeRequiredDescription
textGenerationbooleanoptional (default: true)Supports text generation
textEmbeddingbooleanoptional (default: false)Supports text embedding
imageGenerationbooleanoptional (default: false)Supports image generation
imageUnderstandingbooleanoptional (default: false)Supports image understanding
functionCallingbooleanoptional (default: false)Supports function calling
codeGenerationbooleanoptional (default: false)Supports code generation
reasoningbooleanoptional (default: false)Supports advanced reasoning

ModelConfig

Properties

PropertyTypeRequiredDescription
idstringUnique model identifier
namestringModel display name
versionstringModel version (e.g., "gpt-4-turbo-2024-04-09")
providerEnum<'openai' | 'azure_openai' | 'anthropic' | 'google' | 'cohere' | 'huggingface' | 'local' | 'custom'>
capabilities{ textGeneration: boolean; textEmbedding: boolean; imageGeneration: boolean; imageUnderstanding: boolean; … }
limits{ maxTokens: integer; contextWindow: integer; maxOutputTokens?: integer; rateLimit?: object }
pricing{ currency: string; inputCostPer1kTokens?: number; outputCostPer1kTokens?: number; embeddingCostPer1kTokens?: number }optional
endpointstringoptionalCustom API endpoint
apiKeystringoptionalAPI key (Warning: Prefer secretRef)
secretRefstringoptionalReference to stored secret (e.g. system:openai_api_key)
regionstringoptionalDeployment region (e.g., "us-east-1")
descriptionstringoptional
tagsstring[]optionalTags for categorization
deprecatedbooleanoptional (default: false)
recommendedForstring[]optionalUse case recommendations

Nested Shape: ModelConfig.capabilities

PropertyTypeRequiredDescription
textGenerationbooleanoptional (default: true)Supports text generation
textEmbeddingbooleanoptional (default: false)Supports text embedding
imageGenerationbooleanoptional (default: false)Supports image generation
imageUnderstandingbooleanoptional (default: false)Supports image understanding
functionCallingbooleanoptional (default: false)Supports function calling
codeGenerationbooleanoptional (default: false)Supports code generation
reasoningbooleanoptional (default: false)Supports advanced reasoning

Nested Shape: ModelConfig.limits

PropertyTypeRequiredDescription
maxTokensintegerMaximum tokens per request
contextWindowintegerContext window size
maxOutputTokensintegeroptionalMaximum output tokens
rateLimit{ requestsPerMinute?: integer; tokensPerMinute?: integer }optional

Nested Shape: ModelConfig.pricing

PropertyTypeRequiredDescription
currencystringoptional (default: "USD")
inputCostPer1kTokensnumberoptionalCost per 1K input tokens
outputCostPer1kTokensnumberoptionalCost per 1K output tokens
embeddingCostPer1kTokensnumberoptionalCost per 1K embedding tokens

ModelLimits

Properties

PropertyTypeRequiredDescription
maxTokensintegerMaximum tokens per request
contextWindowintegerContext window size
maxOutputTokensintegeroptionalMaximum output tokens
rateLimit{ requestsPerMinute?: integer; tokensPerMinute?: integer }optional

ModelPricing

Properties

PropertyTypeRequiredDescription
currencystringoptional (default: "USD")
inputCostPer1kTokensnumberoptionalCost per 1K input tokens
outputCostPer1kTokensnumberoptionalCost per 1K output tokens
embeddingCostPer1kTokensnumberoptionalCost per 1K embedding tokens

ModelProvider

Allowed Values

  • openai
  • azure_openai
  • anthropic
  • google
  • cohere
  • huggingface
  • local
  • custom

ModelRegistry

Properties

PropertyTypeRequiredDescription
namestringRegistry name
modelsRecord<string, { model: object; status?: Enum<'active' | 'deprecated' | 'experimental' | 'disabled'>; priority?: integer; fallbackModels?: string[]; … }>Model entries by ID
promptTemplatesRecord<string, { id: string; name: string; label: string; system?: string | object; … }>optionalPrompt templates by name
defaultModelstringoptionalDefault model ID
enableAutoFallbackbooleanoptional (default: true)Auto-fallback on errors

Nested Shape: ModelRegistry.models[string]

PropertyTypeRequiredDescription
model{ id: string; name: string; version: string; provider: Enum<'openai' | 'azure_openai' | 'anthropic' | 'google' | 'cohere' | 'huggingface' | 'local' | 'custom'>; … }
statusEnum<'active' | 'deprecated' | 'experimental' | 'disabled'>optional (default: "active")
priorityintegeroptional (default: 0)Priority for model selection
fallbackModelsstring[]optionalFallback model IDs
healthCheck{ enabled?: boolean; intervalSeconds?: integer; lastChecked?: string; status?: Enum<'healthy' | 'unhealthy' | 'unknown'> }optional

Nested Shape: ModelRegistry.promptTemplates[string]

PropertyTypeRequiredDescription
idstringUnique template identifier
namestringTemplate name (snake_case)
labelstringDisplay name
systemstring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalSystem prompt — supports {{var}} interpolation
userstring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }User prompt template — supports {{var}} interpolation
assistantstringoptionalAssistant message prefix
variables{ name: string; type?: Enum<'string' | 'number' | 'boolean' | 'object' | 'array'>; required?: boolean; defaultValue?: any; … }[]optionalTemplate variables
modelIdstringoptionalRecommended model ID
temperaturenumberoptional
maxTokensnumberoptional
topPnumberoptional
frequencyPenaltynumberoptional
presencePenaltynumberoptional
stopSequencesstring[]optional
versionstringoptional (default: "1.0.0")
descriptionstringoptional
categorystringoptionalTemplate category (e.g., "code_generation", "support")
tagsstring[]optional
examples{ input: Record<string, any>; output: string }[]optional

ModelRegistryEntry

Properties

PropertyTypeRequiredDescription
model{ id: string; name: string; version: string; provider: Enum<'openai' | 'azure_openai' | 'anthropic' | 'google' | 'cohere' | 'huggingface' | 'local' | 'custom'>; … }
statusEnum<'active' | 'deprecated' | 'experimental' | 'disabled'>optional (default: "active")
priorityintegeroptional (default: 0)Priority for model selection
fallbackModelsstring[]optionalFallback model IDs
healthCheck{ enabled: boolean; intervalSeconds: integer; lastChecked?: string; status: Enum<'healthy' | 'unhealthy' | 'unknown'> }optional

Nested Shape: ModelRegistryEntry.model

PropertyTypeRequiredDescription
idstringUnique model identifier
namestringModel display name
versionstringModel version (e.g., "gpt-4-turbo-2024-04-09")
providerEnum<'openai' | 'azure_openai' | 'anthropic' | 'google' | 'cohere' | 'huggingface' | 'local' | 'custom'>
capabilities{ textGeneration: boolean; textEmbedding: boolean; imageGeneration: boolean; imageUnderstanding: boolean; … }
limits{ maxTokens: integer; contextWindow: integer; maxOutputTokens?: integer; rateLimit?: object }
pricing{ currency: string; inputCostPer1kTokens?: number; outputCostPer1kTokens?: number; embeddingCostPer1kTokens?: number }optional
endpointstringoptionalCustom API endpoint
apiKeystringoptionalAPI key (Warning: Prefer secretRef)
secretRefstringoptionalReference to stored secret (e.g. system:openai_api_key)
regionstringoptionalDeployment region (e.g., "us-east-1")
descriptionstringoptional
tagsstring[]optionalTags for categorization
deprecatedbooleanoptional (default: false)
recommendedForstring[]optionalUse case recommendations

Nested Shape: ModelRegistryEntry.healthCheck

PropertyTypeRequiredDescription
enabledbooleanoptional (default: true)
intervalSecondsintegeroptional (default: 300)
lastCheckedstringoptionalISO timestamp
statusEnum<'healthy' | 'unhealthy' | 'unknown'>optional (default: "unknown")

ModelSelectionCriteria

Properties

PropertyTypeRequiredDescription
capabilitiesstring[]optionalRequired capabilities
maxCostPer1kTokensnumberoptionalMaximum acceptable cost
minContextWindownumberoptionalMinimum context window size
providerEnum<'openai' | 'azure_openai' | 'anthropic' | 'google' | 'cohere' | 'huggingface' | 'local' | 'custom'>optional
tagsstring[]optional
excludeDeprecatedbooleanoptional (default: true)

PromptTemplate

Properties

PropertyTypeRequiredDescription
idstringUnique template identifier
namestringTemplate name (snake_case)
labelstringDisplay name
systemstring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalSystem prompt — supports {{var}} interpolation
userstring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }User prompt template — supports {{var}} interpolation
assistantstringoptionalAssistant message prefix
variables{ name: string; type?: Enum<'string' | 'number' | 'boolean' | 'object' | 'array'>; required?: boolean; defaultValue?: any; … }[]optionalTemplate variables
modelIdstringoptionalRecommended model ID
temperaturenumberoptional
maxTokensnumberoptional
topPnumberoptional
frequencyPenaltynumberoptional
presencePenaltynumberoptional
stopSequencesstring[]optional
versionstringoptional (default: "1.0.0")
descriptionstringoptional
categorystringoptionalTemplate category (e.g., "code_generation", "support")
tagsstring[]optional
examples{ input: Record<string, any>; output: string }[]optional

Nested Shape: PromptTemplate.variables[number]

PropertyTypeRequiredDescription
namestringVariable name (e.g., "user_name", "context")
typeEnum<'string' | 'number' | 'boolean' | 'object' | 'array'>optional (default: "string")
requiredbooleanoptional (default: false)
defaultValueanyoptional
descriptionstringoptional
validation{ minLength?: number; maxLength?: number; pattern?: string; enum?: any[] }optional

Nested Shape: PromptTemplate.examples[number]

PropertyTypeRequiredDescription
inputRecord<string, any>Example variable values
outputstringExpected output

PromptVariable

Properties

PropertyTypeRequiredDescription
namestringVariable name (e.g., "user_name", "context")
typeEnum<'string' | 'number' | 'boolean' | 'object' | 'array'>optional (default: "string")
requiredbooleanoptional (default: false)
defaultValueanyoptional
descriptionstringoptional
validation{ minLength?: number; maxLength?: number; pattern?: string; enum?: any[] }optional

On this page