# Ejemplos de DMR


Consulta algunos ejemplos de flujos de trabajo completos utilizando Docker Model Runner.

## Proyecto de ejemplo

Ahora puedes empezar a crear tu aplicación de IA generativa impulsada por Docker Model Runner.

Si deseas probar una aplicación de GenAI existente, sigue estos pasos:

1. Configura la aplicación de ejemplo. Clona y ejecuta el siguiente repositorio:

   ```console
   $ git clone https://github.com/docker/hello-genai.git
   ```

2. En tu terminal, ve al directorio `hello-genai`.

3. Ejecuta `run.sh` para descargar el modelo elegido y ejecutar la aplicación.

4. Abre tu aplicación en el navegador en las direcciones especificadas en el archivo [README](https://github.com/docker/hello-genai) del repositorio.

Verás la interfaz de la aplicación de GenAI donde puedes empezar a escribir tus prompts.

Ahora puedes interactuar con tu propia aplicación de GenAI, impulsada por un modelo local. Prueba algunos prompts y observa lo rápido que son las respuestas; todo ejecutándose en tu máquina con Docker.

## Usar Model Runner en GitHub Actions

Aquí tienes un ejemplo de cómo usar Model Runner como parte de un flujo de trabajo de GitHub. El ejemplo instala Model Runner, prueba la instalación, descarga y ejecuta un modelo, interactúa con el modelo a través de la API y elimina el modelo.

```yaml {title="dmr-run.yml", collapse=true}
name: Docker Model Runner Example Workflow

permissions:
  contents: read

on:
  workflow_dispatch:
    inputs:
      test_model:
        description: "Modelo para realizar la prueba (predeterminado: ai/smollm2:360M-Q4_K_M)"
        required: false
        type: string
        default: "ai/smollm2:360M-Q4_K_M"

jobs:
  dmr-test:
    runs-on: ubuntu-latest
    timeout-minutes: 30

    steps:
      - name: Configurar Docker
        uses: docker/setup-docker-action@v5

      - name: Instalar docker-model-plugin
        run: |
          echo "Instalando docker-model-plugin..."
          # Add Docker's official GPG key:
          sudo apt-get update
          sudo apt-get install ca-certificates curl
          sudo install -m 0755 -d /etc/apt/keyrings
          sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
          sudo chmod a+r /etc/apt/keyrings/docker.asc

          # Add the repository to Apt sources:
          echo \
          "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
          $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
          sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
          sudo apt-get update
          sudo apt-get install -y docker-model-plugin

          echo "Instalación completada con éxito"

      - name: Probar la versión de docker model
        run: |
          echo "Probando el comando docker model version..."
          sudo docker model version

          # Verify the command returns successfully
          if [ $? -eq 0 ]; then
            echo "✅ El comando docker model version funciona correctamente"
          else
            echo "❌ El comando docker model version falló"
            exit 1
          fi

      - name: Descargar el modelo proporcionado y ejecutarlo
        run: |
          MODEL="${{ github.event.inputs.test_model || 'ai/smollm2:360M-Q4_K_M' }}"
          echo "Probando con el modelo: $MODEL"

          # Test model pull
          echo "Descargando el modelo..."
          sudo docker model pull "$MODEL"

          if [ $? -eq 0 ]; then
            echo "✅ Descarga del modelo exitosa"
          else
            echo "❌ La descarga del modelo falló"
            exit 1
          fi
                  
          # Test basic model run (with timeout to avoid hanging)
          echo "Probando docker model run..."
          timeout 60s sudo docker model run "$MODEL" "Give me a fact about whales." || {
            exit_code=$?
            if [ $exit_code -eq 124 ]; then
              echo "✅ Prueba de ejecución del modelo completada (se agotó el tiempo de espera como se esperaba para la prueba no interactiva)"
            else
              echo "❌ La ejecución del modelo falló con el código de salida: $exit_code"
              exit 1
            fi
          }
      - name: Probar descarga y ejecución del modelo
        run: |
          MODEL="${{ github.event.inputs.test_model || 'ai/smollm2:360M-Q4_K_M' }}"
          echo "Probando con el modelo: $MODEL"

          # Test model pull
          echo "Descargando el modelo..."
          sudo docker model pull "$MODEL"

          if [ $? -eq 0 ]; then
            echo "✅ Descarga del modelo exitosa"
          else
            echo "❌ La descarga del modelo falló"
            exit 1
          fi
                  
          # Test basic model run (with timeout to avoid hanging)
          echo "Probando docker model run..."
          timeout 60s sudo docker model run "$MODEL" "Give me a fact about whales." || {
            exit_code=$?
            if [ $exit_code -eq 124 ]; then
              echo "✅ Prueba de ejecución del modelo completada (se agotó el tiempo de espera como se esperaba para la prueba no interactiva)"
            else
              echo "❌ La ejecución del modelo falló con el código de salida: $exit_code"
              exit 1
            fi
          }

      - name: Probar endpoint de la API
        run: |
          MODEL="${{ github.event.inputs.test_model || 'ai/smollm2:360M-Q4_K_M' }}"
          echo "Probando el endpoint de la API con el modelo: $MODEL"
                  
          # Test API call with curl
          echo "Probando llamada a la API..."
          RESPONSE=$(curl -s http://localhost:12434/engines/llama.cpp/v1/chat/completions \
            -H "Content-Type: application/json" \
            -d "{
                \"model\": \"$MODEL\",
                \"messages\": [
                    {
                        \"role\": \"user\",
                        \"content\": \"Say hello\"
                    }
                ],
                \"top_k\": 1,
                \"temperature\": 0
            }")

          if [ $? -eq 0 ]; then
            echo "✅ Llamada a la API exitosa"
            echo "Respuesta recibida: $RESPONSE"
            
            # Check if response contains "hello" (case-insensitive)
            if echo "$RESPONSE" | grep -qi "hello"; then
              echo "✅ La respuesta contiene 'hello' (insensible a mayúsculas y minúsculas)"
            else
              echo "❌ La respuesta no contiene 'hello'"
              echo "Respuesta completa: $RESPONSE"
              exit 1
            fi
          else
            echo "❌ La llamada a la API falló"
            exit 1
          fi

      - name: Probar limpieza del modelo
        run: |
          MODEL="${{ github.event.inputs.test_model || 'ai/smollm2:360M-Q4_K_M' }}"

          echo "Limpiando el modelo de prueba..."
          sudo docker model rm "$MODEL" || echo "El borrado del modelo falló o no se encontró el modelo"

          # Verify model was removed
          echo "Verificando la limpieza del modelo..."
          sudo docker model ls

          echo "✅ Limpieza del modelo completada"

      - name: Informar éxito
        if: success()
        run: |
          echo "🎉 ¡La comprobación de estado diaria de Docker Model Runner se completó con éxito!"
          echo "Todas las pruebas superadas:"
          echo "  ✅ Instalación de docker-model-plugin exitosa"
          echo "  ✅ El comando docker model version funciona"
          echo "  ✅ Operaciones de descarga y ejecución del modelo exitosas"
          echo "  ✅ Operaciones de endpoint de la API exitosas"
          echo "  ✅ Operaciones de limpieza exitosas"
```

## Páginas relacionadas

- [Modelos y Compose](/ai/compose/models-and-compose/)

