tryaii-mcp-server
Version:
TryAII MCP Server - 15+ AI models with comparison, cost tracking, and collective intelligence
98 lines • 3.76 kB
JavaScript
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