UNPKG

tryaii-mcp-server

Version:

TryAII MCP Server - 15+ AI models with comparison, cost tracking, and collective intelligence

98 lines 3.76 kB
import mongoose, { Schema } from 'mongoose'; const CompareSessionSchema = new Schema({ userId: { type: String, required: true, index: true }, apiKeyId: { type: String, required: true, index: true }, request: { modelIds: { type: [String], required: true }, message: { type: String, required: true }, temperature: Number, maxTokens: Number, enableWebSearch: Boolean }, modelInteractions: [{ modelId: { type: String, required: true }, provider: { type: String, required: true }, inputTokens: { type: Number, required: true, min: 0 }, outputTokens: { type: Number, required: true, min: 0 }, thinkingTokens: { type: Number, default: 0, min: 0 }, // 🆕 Reasoning tokens totalTokens: { type: Number, default: 0, min: 0 }, // 🆕 Total tokens cost: { type: Number, required: true, min: 0, get: (v) => parseFloat(v.toFixed(6)) }, costBreakdown: { inputCost: { type: Number, default: 0, min: 0 }, outputCost: { type: Number, default: 0, min: 0 }, thinkingCost: { type: Number, default: 0, min: 0 } // Same as output pricing }, latency: { type: Number, required: true, min: 0 }, success: { type: Boolean, required: true }, errorMessage: String, fullResponse: String, responsePreview: { type: String, maxlength: 200 }, timestamp: { type: String }, requestMetadata: mongoose.Schema.Types.Mixed }], aggregatedStats: { totalInputTokens: { type: Number, default: 0 }, totalOutputTokens: { type: Number, default: 0 }, totalThinkingTokens: { type: Number, default: 0 }, // 🆕 Total thinking tokens totalTokens: { type: Number, default: 0 }, // 🆕 Total all tokens averageLatency: { type: Number, default: 0 }, successfulModels: { type: Number, default: 0 }, failedModels: { type: Number, default: 0 } }, costBreakdown: { totalInputCost: { type: Number, default: 0 }, totalOutputCost: { type: Number, default: 0 }, totalThinkingCost: { type: Number, default: 0 } }, clientMetadata: { ipAddress: String, userAgent: String, requestId: String }, balanceUpdate: { attempted: { type: Boolean, default: false }, success: { type: Boolean, default: false }, errorMessage: String, transactionId: String, balanceAfter: { type: Number, get: (v) => v ? parseFloat(v.toFixed(6)) : v } }, totalCost: { type: Number, required: true, min: 0, get: (v) => parseFloat(v.toFixed(6)) }, duration: { type: Number, required: true, min: 0 }, status: { type: String, enum: ['processing', 'success', 'partial', 'error', 'timeout'], required: true, default: 'processing' } }, { timestamps: true, versionKey: false }); // Add indexes CompareSessionSchema.index({ userId: 1, createdAt: -1 }); CompareSessionSchema.index({ apiKeyId: 1, createdAt: -1 }); CompareSessionSchema.index({ totalCost: 1, createdAt: -1 }); CompareSessionSchema.index({ status: 1 }); CompareSessionSchema.index({ 'request.modelIds': 1, createdAt: -1 }); CompareSessionSchema.index({ 'aggregatedStats.successfulModels': 1, createdAt: -1 }); export function createCompareSessionModel(connection) { return connection.model('MCP_CompareSession', CompareSessionSchema); } //# sourceMappingURL=CompareSession.js.map