chore: auto-commit (95 archivos)

- cmd/fn/doctor.go
- cmd/fn/main.go
- cpp/apps/primitives_gallery/playground/tables/CMakeLists.txt
- cpp/apps/primitives_gallery/playground/tables/data_table.cpp
- cpp/apps/primitives_gallery/playground/tables/data_table_logic.cpp
- cpp/apps/primitives_gallery/playground/tables/data_table_logic.h
- cpp/apps/primitives_gallery/playground/tables/self_test.cpp
- cpp/apps/primitives_gallery/playground/tables/tql.cpp
- cpp/apps/primitives_gallery/playground/tables/viz.cpp
- cpp/apps/primitives_gallery/playground/tables/viz.h
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-13 00:50:34 +02:00
parent ef60449e64
commit a802f59f55
189 changed files with 18964 additions and 330 deletions
@@ -0,0 +1,99 @@
---
name: safetensors_inspect
kind: function
lang: py
domain: ml
version: "1.0.0"
purity: impure
signature: "def safetensors_inspect(path: str) -> dict"
description: "Lee SOLO el header de un archivo .safetensors sin cargar los tensores en RAM. Retorna metadata del modelo, lista de tensores con dtype/shape/offsets, tamano total y conteo. Util para inspeccionar checkpoints de varios GB sin agotarlos en memoria."
tags: [safetensors, model, inspect, header, ml, huggingface, checkpoint, dtype, shape]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
params:
- name: path
desc: "ruta al archivo .safetensors a inspeccionar (absoluta o relativa)"
output: "dict con claves: path (str ruta absoluta), metadata (dict con __metadata__ del header), tensors (list[dict] con name/dtype/shape/data_offsets por tensor), total_size_bytes (int), n_tensors (int)"
tested: true
tests:
- "n_tensors refleja el numero de tensores en el header"
- "total_size_bytes refleja el tamano real del archivo"
- "metadata devuelve el contenido de __metadata__"
- "tensors es lista con una entrada por tensor del header"
- "cada tensor tiene dtype, shape y data_offsets"
- "result path es la ruta absoluta del archivo"
- "FileNotFoundError si el archivo no existe"
- "ValueError si el header no es JSON valido"
- "ValueError si el archivo esta vacio"
- "si no hay __metadata__ metadata retorna dict vacio"
test_file_path: "python/functions/ml/tests/test_safetensors_inspect.py"
file_path: "python/functions/ml/safetensors_inspect.py"
---
## Ejemplo
```python
from ml.safetensors_inspect import safetensors_inspect
info = safetensors_inspect("/models/sd-v1-5/model.safetensors")
print(info["n_tensors"]) # 1344
print(info["total_size_bytes"]) # 3_975_733_952 (~3.7 GB)
print(info["metadata"]) # {"format": "pt", "model_type": "stable_diffusion"}
# Ver los 5 primeros tensores
for t in info["tensors"][:5]:
print(t["name"], t["dtype"], t["shape"])
# model.diffusion_model.input_blocks.0.0.weight F16 [320, 4, 3, 3]
# model.diffusion_model.input_blocks.0.0.bias F16 [320]
# ...
```
## Notas
### Formato safetensors
```
[8 bytes: uint64 LE = N (longitud del header JSON)]
[N bytes: JSON con metadata y descriptores]
[datos binarios de los tensores (no se leen)]
```
El JSON tiene esta estructura:
```json
{
"__metadata__": {"format": "pt", ...},
"tensor_name": {
"dtype": "F32",
"shape": [1024, 768],
"data_offsets": [0, 3145728]
},
...
}
```
`data_offsets` son relativos al inicio del bloque de datos (despues del header),
no al inicio del archivo. Para acceso lazy a un tensor concreto:
`offset_en_archivo = 8 + header_len + data_offsets[0]`.
### Por que no usar la libreria `safetensors`
Esta funcion solo usa stdlib (`struct`, `json`, `os`) para no requerir
instalaciones adicionales y ser ejecutable durante `fn index`. La libreria
oficial `safetensors` de HuggingFace cargaria los tensores en RAM al usar
`safe_open` sin `framework=None`. Esta implementacion es read-only sobre
el header y garantiza que no se carga ningun dato de tensor.
### Dtypes comunes
| dtype | descripcion |
|-------|-------------|
| F32 | float32 (full precision) |
| BF16 | bfloat16 (training, ampere+) |
| F16 | float16 (inference) |
| I32 | int32 |
| I64 | int64 |
| U8 | uint8 |