
ModelRegistry 参考在 Transformers.js v4 中ModelRegistry为模型资源提供预检preflightAPI。您可以在调用pipeline()之前检查所需文件、估算总下载大小、检查缓存状态以及清除缓存的工件。这对于生产环境用户体验非常有用您可以在加载前显示准确的下载估算支持离线优先流程避免意外的带宽消耗让缓存管理保持显式可控。目录概述核心 API推荐工作流示例最佳实践概述import{ModelRegistry}fromhuggingface/transformers;ModelRegistry使用与传递给pipeline()相同的任务/模型/选项参数。典型的元组consttaskfeature-extraction;constmodelIdonnx-community/all-MiniLM-L6-v2-ONNX;constmodelOptions{dtype:fp32};核心 APIget_pipeline_files(task, modelId, modelOptions)返回初始化该管道配置所需的全部文件。constfilesawaitModelRegistry.get_pipeline_files(task,modelId,modelOptions);// 示例[config.json, onnx/model.onnx, tokenizer.json, ...]使用此方法构建预检检查和下载清单。get_file_metadata(modelId, file)返回单个文件的元数据可用时包含大小。constmetadataawaitModelRegistry.get_file_metadata(modelId,onnx/model.onnx);console.log(metadata);使用此方法计算总传输大小并识别大型资源。is_pipeline_cached(task, modelId, modelOptions)检查所需文件是否已在缓存中可用。constcachedawaitModelRegistry.is_pipeline_cached(task,modelId,modelOptions);console.log(cached?Ready offline:Needs download);使用此方法控制离线模式并跳过不必要的预加载步骤。clear_pipeline_cache(task, modelId, modelOptions)清除特定管道元组的缓存资源。awaitModelRegistry.clear_pipeline_cache(task,modelId,modelOptions);使用此方法进行缓存失效、测试或空间回收。get_available_dtypes(modelId)返回该模型可用的精度/量化格式。constdtypesawaitModelRegistry.get_available_dtypes(modelId);// 示例[fp32, fp16, q4, q4f16]使用此方法选择最佳的运行时配置质量 vs. 速度 vs. 内存。推荐工作流为了获得稳健的加载体验确定精确的任务/模型/选项元组。调用get_pipeline_files(...)。获取每个文件的元数据并计算总大小。调用is_pipeline_cached(...)。如果未缓存向用户展示大小/进度预期。通过pipeline(...)加载并在progress_callback中使用progress_total。import{ModelRegistry,pipeline}fromhuggingface/transformers;consttaskfeature-extraction;constmodelIdonnx-community/all-MiniLM-L6-v2-ONNX;constmodelOptions{dtype:q8};constfilesawaitModelRegistry.get_pipeline_files(task,modelId,modelOptions);constmetadataawaitPromise.all(files.map((file)ModelRegistry.get_file_metadata(modelId,file)));consttotalBytesmetadata.reduce((sum,item)sum(item?.size??0),0);consttotalMB(totalBytes/1024/1024).toFixed(2);constcachedawaitModelRegistry.is_pipeline_cached(task,modelId,modelOptions);console.log({fileCount:files.length,totalMB,cached});constpipeawaitpipeline(task,modelId,{...modelOptions,progress_callback:(info){if(info.statusprogress_total){console.log(Loading:${info.progress.toFixed(1)}%);}},});awaitpipe.dispose();示例示例 1动态提供 dtype 选择import{ModelRegistry,pipeline}fromhuggingface/transformers;consttasktext-generation;constmodelIdonnx-community/Qwen2.5-0.5B-Instruct;constdtypesawaitModelRegistry.get_available_dtypes(modelId);constpreferreddtypes.includes(q4)?q4:dtypes[0]??fp32;constgeneratorawaitpipeline(task,modelId,{dtype:preferred});// ... 推理awaitgenerator.dispose();示例 2仅清除一条管道缓存条目import{ModelRegistry}fromhuggingface/transformers;awaitModelRegistry.clear_pipeline_cache(feature-extraction,onnx-community/all-MiniLM-L6-v2-ONNX,{dtype:fp32});这样可以避免清除无关的模型缓存。示例 3离线门控import{ModelRegistry,env,pipeline}fromhuggingface/transformers;consttaskfeature-extraction;constmodelIdonnx-community/all-MiniLM-L6-v2-ONNX;constmodelOptions{dtype:q8};constcachedawaitModelRegistry.is_pipeline_cached(task,modelId,modelOptions);if(!cached){thrownewError(Model not cached yet. Connect once to download assets.);}env.allowRemoteModelsfalse;constpipeawaitpipeline(task,modelId,{...modelOptions,local_files_only:true});最佳实践在需要可预测的下载体验时于pipeline()之前使用ModelRegistry。缓存决策应基于任务/模型/选项元组dtype 和 revision 很重要。面向用户的进度条使用progress_total逐文件进度保持可选。优先使用clear_pipeline_cache(...)进行选择性失效而不是大范围删除缓存。在离线模式下将is_pipeline_cached(...)与local_files_only: true及env.allowRemoteModels false结合使用。相关文档管道选项 -pipeline()选项与进度回调配置参考 - 本地/远程加载的env设置缓存参考 - 浏览器、文件系统与自定义缓存行为主技能指南 - 实际使用模式