#!/bin/bash LOCAL_LLM_API=${LOCAL_LLM_API:-http://host.docker.internal:1248/v1} MODEL="${LLM_MODEL:-qwen3-coder}" llm_query() { local content="$1" jq -n --arg content "$content" --arg model "$MODEL" \ '{"model": $model, "messages": [{"role": "user", "content": $content}]}' \ | curl -s -X POST \ -H "Content-Type: application/json" \ -d @- \ "$LOCAL_LLM_API/chat/completions" \ | jq -r '.choices[0].message.content' } # Get list of modified files FILES=$(jj diff --summary | awk '{print $2}') if [[ -z "$FILES" ]]; then echo "No changes to commit." >&2 exit 1 fi # Pass 1: summarize each file diff individually SUMMARIES="" while IFS= read -r file; do FILE_DIFF=$(jj diff "$file" 2>/dev/null) if [[ -z "$FILE_DIFF" ]]; then continue fi PROMPT="Résume en 2-3 phrases les changements apportés dans ce diff pour le fichier '$file'. Sois concis et factuel. $FILE_DIFF" SUMMARY=$(llm_query "$PROMPT") SUMMARIES="${SUMMARIES}### $file $SUMMARY " done <<< "$FILES" # Pass 2: generate commit message from summaries COMMIT_PROMPT="À partir des résumés suivants de fichiers modifiés, génère un message de commit git. Réponds UNIQUEMENT avec un objet JSON valide contenant \"title\" (string, max 72 chars, en anglais, style imperative) et \"message\" (string, détails en français). Pas de texte avant ou après le JSON. $SUMMARIES" llm_query "$COMMIT_PROMPT" | jq -r '.title + "\n\n" + .message'