--- # ------------------------------------------------------------------------------ # FILE: roles/llm-inference/tasks/model.yml # DESCRIPTION: Phase 4 — HuggingFace login and Gemma 2 27B model download. # Idempotent: snapshot_download skips files already present. # Requires vault_hf_token and Gemma 2 licence accepted at # huggingface.co/google/gemma-2-27b-it. # ------------------------------------------------------------------------------ - name: Write HuggingFace token to ~/.cache/huggingface/token ansible.builtin.copy: content: "{{ vault_hf_token }}" dest: "/home/{{ llm_venv_owner }}/.cache/huggingface/token" owner: "{{ llm_venv_owner }}" group: "{{ llm_venv_owner }}" mode: "0600" no_log: true - name: Download Gemma 2 27B model via snapshot_download ansible.builtin.command: cmd: > {{ llm_venv_path }}/bin/python -c " from huggingface_hub import snapshot_download path = snapshot_download( '{{ llm_hf_model }}', cache_dir='{{ llm_hf_cache_dir }}', ) print(path) " creates: "{{ llm_hf_cache_dir }}/models--{{ llm_hf_model | replace('/', '--') }}/snapshots" become: true become_user: "{{ llm_venv_owner }}" environment: HF_TOKEN: "{{ vault_hf_token }}" HOME: "/home/{{ llm_venv_owner }}" register: model_download timeout: 3600 no_log: false - name: Print model download path ansible.builtin.debug: msg: "Model available at: {{ model_download.stdout | default('already present') }}"