diff --git a/Jenkinsfile b/Jenkinsfile index f16bd79..4f98960 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,10 +1,10 @@ pipeline { agent any environment { - OPENAI_API_KEY = credentials('OPENAI_API_KEY') + XAI_API_KEY = credentials('XAI_API_KEY') GITEA_TOKEN = credentials('GITEA_TOKEN') GITEA_URL = 'https://git.jb9.uk' - CODEX_MODEL = 'gpt-4' + XAI_MODEL = 'grok-4.3' AI_REVIEW_FAIL_ON_FINDINGS = 'false' } diff --git a/README.md b/README.md index d3fb24f..ef14077 100644 --- a/README.md +++ b/README.md @@ -2,22 +2,26 @@ ## Jenkins AI Review -The Jenkins pipeline can run an OpenAI-powered review and report back to Gitea. +The Jenkins pipeline can run an x.ai-powered review and report back to Gitea. Required Jenkins secrets and variables: -- `OPENAI_API_KEY` +- `XAI_API_KEY` - `GITEA_TOKEN` - `GITEA_URL` Optional variables: -- `CODEX_MODEL` +- `AI_REVIEW_MODEL` +- `XAI_MODEL` +- `XAI_BASE_URL` - `AI_REVIEW_FAIL_ON_FINDINGS` - `GITEA_REPO_OWNER` - `GITEA_REPO_NAME` - `GITEA_PR_NUMBER` +The default review model is `grok-4.3`, using the OpenAI Python SDK against `https://api.x.ai/v1`. + ## Build ```bash diff --git a/scripts/ai_code_review.py b/scripts/ai_code_review.py index fb395db..bb0cd9c 100644 --- a/scripts/ai_code_review.py +++ b/scripts/ai_code_review.py @@ -190,12 +190,19 @@ def request_review(diff_text: str) -> str: "The 'openai' package is not installed. Install it with 'pip install openai'." ) from exc - api_key = os.getenv("OPENAI_API_KEY") + api_key = os.getenv("XAI_API_KEY") or os.getenv("OPENAI_API_KEY") if not api_key: - raise RuntimeError("OPENAI_API_KEY is not set.") + raise RuntimeError("XAI_API_KEY is not set.") - model = os.getenv("CODEX_MODEL") or os.getenv("OPENAI_MODEL") or "gpt-4.1" - client = OpenAI(api_key=api_key) + model = ( + os.getenv("AI_REVIEW_MODEL") + or os.getenv("XAI_MODEL") + or os.getenv("CODEX_MODEL") + or os.getenv("OPENAI_MODEL") + or "grok-4.3" + ) + base_url = os.getenv("XAI_BASE_URL") or "https://api.x.ai/v1" + client = OpenAI(api_key=api_key, base_url=base_url) response = client.responses.create( model=model,