File size: 1,870 Bytes
96812c9 1150456 |
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 |
interface ModelInfoResponse {
id: string
config: {
architectures: string[]
model_type: string
}
lastModified: string
pipeline_tag: string
tags: string[]
transformersInfo: {
pipeline_tag: string
auto_model: string
processor: string
}
safetensors?: {
parameters: {
F16?: number
F32?: number
total?: number
}
}
likes: number
downloads: number
}
const getModelInfo = async (modelName: string): Promise<ModelInfoResponse> => {
const token = process.env.REACT_APP_HUGGINGFACE_TOKEN
if (!token) {
throw new Error(
'Hugging Face token not found. Please set REACT_APP_HUGGINGFACE_TOKEN in your .env file'
)
}
const response = await fetch(
`https://huggingface.co/api/models/${modelName}`,
{
method: 'GET',
headers: {
Authorization: `Bearer ${token}`
}
}
)
if (!response.ok) {
throw new Error(`Failed to fetch model info: ${response.statusText}`)
}
return response.json()
}
// Define the possible quantization types for clarity and type safety
type QuantizationType = 'FP32' | 'FP16' | 'INT8' | 'Q4'
function getModelSize(
parameters: number,
quantization: QuantizationType
): number {
let bytesPerParameter: number
switch (quantization) {
case 'FP32':
// 32-bit floating point uses 4 bytes
bytesPerParameter = 4
break
case 'FP16':
bytesPerParameter = 2
break
case 'INT8':
bytesPerParameter = 1
break
case 'Q4':
bytesPerParameter = 0.5
const theoreticalSize = (parameters * bytesPerParameter) / (1024 * 1024)
return theoreticalSize
}
// There are 1,024 * 1,024 bytes in a megabyte
const sizeInBytes = parameters * bytesPerParameter
const sizeInMB = sizeInBytes / (1024 * 1024)
return sizeInMB
}
export { getModelInfo, getModelSize }
|