# Entrenamiento de JARVIS El fine-tuning NO sustituye al RAG (nucleo/saber/), lo complementa. El RAG ya funciona y da el conocimiento fresco; esto hornea el estilo y los flujos en los pesos. Por eso fue: primero RAG, esto despues. ## Los tres pasos 1. dataset.py convierte los apuntes de COFRE en pares pregunta-respuesta (usa el indice de nucleo/saber/, ~10 h con el 4B local) 2. afina.py QLoRA sobre el dataset. --revisa dice si la maquina puede 3. exportar el adaptador a GGUF + Modelfile con ADAPTER, para ollama ## Por que falla hoy: qwen3.5 es MULTIMODAL (16 ago) Las pruebas de `afina.py` cargan el modelo bien y se caen justo despues, al enganchar los adaptadores, con un mensaje que no viene a cuento: Incorrect image source. Must be a valid URL starting with `http://` No es un fallo de red ni de rutas. **`Qwen/Qwen3.5-2B` es `image-text-to-text`** —comprobado en la API de HuggingFace, y el propio GGUF lo delata: el `model_info` de ollama trae `qwen35.vision.block_count = 24`—. O sea que el modelo lleva torre de vision, y `FastLanguageModel` lo mete por el camino de solo texto mientras transformers intenta procesar una imagen que no existe. La pista estaba en el log y se leyo como ruido: Unsloth: Explicit target_modules are constrained by the finetune_(vision|language|attention|mlp) filters Ese aviso solo lo emite el camino multimodal. Por donde va el arreglo: `FastVisionModel` con `finetune_vision_layers=False`, que es la via de unsloth para afinar solo la parte de lenguaje de un modelo con vision. **Sin probar todavia.** De paso, los nombres que no existen en HuggingFace y que las pruebas fueron descartando: `Qwen3.5-3B`, `Qwen3.5-3B-Instruct`, `Qwen3.5-1.7B`, `Qwen3.5-1.7B-Instruct`, `Qwen3.5-1.5B`. El unico que carga es `Qwen3.5-2B` (1,95 GB). ## Donde entrenar T1200 (4 GB) al limite. Turing, sin bf16. Posible pero fragil. 3060 (12 GB) holgado. El sitio natural. El dataset viaja como fichero. ## Para entrenar pip install unsloth # trae peft, trl, bitsandbytes ./afina.py --revisa # comprueba ./afina.py # entrena ## Exportar a ollama (tras entrenar) # con llama.cpp: python convert_lora_to_gguf.py jarvis-lora --outfile jarvis-lora.gguf # Modelfile: # FROM qwen3.5:4b # ADAPTER ./jarvis-lora.gguf ollama create qwen3.5:4b-jarvis-cofre -f Modelfile