File size: 2,112 Bytes
9d2d895 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | /**
* ML Configuration for ONNX Runtime Web integration
* Models are loaded from HuggingFace CDN via @xenova/transformers
*/
export interface ModelConfig {
id: string;
name: string;
hfModel: string;
size: number;
priority: number;
required: boolean;
task: 'feature-extraction' | 'text-classification' | 'text2text-generation' | 'token-classification';
}
export const MODEL_CONFIGS: ModelConfig[] = [
{
id: 'embeddings',
name: 'all-MiniLM-L6-v2',
hfModel: 'Xenova/all-MiniLM-L6-v2',
size: 23_000_000,
priority: 1,
required: true,
task: 'feature-extraction',
},
{
id: 'sentiment',
name: 'DistilBERT-SST2',
hfModel: 'Xenova/distilbert-base-uncased-finetuned-sst-2-english',
size: 65_000_000,
priority: 2,
required: false,
task: 'text-classification',
},
{
id: 'summarization',
name: 'Flan-T5-base',
hfModel: 'Xenova/flan-t5-base',
size: 250_000_000,
priority: 3,
required: false,
task: 'text2text-generation',
},
{
id: 'summarization-beta',
name: 'Flan-T5-small',
hfModel: 'Xenova/flan-t5-small',
size: 60_000_000,
priority: 3,
required: false,
task: 'text2text-generation',
},
{
id: 'ner',
name: 'BERT-NER',
hfModel: 'Xenova/bert-base-NER',
size: 65_000_000,
priority: 4,
required: false,
task: 'token-classification',
},
];
export const ML_FEATURE_FLAGS = {
semanticClustering: true,
mlSentiment: true,
summarization: true,
mlNER: true,
insightsPanel: true,
};
export const ML_THRESHOLDS = {
semanticClusterThreshold: 0.75,
minClustersForML: 5,
maxTextsPerBatch: 20,
modelLoadTimeoutMs: 600_000,
inferenceTimeoutMs: 120_000,
memoryBudgetMB: 200,
};
export function getModelConfig(modelId: string): ModelConfig | undefined {
return MODEL_CONFIGS.find(m => m.id === modelId);
}
export function getRequiredModels(): ModelConfig[] {
return MODEL_CONFIGS.filter(m => m.required);
}
export function getModelsByPriority(): ModelConfig[] {
return [...MODEL_CONFIGS].sort((a, b) => a.priority - b.priority);
}
|