@neuronetiq/marketplace-contracts
Version:
Contracts for ML Marketplace - Pod I/O, Marketplace API, and Infra Integration
787 lines (779 loc) • 27.3 kB
JavaScript
;
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