Skip to content

Groq llm support

Groq llm support #19

Workflow file for this run

name: Test Action - Multi-Model Consensus Review Integration
on:
pull_request:
types:
- opened
- synchronize
- reopened
branches:
- main
- develop
workflow_dispatch:
inputs:
debug_enabled:
description: "Enable debug mode"
required: false
default: "true"
model_preset:
description: "Model configuration preset"
required: false
type: choice
options:
- default
- high-capability
- cost-optimized
- quality-optimized
default: "default"
# Limit concurrent runs
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
# ============================================================================
# Step 1: Generate PR Description (using prpilot-summary)
# ============================================================================
# First, generate an AI-powered PR description using prpilot-summary.
# This provides context for the multi-model consensus review.
# Requires secrets: GROQ_API_KEY
# ============================================================================
generate-description:
name: "Step 1: Generate PR Description"
runs-on: ubuntu-latest
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
permissions:
pull-requests: write
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Check if LLM API key exists
id: check_secrets
run: |
if [ -z "${{ secrets.GROQ_API_KEY }}" ]; then
echo "has_key=false" >> $GITHUB_OUTPUT
else
echo "has_key=true" >> $GITHUB_OUTPUT
fi
- name: Generate PR Description with prpilot-summary
id: generate_desc
if: steps.check_secrets.outputs.has_key == 'true'
uses: bishalprasad321/prpilot-summary@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
llm_api_key: ${{ secrets.GROQ_API_KEY }}
llm_provider: groq
ai_model: groq-1.5-mini
max_diff_lines: "5000"
enable_incremental_diff_processing: "true"
debug: ${{ inputs.debug_enabled || 'false' }}
continue-on-error: true
- name: Log Description Generation Results
if: always()
run: |
echo "=========================================="
echo "Step 1: PR Description Generation"
echo "=========================================="
echo "Status: ${{ job.status }}"
echo "Outcome: ${{ steps.generate_desc.outcome }}"
echo ""
if [ "${{ steps.generate_desc.outcome }}" == "success" ]; then
echo "✅ PR description generated successfully"
else
echo "⚠️ Description generation encountered an error"
echo "This may be expected if:"
echo " - Secrets are not configured (GROQ_API_KEY missing)"
echo " - No meaningful changes in the PR"
echo " - LLM API is temporarily unavailable"
fi
echo "=========================================="
# ============================================================================
# Step 2: Multi-Model Consensus Code Review (using prpilot-review)
# ============================================================================
# Run multi-model consensus review after description is generated.
# This calls 3 independent reviewer models + 1 judge model for consensus.
# Requires secrets: GROQ_API_KEY
# Outputs: Decision (APPROVE/REQUEST_CHANGES/COMMENT), findings, round count
# ============================================================================
consensus-review:
name: "Step 2: Multi-Model Consensus Review"
needs: generate-description
runs-on: ubuntu-latest
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
permissions:
pull-requests: write
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Determine model configuration
id: model_config
run: |
PRESET="${{ inputs.model_preset || 'default' }}"
case $PRESET in
high-capability)
echo "reviewer_models=llama-3.3-70b-versatile,openai/gpt-oss-120b,openai/gpt-oss-20b" >> $GITHUB_OUTPUT
echo "judge_model=openai/gpt-oss-120b" >> $GITHUB_OUTPUT
echo "preset_name=Groq Maximum Quality" >> $GITHUB_OUTPUT
;;
cost-optimized)
echo "reviewer_models=llama-3.1-8b-instant,openai/gpt-oss-20b,openai/gpt-oss-20b" >> $GITHUB_OUTPUT
echo "judge_model=openai/gpt-oss-120b" >> $GITHUB_OUTPUT
echo "preset_name=Groq Maximum Speed" >> $GITHUB_OUTPUT
;;
quality-optimized)
echo "reviewer_models=llama-3.3-70b-versatile,openai/gpt-oss-120b,openai/gpt-oss-20b" >> $GITHUB_OUTPUT
echo "judge_model=openai/gpt-oss-120b" >> $GITHUB_OUTPUT
echo "preset_name=Groq Maximum Quality" >> $GITHUB_OUTPUT
;;
*)
echo "reviewer_models=llama-3.1-8b-instant,openai/gpt-oss-20b,llama-3.3-70b-versatile" >> $GITHUB_OUTPUT
echo "judge_model=openai/gpt-oss-120b" >> $GITHUB_OUTPUT
echo "preset_name=Groq Default Production" >> $GITHUB_OUTPUT
;;
esac
- name: Check if LLM API key exists
id: check_secrets
run: |
if [ -z "${{ secrets.GROQ_API_KEY }}" ]; then
echo "has_key=false" >> $GITHUB_OUTPUT
else
echo "has_key=true" >> $GITHUB_OUTPUT
fi
- name: Execute prpilot-review Action
id: consensus_review
if: steps.check_secrets.outputs.has_key == 'true'
uses: ./
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
llm_provider: groq
llm_api_key: ${{ secrets.GROQ_API_KEY }}
llm_provider_url: https://api.groq.com/openai/v1
reviewer_models: ${{ steps.model_config.outputs.reviewer_models }}
judge_model: ${{ steps.model_config.outputs.judge_model }}
max_consensus_rounds: "3"
inline_comments_enabled: "true"
max_diff_lines: "5000"
enable_incremental_diff_processing: "true"
debug: ${{ inputs.debug_enabled || 'false' }}
continue-on-error: true
- name: Log Review Execution Results
if: always()
run: |
echo "=========================================="
echo "Step 2: Multi-Model Consensus Review"
echo "=========================================="
echo "Model Configuration: ${{ steps.model_config.outputs.preset_name }}"
echo "Reviewer Models: ${{ steps.model_config.outputs.reviewer_models }}"
echo "Judge Model: ${{ steps.model_config.outputs.judge_model }}"
echo ""
echo "Status: ${{ job.status }}"
echo "Outcome: ${{ steps.consensus_review.outcome }}"
echo ""
echo "Review Results:"
echo " Decision: ${{ steps.consensus_review.outputs.review_decision || 'N/A' }}"
echo " Consensus Round: ${{ steps.consensus_review.outputs.consensus_round || 'N/A' }}"
echo " Review ID: ${{ steps.consensus_review.outputs.review_id || 'N/A' }}"
echo ""
if [[ "${{ steps.consensus_review.outcome }}" == "success" ]]; then
echo "✅ Consensus review completed successfully"
echo "Decision: ${{ steps.consensus_review.outputs.review_decision }}"
echo ""
echo "📋 Review Details:"
echo " - Consensus was reached in ${{ steps.consensus_review.outputs.consensus_round }} round(s)"
echo " - Review has been posted to the pull request"
echo " - Inline code comments with specific findings have been added"
else
echo "⚠️ Consensus review encountered an error"
echo "This may be expected if:"
echo " - Secrets are not configured (GROQ_API_KEY missing)"
echo " - Selected models are not valid for the current provider"
echo " - API quota exceeded (check API key billing settings)"
echo " - Reviewer/judge models not available"
echo " - LLM API is temporarily unavailable"
fi
echo "=========================================="
# ============================================================================
# Integration Test Summary
# ============================================================================
# Summarize both steps and provide overall status
# ============================================================================
test-summary:
name: "Integration Test Summary"
needs: [generate-description, consensus-review]
runs-on: ubuntu-latest
if: always()
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Create Integration Test Report
uses: actions/github-script@v7
if: github.event_name == 'pull_request'
with:
script: |
const generateDescStatus = '${{ needs.generate-description.result }}';
const consensusReviewStatus = '${{ needs.consensus-review.result }}';
let reportBody = '## 🤖 AI Review Workflow Report\n\n';
reportBody += '### Step 1: PR Description Generation\n';
reportBody += `- Status: ${generateDescStatus === 'success' ? '✅ Success' : '⚠️ ' + generateDescStatus}\n\n`;
reportBody += '### Step 2: Multi-Model Consensus Review\n';
reportBody += `- Status: ${consensusReviewStatus === 'success' ? '✅ Success' : '⚠️ ' + consensusReviewStatus}\n`;
reportBody += `- Decision: ${{ needs.consensus-review.outputs.review_decision || 'N/A' }}\n`;
reportBody += `- Consensus Round: ${{ needs.consensus-review.outputs.consensus_round || 'N/A' }}\n\n`;
reportBody += '### Workflow Status\n';
const allSuccess = generateDescStatus === 'success' && consensusReviewStatus === 'success';
reportBody += allSuccess
? '✅ **All steps completed successfully**\n'
: '⚠️ **One or more steps encountered issues** (check logs for details)\n';
reportBody += '\n---\n';
reportBody += '*Models Used:* Review [MODELS_AND_OPTIMIZATION.md](../../MODELS_AND_OPTIMIZATION.md) for configuration details\n';
reportBody += '*This report was generated by the PR Pilot Review Integration Tests*\n';
console.log(reportBody);
- name: Print Workflow Summary
run: |
echo "=========================================="
echo "Integration Test Workflow Summary"
echo "=========================================="
echo ""
echo "Jobs Status:"
echo " Generate Description: ${{ needs.generate-description.result }}"
echo " Consensus Review: ${{ needs.consensus-review.result }}"
echo ""
echo "Consensus Review Outputs:"
echo " Decision: ${{ needs.consensus-review.outputs.review_decision }}"
echo " Round: ${{ needs.consensus-review.outputs.consensus_round }}"
echo " Review ID: ${{ needs.consensus-review.outputs.review_id }}"
echo ""
echo "💡 Tips:"
echo " - Run with debug_enabled=true for verbose model output"
echo " - Try different model presets for cost/quality trade-offs"
echo " - See MODELS_AND_OPTIMIZATION.md for detailed configuration"