UNPKG

@neuronetiq/marketplace-contracts

Version:

Contracts for ML Marketplace - Pod I/O, Marketplace API, and Infra Integration

787 lines (779 loc) 27.3 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var zod = require('zod'); var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/schemas/infra-write.ts var infra_write_exports = {}; __export(infra_write_exports, { BatchConsensusWrite: () => BatchConsensusWrite, BatchSignalWrite: () => BatchSignalWrite, ConsensusWrite: () => ConsensusWrite, ConsensusWriteRequest: () => ConsensusWriteRequest, MarketplaceHeaders: () => MarketplaceHeaders, SignalWrite: () => SignalWrite, SignalWriteRequest: () => SignalWriteRequest, WriteResponse: () => WriteResponse }); var ISODateTime3, UUID3, Symbol3, Timeframe2, Decision2, Confidence2, SignalWrite, ConsensusWrite, BatchSignalWrite, BatchConsensusWrite, SignalWriteRequest, ConsensusWriteRequest, WriteResponse, MarketplaceHeaders; var init_infra_write = __esm({ "src/schemas/infra-write.ts"() { ISODateTime3 = zod.z.string().datetime(); UUID3 = zod.z.string().uuid(); Symbol3 = zod.z.string().min(1).max(10); Timeframe2 = zod.z.enum(["1m", "5m", "15m", "1h", "4h", "1d"]); Decision2 = zod.z.enum(["BUY", "SELL", "HOLD", "UNKNOWN"]); Confidence2 = zod.z.number().min(0).max(1); SignalWrite = zod.z.object({ // Core signal data symbol: Symbol3, timeframe: Timeframe2, decision: Decision2, confidence: Confidence2, model_version: zod.z.string(), timestamp: ISODateTime3, // Vendor attribution vendor_id: zod.z.string().min(1).max(50), deployment_id: UUID3, // Optional metadata rationale: zod.z.array(zod.z.string()).optional(), metadata: zod.z.record(zod.z.any()).optional(), // Model performance context model_performance: zod.z.object({ backtest_sharpe: zod.z.number().optional(), live_sharpe: zod.z.number().optional(), win_rate: zod.z.number().min(0).max(1).optional(), max_drawdown: zod.z.number().min(0).max(1).optional() }).optional(), // Feature importance (optional) feature_importance: zod.z.record(zod.z.number()).optional(), // Prediction uncertainty uncertainty: zod.z.number().min(0).max(1).optional() }).strict(); ConsensusWrite = zod.z.object({ // Core consensus data symbol: Symbol3, timeframe: Timeframe2, decision: Decision2, confidence: Confidence2, model_version: zod.z.string(), timestamp: ISODateTime3, // Vendor attribution vendor_id: zod.z.string().min(1).max(50), deployment_id: UUID3, // Consensus details contributing_models: zod.z.array(zod.z.object({ model_id: zod.z.string(), vendor_id: zod.z.string(), weight: zod.z.number().min(0).max(1), contribution: zod.z.number().min(-1).max(1) })).optional(), // Optional metadata rationale: zod.z.array(zod.z.string()).optional(), metadata: zod.z.record(zod.z.any()).optional(), // Consensus metrics consensus_metrics: zod.z.object({ agreement_score: zod.z.number().min(0).max(1).optional(), diversity_index: zod.z.number().min(0).max(1).optional(), confidence_interval: zod.z.object({ lower: zod.z.number().min(0).max(1), upper: zod.z.number().min(0).max(1) }).optional() }).optional(), // Model performance context model_performance: zod.z.object({ backtest_sharpe: zod.z.number().optional(), live_sharpe: zod.z.number().optional(), win_rate: zod.z.number().min(0).max(1).optional(), max_drawdown: zod.z.number().min(0).max(1).optional() }).optional() }).strict(); BatchSignalWrite = zod.z.object({ signals: zod.z.array(SignalWrite).min(1).max(100), // Batch metadata batch_id: UUID3.optional(), vendor_id: zod.z.string().min(1).max(50), deployment_id: UUID3, timestamp: ISODateTime3 }).strict(); BatchConsensusWrite = zod.z.object({ consensus: zod.z.array(ConsensusWrite).min(1).max(100), // Batch metadata batch_id: UUID3.optional(), vendor_id: zod.z.string().min(1).max(50), deployment_id: UUID3, timestamp: ISODateTime3 }).strict(); SignalWriteRequest = zod.z.union([ SignalWrite, BatchSignalWrite ]); ConsensusWriteRequest = zod.z.union([ ConsensusWrite, BatchConsensusWrite ]); WriteResponse = zod.z.object({ success: zod.z.boolean(), message: zod.z.string().optional(), // Request tracking request_id: UUID3, timestamp: ISODateTime3, // Write results results: zod.z.object({ written: zod.z.number().int().nonnegative(), skipped: zod.z.number().int().nonnegative().optional(), errors: zod.z.number().int().nonnegative().optional() }).optional(), // Error details errors: zod.z.array(zod.z.object({ code: zod.z.string(), message: zod.z.string(), data: zod.z.any().optional() })).optional(), // Idempotency information idempotency: zod.z.object({ key: zod.z.string(), slot: zod.z.number().int().nonnegative(), was_duplicate: zod.z.boolean() }).optional() }).strict(); MarketplaceHeaders = zod.z.object({ "Authorization": zod.z.string().regex(/^Bearer\s+.+$/), "X-Marketplace-Contracts-Version": zod.z.string().regex(/^\d+\.\d+\.\d+$/), "X-Idempotency-Key": zod.z.string().optional(), "X-Vendor-ID": zod.z.string().optional(), "X-Deployment-ID": zod.z.string().optional(), "Content-Type": zod.z.literal("application/json") }).strict(); } }); var ISODateTime = zod.z.string().datetime(); var UUID = zod.z.string().uuid(); var Symbol2 = zod.z.string().min(1).max(10); var Timeframe = zod.z.enum(["1m", "5m", "15m", "1h", "4h", "1d"]); var Decision = zod.z.enum(["BUY", "SELL", "HOLD", "UNKNOWN"]); var Confidence = zod.z.number().min(0).max(1); var SignalInferenceRequest = zod.z.object({ // Request metadata request_id: UUID, timestamp: ISODateTime, // Market context symbol: Symbol2, timeframe: Timeframe, // Market data (last N bars) bars: zod.z.array(zod.z.object({ timestamp: ISODateTime, open: zod.z.number().positive(), high: zod.z.number().positive(), low: zod.z.number().positive(), close: zod.z.number().positive(), volume: zod.z.number().nonnegative() })).min(1).max(1e3), // Model configuration model_config: zod.z.object({ model_version: zod.z.string().optional(), features: zod.z.array(zod.z.string()).optional(), parameters: zod.z.record(zod.z.any()).optional() }).optional(), // Optional context context: zod.z.object({ market_session: zod.z.enum(["pre", "regular", "post"]).optional(), volatility_regime: zod.z.enum(["low", "normal", "high"]).optional(), news_sentiment: zod.z.number().min(-1).max(1).optional() }).optional() }).strict(); var SignalInferenceResponse = zod.z.object({ // Response metadata request_id: UUID, timestamp: ISODateTime, processing_time_ms: zod.z.number().nonnegative(), // Signal output signal: zod.z.object({ symbol: Symbol2, timeframe: Timeframe, decision: Decision, confidence: Confidence, model_version: zod.z.string(), // Optional rationale rationale: zod.z.array(zod.z.string()).optional(), // Optional additional data metadata: zod.z.record(zod.z.any()).optional() }), // Model performance metrics metrics: zod.z.object({ feature_importance: zod.z.record(zod.z.number()).optional(), prediction_uncertainty: zod.z.number().min(0).max(1).optional(), model_confidence: zod.z.number().min(0).max(1).optional() }).optional(), // Error handling error: zod.z.object({ code: zod.z.string(), message: zod.z.string(), details: zod.z.any().optional() }).optional() }).strict(); var ConsensusInferenceRequest = zod.z.object({ // Request metadata request_id: UUID, timestamp: ISODateTime, // Market context symbol: Symbol2, timeframe: Timeframe, // Input signals to aggregate signals: zod.z.array(zod.z.object({ model_id: zod.z.string(), model_version: zod.z.string(), decision: Decision, confidence: Confidence, weight: zod.z.number().min(0).max(1).optional(), metadata: zod.z.record(zod.z.any()).optional() })).min(1).max(50), // Consensus configuration consensus_config: zod.z.object({ method: zod.z.enum(["weighted_average", "majority_vote", "ensemble"]).optional(), min_confidence: zod.z.number().min(0).max(1).optional(), require_agreement: zod.z.boolean().optional() }).optional() }).strict(); var ConsensusInferenceResponse = zod.z.object({ // Response metadata request_id: UUID, timestamp: ISODateTime, processing_time_ms: zod.z.number().nonnegative(), // Consensus output consensus: zod.z.object({ symbol: Symbol2, timeframe: Timeframe, decision: Decision, confidence: Confidence, model_version: zod.z.string(), // Consensus details contributing_models: zod.z.array(zod.z.object({ model_id: zod.z.string(), weight: zod.z.number().min(0).max(1), contribution: zod.z.number().min(-1).max(1) })), // Optional rationale rationale: zod.z.array(zod.z.string()).optional(), // Optional additional data metadata: zod.z.record(zod.z.any()).optional() }), // Consensus metrics metrics: zod.z.object({ agreement_score: zod.z.number().min(0).max(1).optional(), diversity_index: zod.z.number().min(0).max(1).optional(), confidence_interval: zod.z.object({ lower: zod.z.number().min(0).max(1), upper: zod.z.number().min(0).max(1) }).optional() }).optional(), // Error handling error: zod.z.object({ code: zod.z.string(), message: zod.z.string(), details: zod.z.any().optional() }).optional() }).strict(); var OptimizerRequest = zod.z.object({ // Request metadata request_id: UUID, timestamp: ISODateTime, // Optimization context symbols: zod.z.array(Symbol2).min(1).max(100), timeframe: Timeframe, // Market data market_data: zod.z.object({ prices: zod.z.record(zod.z.number().positive()), volatilities: zod.z.record(zod.z.number().nonnegative()), correlations: zod.z.record(zod.z.record(zod.z.number().min(-1).max(1))) }), // Optimization parameters optimization_config: zod.z.object({ objective: zod.z.enum(["maximize_sharpe", "minimize_risk", "maximize_return"]), constraints: zod.z.object({ max_weight: zod.z.number().min(0).max(1).optional(), min_weight: zod.z.number().min(0).max(1).optional(), max_turnover: zod.z.number().min(0).max(1).optional() }).optional(), risk_budget: zod.z.number().min(0).max(1).optional() }) }).strict(); var OptimizerResponse = zod.z.object({ // Response metadata request_id: UUID, timestamp: ISODateTime, processing_time_ms: zod.z.number().nonnegative(), // Optimization output portfolio: zod.z.object({ weights: zod.z.record(zod.z.number().min(0).max(1)), expected_return: zod.z.number(), expected_volatility: zod.z.number().nonnegative(), sharpe_ratio: zod.z.number(), // Optional metrics metrics: zod.z.object({ diversification_ratio: zod.z.number().optional(), max_drawdown: zod.z.number().optional(), var_95: zod.z.number().optional() }).optional() }), // Optimization details optimization_details: zod.z.object({ iterations: zod.z.number().int().nonnegative(), convergence: zod.z.boolean(), objective_value: zod.z.number() }).optional(), // Error handling error: zod.z.object({ code: zod.z.string(), message: zod.z.string(), details: zod.z.any().optional() }).optional() }).strict(); var ISODateTime2 = zod.z.string().datetime(); var UUID2 = zod.z.string().uuid(); var Slug = zod.z.string().regex(/^[a-z0-9-]+$/).min(1).max(50); var Version = zod.z.string().regex(/^\d+\.\d+\.\d+$/); var URL = zod.z.string().url(); var Email = zod.z.string().email(); var CatalogModel = zod.z.object({ // Model identity id: UUID2, slug: Slug, name: zod.z.string().min(1).max(100), description: zod.z.string().max(1e3).optional(), // Model metadata vendor: zod.z.object({ id: zod.z.string(), name: zod.z.string(), email: Email.optional(), website: URL.optional() }), // Model details task: zod.z.enum(["signal", "consensus", "optimization", "feature_engineering"]), domain: zod.z.enum(["forex", "stocks", "crypto", "commodities", "multi_asset"]), timeframe: zod.z.enum(["1m", "5m", "15m", "1h", "4h", "1d", "multi"]), // Performance metrics performance: zod.z.object({ sharpe_ratio: zod.z.number().optional(), win_rate: zod.z.number().min(0).max(1).optional(), max_drawdown: zod.z.number().min(0).max(1).optional(), total_return: zod.z.number().optional(), volatility: zod.z.number().nonnegative().optional(), calmar_ratio: zod.z.number().optional() }).optional(), // Model versions latest_version: Version, versions: zod.z.array(zod.z.object({ version: Version, created_at: ISODateTime2, description: zod.z.string().optional(), performance: zod.z.record(zod.z.number()).optional(), artifact_url: URL.optional() })), // Deployment status deployment_status: zod.z.enum(["available", "deployed", "maintenance", "deprecated"]), active_deployments: zod.z.number().int().nonnegative(), // Marketplace metadata tags: zod.z.array(zod.z.string()).max(10), license: zod.z.enum(["MIT", "Apache-2.0", "GPL-3.0", "Commercial", "Custom"]), pricing: zod.z.object({ model: zod.z.enum(["free", "per_inference", "subscription", "enterprise"]), cost_per_inference: zod.z.number().nonnegative().optional(), monthly_cost: zod.z.number().nonnegative().optional() }).optional(), // Timestamps created_at: ISODateTime2, updated_at: ISODateTime2, last_deployed_at: ISODateTime2.optional() }).strict(); var ModelVersion = zod.z.object({ // Version identity model_id: UUID2, version: Version, // Version metadata description: zod.z.string().max(1e3).optional(), changelog: zod.z.string().max(2e3).optional(), // Artifacts artifacts: zod.z.object({ model_file: URL.optional(), config_file: URL.optional(), requirements: URL.optional(), docker_image: zod.z.string().optional(), inference_script: URL.optional() }).optional(), // Performance metrics performance: zod.z.object({ backtest_results: zod.z.record(zod.z.number()).optional(), live_performance: zod.z.record(zod.z.number()).optional(), benchmark_scores: zod.z.record(zod.z.number()).optional() }).optional(), // Validation validation_status: zod.z.enum(["pending", "passed", "failed", "skipped"]), validation_results: zod.z.object({ accuracy: zod.z.number().min(0).max(1).optional(), latency_ms: zod.z.number().nonnegative().optional(), memory_mb: zod.z.number().nonnegative().optional(), cpu_usage: zod.z.number().min(0).max(1).optional() }).optional(), // Timestamps created_at: ISODateTime2, validated_at: ISODateTime2.optional() }).strict(); var Deployment = zod.z.object({ // Deployment identity id: UUID2, model_id: UUID2, model_version: Version, // Deployment metadata name: zod.z.string().min(1).max(100), description: zod.z.string().max(500).optional(), // Infrastructure details provider: zod.z.enum(["runpod", "aws", "gcp", "azure", "local"]), region: zod.z.string().optional(), instance_type: zod.z.string().optional(), // Resource allocation resources: zod.z.object({ cpu_cores: zod.z.number().int().positive(), memory_gb: zod.z.number().positive(), gpu_type: zod.z.string().optional(), gpu_count: zod.z.number().int().nonnegative().optional() }), // Deployment configuration config: zod.z.object({ max_concurrent_requests: zod.z.number().int().positive().optional(), timeout_ms: zod.z.number().int().positive().optional(), auto_scaling: zod.z.boolean().optional(), health_check_interval: zod.z.number().int().positive().optional() }).optional(), // Status and health status: zod.z.enum(["deploying", "running", "stopped", "error", "maintenance"]), health: zod.z.enum(["healthy", "degraded", "unhealthy", "unknown"]), last_heartbeat: ISODateTime2.optional(), // Performance metrics metrics: zod.z.object({ requests_per_minute: zod.z.number().nonnegative().optional(), average_latency_ms: zod.z.number().nonnegative().optional(), error_rate: zod.z.number().min(0).max(1).optional(), cpu_usage: zod.z.number().min(0).max(1).optional(), memory_usage: zod.z.number().min(0).max(1).optional() }).optional(), // Timestamps created_at: ISODateTime2, started_at: ISODateTime2.optional(), stopped_at: ISODateTime2.optional() }).strict(); var Health = zod.z.object({ // Health identity deployment_id: UUID2, timestamp: ISODateTime2, // Overall health status: zod.z.enum(["healthy", "degraded", "unhealthy", "unknown"]), // System metrics system: zod.z.object({ cpu_usage: zod.z.number().min(0).max(1), memory_usage: zod.z.number().min(0).max(1), disk_usage: zod.z.number().min(0).max(1).optional(), gpu_usage: zod.z.number().min(0).max(1).optional(), gpu_memory_usage: zod.z.number().min(0).max(1).optional() }), // Application metrics application: zod.z.object({ requests_per_minute: zod.z.number().nonnegative(), average_latency_ms: zod.z.number().nonnegative(), error_rate: zod.z.number().min(0).max(1), queue_depth: zod.z.number().int().nonnegative().optional(), active_connections: zod.z.number().int().nonnegative().optional() }), // Model-specific metrics model: zod.z.object({ inference_count: zod.z.number().int().nonnegative().optional(), last_inference_at: ISODateTime2.optional(), model_loaded: zod.z.boolean().optional(), prediction_accuracy: zod.z.number().min(0).max(1).optional() }).optional(), // Health checks checks: zod.z.array(zod.z.object({ name: zod.z.string(), status: zod.z.enum(["pass", "fail", "warn"]), message: zod.z.string().optional(), duration_ms: zod.z.number().nonnegative().optional() })).optional(), // Error information errors: zod.z.array(zod.z.object({ code: zod.z.string(), message: zod.z.string(), timestamp: ISODateTime2, count: zod.z.number().int().positive() })).optional() }).strict(); var CatalogRequest = zod.z.object({ // Filtering task: zod.z.enum(["signal", "consensus", "optimization", "feature_engineering"]).optional(), domain: zod.z.enum(["forex", "stocks", "crypto", "commodities", "multi_asset"]).optional(), timeframe: zod.z.enum(["1m", "5m", "15m", "1h", "4h", "1d", "multi"]).optional(), // Sorting sort_by: zod.z.enum(["created_at", "updated_at", "sharpe_ratio", "win_rate", "name"]).optional(), sort_order: zod.z.enum(["asc", "desc"]).optional(), // Pagination page: zod.z.number().int().positive().optional(), limit: zod.z.number().int().min(1).max(100).optional(), // Search search: zod.z.string().max(100).optional(), tags: zod.z.array(zod.z.string()).max(10).optional() }).strict(); var CatalogResponse = zod.z.object({ models: zod.z.array(CatalogModel), pagination: zod.z.object({ page: zod.z.number().int().positive(), limit: zod.z.number().int().positive(), total: zod.z.number().int().nonnegative(), pages: zod.z.number().int().positive() }), filters: zod.z.object({ tasks: zod.z.array(zod.z.string()), domains: zod.z.array(zod.z.string()), timeframes: zod.z.array(zod.z.string()), tags: zod.z.array(zod.z.string()) }).optional() }).strict(); var ModelDetailRequest = zod.z.object({ model_id: UUID2.optional(), slug: Slug.optional() }).refine((data) => data.model_id || data.slug, { message: "Either model_id or slug must be provided" }); var ModelDetailResponse = zod.z.object({ model: CatalogModel, versions: zod.z.array(ModelVersion), deployments: zod.z.array(Deployment), health: zod.z.array(Health).optional() }).strict(); // src/index.ts init_infra_write(); // src/helpers.ts function withMarketplaceHeaders(options) { const headers = { "Authorization": `Bearer ${options.token}`, "X-Marketplace-Contracts-Version": options.contractsVersion, "Content-Type": "application/json" }; if (options.idempotencyKey) { headers["X-Idempotency-Key"] = options.idempotencyKey; } if (options.vendorId) { headers["X-Vendor-ID"] = options.vendorId; } if (options.deploymentId) { headers["X-Deployment-ID"] = options.deploymentId; } return headers; } function validateMarketplaceHeaders(headers) { const errors = []; if (!headers["Authorization"] || !headers["Authorization"].startsWith("Bearer ")) { errors.push("Missing or invalid Authorization header"); } if (!headers["X-Marketplace-Contracts-Version"]) { errors.push("Missing X-Marketplace-Contracts-Version header"); } else { const versionRegex = /^\d+\.\d+\.\d+$/; if (!versionRegex.test(headers["X-Marketplace-Contracts-Version"])) { errors.push("Invalid X-Marketplace-Contracts-Version format"); } } if (headers["Content-Type"] !== "application/json") { errors.push("Content-Type must be application/json"); } return { valid: errors.length === 0, errors }; } function makeIdempotencyKey(symbol, timeframe, timestamp) { const slot = Math.floor((timestamp || Date.now()) / 5e3); return `${symbol}:${timeframe}:${slot}`; } function parseIdempotencyKey(key) { const parts = key.split(":"); if (parts.length !== 3) { return null; } const [symbol, timeframe, slotStr] = parts; const slot = parseInt(slotStr, 10); if (isNaN(slot)) { return null; } return { symbol, timeframe, slot }; } function validateIdempotencySlot(slot, tolerance = 1) { const currentSlot = Math.floor(Date.now() / 5e3); const diff = Math.abs(slot - currentSlot); return diff <= tolerance; } function validateSignalWrite(data) { try { const { SignalWrite: SignalWrite2 } = (init_infra_write(), __toCommonJS(infra_write_exports)); const result = SignalWrite2.safeParse(data); if (result.success) { return { valid: true, errors: [], data: result.data }; } else { return { valid: false, errors: result.error.errors.map((err) => `${err.path.join(".")}: ${err.message}`) }; } } catch (error) { return { valid: false, errors: [`Validation error: ${error instanceof Error ? error.message : "Unknown error"}`] }; } } function validateConsensusWrite(data) { try { const { ConsensusWrite: ConsensusWrite2 } = (init_infra_write(), __toCommonJS(infra_write_exports)); const result = ConsensusWrite2.safeParse(data); if (result.success) { return { valid: true, errors: [], data: result.data }; } else { return { valid: false, errors: result.error.errors.map((err) => `${err.path.join(".")}: ${err.message}`) }; } } catch (error) { return { valid: false, errors: [`Validation error: ${error instanceof Error ? error.message : "Unknown error"}`] }; } } function generateRequestId() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { const r = Math.random() * 16 | 0; const v = c === "x" ? r : r & 3 | 8; return v.toString(16); }); } function formatTimestamp(timestamp) { return new Date(timestamp || Date.now()).toISOString(); } function calculateConfidenceInterval(confidence, margin = 0.1) { const lower = Math.max(0, confidence - margin); const upper = Math.min(1, confidence + margin); return { lower, upper }; } function aggregateSignals(signals) { if (signals.length === 0) { return { decision: "UNKNOWN", confidence: 0, contributing_count: 0 }; } const decisionValues = { "SELL": -1, "HOLD": 0, "BUY": 1, "UNKNOWN": 0 }; let weightedSum = 0; let totalWeight = 0; let confidenceSum = 0; let contributingCount = 0; for (const signal of signals) { const weight = signal.weight || 1; const decisionValue = decisionValues[signal.decision]; weightedSum += decisionValue * weight; totalWeight += weight; confidenceSum += signal.confidence * weight; contributingCount++; } const averageDecision = weightedSum / totalWeight; const averageConfidence = confidenceSum / totalWeight; let decision; if (averageDecision > 0.3) { decision = "BUY"; } else if (averageDecision < -0.3) { decision = "SELL"; } else { decision = "HOLD"; } return { decision, confidence: Math.min(1, Math.max(0, averageConfidence)), contributing_count: contributingCount }; } // src/index.ts var MARKETPLACE_CONTRACTS_VERSION = "0.1.0"; var MARKETPLACE_CONTRACTS_FINGERPRINT = "0.1.0:marketplace-contracts-initial-release"; var PodIOSchemas = { SignalInferenceRequest, SignalInferenceResponse, ConsensusInferenceRequest, ConsensusInferenceResponse, OptimizerRequest, OptimizerResponse }; var MarketplaceSchemas = { CatalogModel, ModelVersion, Deployment, Health, CatalogRequest, CatalogResponse, ModelDetailRequest, ModelDetailResponse }; var InfraWriteSchemas = { SignalWrite, ConsensusWrite, BatchSignalWrite, BatchConsensusWrite, SignalWriteRequest, ConsensusWriteRequest, WriteResponse, MarketplaceHeaders }; var Helpers = { withMarketplaceHeaders, validateMarketplaceHeaders, makeIdempotencyKey, parseIdempotencyKey, validateIdempotencySlot, validateSignalWrite, validateConsensusWrite, generateRequestId, formatTimestamp, calculateConfidenceInterval, aggregateSignals }; var index_default = { version: MARKETPLACE_CONTRACTS_VERSION, fingerprint: MARKETPLACE_CONTRACTS_FINGERPRINT, schemas: { podIO: PodIOSchemas, marketplace: MarketplaceSchemas, infraWrite: InfraWriteSchemas }, helpers: Helpers }; exports.Helpers = Helpers; exports.InfraWriteSchemas = InfraWriteSchemas; exports.MARKETPLACE_CONTRACTS_FINGERPRINT = MARKETPLACE_CONTRACTS_FINGERPRINT; exports.MARKETPLACE_CONTRACTS_VERSION = MARKETPLACE_CONTRACTS_VERSION; exports.MarketplaceSchemas = MarketplaceSchemas; exports.PodIOSchemas = PodIOSchemas; exports.default = index_default; //# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map