@juspay/neurolink
Version:
Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applicatio
108 lines (107 loc) • 3.15 kB
JavaScript
/**
* Model detection utilities for capability checking
*/
import { IMAGE_GENERATION_MODELS } from "../core/constants.js";
/**
* Check if model name is valid for detection functions
*/
function isValidModelName(modelName) {
return typeof modelName === "string" && modelName.length > 0;
}
export function isGemini3Model(modelName) {
if (!isValidModelName(modelName)) {
return false;
}
return /^gemini-3(\.\d+)?(-.*)?$/i.test(modelName);
}
export function isGemini25Model(modelName) {
if (!isValidModelName(modelName)) {
return false;
}
return /^gemini-2\.5(-.*)?$/i.test(modelName);
}
export function supportsThinkingConfig(modelName) {
if (!isValidModelName(modelName)) {
return false;
}
const thinkingModels = [
/^gemini-3/i,
/^gemini-2\.5-pro/i,
/^gemini-2\.5-flash/i,
];
return thinkingModels.some((pattern) => pattern.test(modelName));
}
export function supportsPromptCaching(modelName) {
if (!isValidModelName(modelName)) {
return false;
}
const cachingModels = [
/^gemini-3/i,
/^gemini-2\.5/i,
/^gpt-4/i,
/^claude-3/i,
];
return cachingModels.some((pattern) => pattern.test(modelName));
}
export function getMaxThinkingBudgetTokens(modelName) {
if (!isValidModelName(modelName)) {
return 10000;
}
if (/^gemini-3(\.\d+)?-pro/i.test(modelName)) {
return 100000;
}
if (/^gemini-3(\.\d+)?-flash/i.test(modelName)) {
return 50000;
}
if (/^gemini-2\.5/i.test(modelName)) {
return 32000;
}
return 10000;
}
export function getModelFamily(modelName) {
if (!isValidModelName(modelName)) {
return "unknown";
}
if (/^gemini-3/i.test(modelName)) {
return "gemini-3";
}
if (/^gemini-2\.5/i.test(modelName)) {
return "gemini-2.5";
}
if (/^gemini-2/i.test(modelName)) {
return "gemini-2";
}
if (/^gpt-4/i.test(modelName)) {
return "gpt-4";
}
if (/^claude-3/i.test(modelName)) {
return "claude-3";
}
return "unknown";
}
// Compiled once at module load — hasRestrictedOutputLimit() is called per
// request and previously rebuilt this array on every call.
const IMAGE_MODEL_PATTERNS = IMAGE_GENERATION_MODELS.map((m) => new RegExp(`^${m.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`, "i"));
/**
* Check if a model has restricted output token limit (32768 max)
* This applies to:
* - All Gemini 3 models (gemini-3-flash, gemini-3-pro, etc.)
* - Image generation models (gemini-2.5-flash-image, gemini-3-pro-image-preview)
*/
export function hasRestrictedOutputLimit(modelName) {
if (!isValidModelName(modelName)) {
return false;
}
// Check for Gemini 3 models (anchored regex for consistency)
if (/^gemini-3/i.test(modelName)) {
return true;
}
if (IMAGE_MODEL_PATTERNS.some((pattern) => pattern.test(modelName))) {
return true;
}
return false;
}
/**
* Get the max output tokens for a model (32768 for restricted models)
*/
export const RESTRICTED_OUTPUT_TOKEN_LIMIT = 32768;