#!/usr/bin/env python3
"""Apunta el cerebro de Newelle al modelo qwen3.5:4b-jarvis.

Es la variante con num_gpu 24 (ver qwen3.5-4b-jarvis.Modelfile): deja 1540 MiB
libres en la tarjeta para que whisper pueda transcribir sin morir de OOM.

Toca solo la clave llm-settings, y dentro solo el bloque "ollama": el modelo
elegido, la lista de modelos y la biblioteca que se ve en la interfaz.
"""
import json
import subprocess
import sys

APP = "io.github.qwersyk.Newelle"
RAMA = "master"
MODELO = "qwen3.5:4b-jarvis"

GSET = ["flatpak", "run", f"--command=gsettings", f"{APP}//{RAMA}"]


def leer(clave):
    out = subprocess.check_output(GSET + ["get", APP, clave], text=True).strip()
    # gsettings devuelve el string entre comillas simples, con \\ escapados
    return json.loads(out[1:-1].replace("\\\\", "\\").replace("\\'", "'"))


def escribir(clave, valor):
    subprocess.check_call(GSET + ["set", APP, clave, json.dumps(valor)])


def main():
    ajustes = leer("llm-settings")
    ollama = ajustes.setdefault("ollama", {})

    anterior = ollama.get("model")
    if anterior == MODELO:
        print(f"ya apuntaba a {MODELO}; nada que hacer.")
        return 0

    ollama["model"] = MODELO

    # la lista de modelos del desplegable: pares [clave, titulo]
    modelos = json.loads(ollama.get("models", "[]"))
    if not any(m[0] == MODELO for m in modelos):
        modelos.insert(0, [MODELO, MODELO])
        ollama["models"] = json.dumps(modelos)

    # la biblioteca que pinta la interfaz, para que salga con descripcion
    biblioteca = ollama.get("model-library", [])
    if not any(m.get("key") == MODELO for m in biblioteca):
        biblioteca.insert(0, {
            "key": MODELO,
            "title": "qwen3.5 4b (JARVIS)",
            "description": "qwen3.5:4b con 24 de 32 capas en GPU, para dejar "
                           "sitio a whisper en la tarjeta de 4 GB.",
        })
        ollama["model-library"] = biblioteca

    escribir("llm-settings", ajustes)
    print(f"cerebro: {anterior} -> {MODELO}")
    return 0


if __name__ == "__main__":
    sys.exit(main())
