From ea472267881743014e42634ff85fb595a2d3fc3c Mon Sep 17 00:00:00 2001 From: mubashir1osmani Date: Thu, 30 Jul 2026 16:06:33 -0700 Subject: [PATCH 1/3] ci: add fork GHCR publish workflow for Concourse releases --- .github/workflows/publish-ghcr.yml | 129 +++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 .github/workflows/publish-ghcr.yml diff --git a/.github/workflows/publish-ghcr.yml b/.github/workflows/publish-ghcr.yml new file mode 100644 index 00000000000..7530e85116a --- /dev/null +++ b/.github/workflows/publish-ghcr.yml @@ -0,0 +1,129 @@ +# Build and push LiteLLM images to THIS fork's GHCR. +name: Publish GHCR (fork) + +on: + workflow_dispatch: + inputs: + image_tag: + description: Primary image tag (e.g. dev, rc, short sha) + required: true + type: string + default: dev + git_ref: + description: Git ref to build. Empty uses the branch the workflow runs on. + required: false + type: string + default: "" + variants: + description: "Comma-separated: litellm,database,non_root" + required: false + type: string + default: litellm + dry_run: + description: Build only; skip push + required: false + type: boolean + default: false + +permissions: + contents: read + packages: write + +concurrency: + group: publish-ghcr-${{ github.event.inputs.image_tag }} + cancel-in-progress: false + +jobs: + publish: + name: Build and push ${{ matrix.name }} + runs-on: ubuntu-latest + timeout-minutes: 180 + strategy: + fail-fast: false + matrix: + include: + - name: litellm + dockerfile: Dockerfile + image_suffix: litellm + - name: database + dockerfile: docker/Dockerfile.database + image_suffix: litellm-database + - name: non_root + dockerfile: docker/Dockerfile.non_root + image_suffix: litellm-non_root + steps: + - name: Select variant + id: pick + shell: bash + run: | + set -euo pipefail + wanted="${{ github.event.inputs.variants }}" + name="${{ matrix.name }}" + if [[ ",${wanted}," == *",${name},"* ]] || [[ "${wanted}" == "${name}" ]]; then + echo "run=true" >> "$GITHUB_OUTPUT" + else + echo "run=false" >> "$GITHUB_OUTPUT" + fi + + - name: Checkout + if: steps.pick.outputs.run == 'true' + uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.git_ref != '' && github.event.inputs.git_ref || github.ref }} + fetch-depth: 1 + + - name: Set up Docker Buildx + if: steps.pick.outputs.run == 'true' + uses: docker/setup-buildx-action@v3 + + - name: Log in to GHCR + if: steps.pick.outputs.run == 'true' && github.event.inputs.dry_run != 'true' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Image metadata + if: steps.pick.outputs.run == 'true' + id: meta + shell: bash + run: | + set -euo pipefail + owner="${GITHUB_REPOSITORY_OWNER,,}" + tag="${{ github.event.inputs.image_tag }}" + sha="$(git rev-parse --short HEAD)" + image="ghcr.io/${owner}/${{ matrix.image_suffix }}" + { + echo "image=${image}" + echo "tags=${image}:${tag},${image}:${sha}" + echo "sha=${sha}" + } >> "$GITHUB_OUTPUT" + echo "Will publish: ${image}:${tag} and ${image}:${sha}" + + - name: Build and push + if: steps.pick.outputs.run == 'true' + uses: docker/build-push-action@v6 + with: + context: . + file: ${{ matrix.dockerfile }} + push: ${{ github.event.inputs.dry_run != 'true' }} + tags: ${{ steps.meta.outputs.tags }} + platforms: linux/amd64 + provenance: false + sbom: false + cache-from: type=gha,scope=${{ matrix.name }} + cache-to: type=gha,mode=max,scope=${{ matrix.name }} + + - name: Summary + if: steps.pick.outputs.run == 'true' + shell: bash + run: | + { + echo "### ${{ matrix.name }}" + echo "" + echo "- image: \`${{ steps.meta.outputs.image }}\`" + echo "- tags: \`${{ steps.meta.outputs.tags }}\`" + echo "- dry_run: \`${{ github.event.inputs.dry_run }}\`" + echo "- sha: \`${{ steps.meta.outputs.sha }}\`" + } >> "$GITHUB_STEP_SUMMARY" From 4d43080a74e7e9d5ed61e616e2a5f08bb9da7301 Mon Sep 17 00:00:00 2001 From: mubashir1osmani Date: Sat, 1 Aug 2026 12:34:25 -0700 Subject: [PATCH 2/3] fix(pricing): apply OpenAI's gpt-5.6 terra/luna cut to Azure cost map OpenAI cut Terra 20% and Luna 80% on 2026-07-30; openai and bedrock_mantle entries already match. Azure global and us/eu data-zone terra/luna rows still used the pre-cut rates, so spend tracking over-billed those Azure deployments. Sol is unchanged. Cache-read, priority, and long-context fields scale with the same multipliers already used for azure gpt-5.6. --- ...odel_prices_and_context_window_backup.json | 120 +++++++++--------- model_prices_and_context_window.json | 120 +++++++++--------- .../llm_cost_calc/test_llm_cost_calc_utils.py | 8 +- 3 files changed, 124 insertions(+), 124 deletions(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 07f04136bd0..ebb1290ca57 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -6425,23 +6425,23 @@ "supports_minimal_reasoning_effort": false }, "azure/gpt-5.6-terra": { - "cache_read_input_token_cost": 2.5e-07, - "cache_read_input_token_cost_above_272k_tokens": 5e-07, - "cache_read_input_token_cost_priority": 5e-07, - "cache_read_input_token_cost_above_272k_tokens_priority": 1e-06, - "input_cost_per_token": 2.5e-06, - "input_cost_per_token_above_272k_tokens": 5e-06, - "input_cost_per_token_priority": 5e-06, - "input_cost_per_token_above_272k_tokens_priority": 1e-05, + "cache_read_input_token_cost": 2e-07, + "cache_read_input_token_cost_above_272k_tokens": 4e-07, + "cache_read_input_token_cost_priority": 4e-07, + "cache_read_input_token_cost_above_272k_tokens_priority": 8e-07, + "input_cost_per_token": 2e-06, + "input_cost_per_token_above_272k_tokens": 4e-06, + "input_cost_per_token_priority": 4e-06, + "input_cost_per_token_above_272k_tokens_priority": 8e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, - "output_cost_per_token_above_272k_tokens": 2.25e-05, - "output_cost_per_token_priority": 3e-05, - "output_cost_per_token_above_272k_tokens_priority": 4.5e-05, + "output_cost_per_token": 1.2e-05, + "output_cost_per_token_above_272k_tokens": 1.8e-05, + "output_cost_per_token_priority": 2.4e-05, + "output_cost_per_token_above_272k_tokens_priority": 3.6e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6470,23 +6470,23 @@ "supports_minimal_reasoning_effort": false }, "azure/gpt-5.6-luna": { - "cache_read_input_token_cost": 1e-07, - "cache_read_input_token_cost_above_272k_tokens": 2e-07, - "cache_read_input_token_cost_priority": 2e-07, - "cache_read_input_token_cost_above_272k_tokens_priority": 4e-07, - "input_cost_per_token": 1e-06, - "input_cost_per_token_above_272k_tokens": 2e-06, - "input_cost_per_token_priority": 2e-06, - "input_cost_per_token_above_272k_tokens_priority": 4e-06, + "cache_read_input_token_cost": 2e-08, + "cache_read_input_token_cost_above_272k_tokens": 4e-08, + "cache_read_input_token_cost_priority": 4e-08, + "cache_read_input_token_cost_above_272k_tokens_priority": 8e-08, + "input_cost_per_token": 2e-07, + "input_cost_per_token_above_272k_tokens": 4e-07, + "input_cost_per_token_priority": 4e-07, + "input_cost_per_token_above_272k_tokens_priority": 8e-07, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 6e-06, - "output_cost_per_token_above_272k_tokens": 9e-06, - "output_cost_per_token_priority": 1.2e-05, - "output_cost_per_token_above_272k_tokens_priority": 1.8e-05, + "output_cost_per_token": 1.2e-06, + "output_cost_per_token_above_272k_tokens": 1.8e-06, + "output_cost_per_token_priority": 2.4e-06, + "output_cost_per_token_above_272k_tokens_priority": 3.6e-06, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6599,20 +6599,20 @@ "supports_minimal_reasoning_effort": false }, "azure/us/gpt-5.6-terra": { - "cache_read_input_token_cost": 2.75e-07, - "cache_read_input_token_cost_above_272k_tokens": 5.5e-07, - "cache_read_input_token_cost_priority": 6.875e-07, - "input_cost_per_token": 2.75e-06, - "input_cost_per_token_above_272k_tokens": 5.5e-06, - "input_cost_per_token_priority": 6.875e-06, + "cache_read_input_token_cost": 2.2e-07, + "cache_read_input_token_cost_above_272k_tokens": 4.4e-07, + "cache_read_input_token_cost_priority": 5.5e-07, + "input_cost_per_token": 2.2e-06, + "input_cost_per_token_above_272k_tokens": 4.4e-06, + "input_cost_per_token_priority": 5.5e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, - "output_cost_per_token_above_272k_tokens": 2.475e-05, - "output_cost_per_token_priority": 4.125e-05, + "output_cost_per_token": 1.32e-05, + "output_cost_per_token_above_272k_tokens": 1.98e-05, + "output_cost_per_token_priority": 3.3e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6641,20 +6641,20 @@ "supports_minimal_reasoning_effort": false }, "azure/us/gpt-5.6-luna": { - "cache_read_input_token_cost": 1.1e-07, - "cache_read_input_token_cost_above_272k_tokens": 2.2e-07, - "cache_read_input_token_cost_priority": 2.75e-07, - "input_cost_per_token": 1.1e-06, - "input_cost_per_token_above_272k_tokens": 2.2e-06, - "input_cost_per_token_priority": 2.75e-06, + "cache_read_input_token_cost": 2.2e-08, + "cache_read_input_token_cost_above_272k_tokens": 4.4e-08, + "cache_read_input_token_cost_priority": 5.5e-08, + "input_cost_per_token": 2.2e-07, + "input_cost_per_token_above_272k_tokens": 4.4e-07, + "input_cost_per_token_priority": 5.5e-07, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 6.6e-06, - "output_cost_per_token_above_272k_tokens": 9.9e-06, - "output_cost_per_token_priority": 1.65e-05, + "output_cost_per_token": 1.32e-06, + "output_cost_per_token_above_272k_tokens": 1.98e-06, + "output_cost_per_token_priority": 3.3e-06, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6767,20 +6767,20 @@ "supports_minimal_reasoning_effort": false }, "azure/eu/gpt-5.6-terra": { - "cache_read_input_token_cost": 2.75e-07, - "cache_read_input_token_cost_above_272k_tokens": 5.5e-07, - "cache_read_input_token_cost_priority": 6.875e-07, - "input_cost_per_token": 2.75e-06, - "input_cost_per_token_above_272k_tokens": 5.5e-06, - "input_cost_per_token_priority": 6.875e-06, + "cache_read_input_token_cost": 2.2e-07, + "cache_read_input_token_cost_above_272k_tokens": 4.4e-07, + "cache_read_input_token_cost_priority": 5.5e-07, + "input_cost_per_token": 2.2e-06, + "input_cost_per_token_above_272k_tokens": 4.4e-06, + "input_cost_per_token_priority": 5.5e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, - "output_cost_per_token_above_272k_tokens": 2.475e-05, - "output_cost_per_token_priority": 4.125e-05, + "output_cost_per_token": 1.32e-05, + "output_cost_per_token_above_272k_tokens": 1.98e-05, + "output_cost_per_token_priority": 3.3e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6809,20 +6809,20 @@ "supports_minimal_reasoning_effort": false }, "azure/eu/gpt-5.6-luna": { - "cache_read_input_token_cost": 1.1e-07, - "cache_read_input_token_cost_above_272k_tokens": 2.2e-07, - "cache_read_input_token_cost_priority": 2.75e-07, - "input_cost_per_token": 1.1e-06, - "input_cost_per_token_above_272k_tokens": 2.2e-06, - "input_cost_per_token_priority": 2.75e-06, + "cache_read_input_token_cost": 2.2e-08, + "cache_read_input_token_cost_above_272k_tokens": 4.4e-08, + "cache_read_input_token_cost_priority": 5.5e-08, + "input_cost_per_token": 2.2e-07, + "input_cost_per_token_above_272k_tokens": 4.4e-07, + "input_cost_per_token_priority": 5.5e-07, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 6.6e-06, - "output_cost_per_token_above_272k_tokens": 9.9e-06, - "output_cost_per_token_priority": 1.65e-05, + "output_cost_per_token": 1.32e-06, + "output_cost_per_token_above_272k_tokens": 1.98e-06, + "output_cost_per_token_priority": 3.3e-06, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 346f613ea3e..f07f245433d 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -6425,23 +6425,23 @@ "supports_minimal_reasoning_effort": false }, "azure/gpt-5.6-terra": { - "cache_read_input_token_cost": 2.5e-07, - "cache_read_input_token_cost_above_272k_tokens": 5e-07, - "cache_read_input_token_cost_priority": 5e-07, - "cache_read_input_token_cost_above_272k_tokens_priority": 1e-06, - "input_cost_per_token": 2.5e-06, - "input_cost_per_token_above_272k_tokens": 5e-06, - "input_cost_per_token_priority": 5e-06, - "input_cost_per_token_above_272k_tokens_priority": 1e-05, + "cache_read_input_token_cost": 2e-07, + "cache_read_input_token_cost_above_272k_tokens": 4e-07, + "cache_read_input_token_cost_priority": 4e-07, + "cache_read_input_token_cost_above_272k_tokens_priority": 8e-07, + "input_cost_per_token": 2e-06, + "input_cost_per_token_above_272k_tokens": 4e-06, + "input_cost_per_token_priority": 4e-06, + "input_cost_per_token_above_272k_tokens_priority": 8e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, - "output_cost_per_token_above_272k_tokens": 2.25e-05, - "output_cost_per_token_priority": 3e-05, - "output_cost_per_token_above_272k_tokens_priority": 4.5e-05, + "output_cost_per_token": 1.2e-05, + "output_cost_per_token_above_272k_tokens": 1.8e-05, + "output_cost_per_token_priority": 2.4e-05, + "output_cost_per_token_above_272k_tokens_priority": 3.6e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6470,23 +6470,23 @@ "supports_minimal_reasoning_effort": false }, "azure/gpt-5.6-luna": { - "cache_read_input_token_cost": 1e-07, - "cache_read_input_token_cost_above_272k_tokens": 2e-07, - "cache_read_input_token_cost_priority": 2e-07, - "cache_read_input_token_cost_above_272k_tokens_priority": 4e-07, - "input_cost_per_token": 1e-06, - "input_cost_per_token_above_272k_tokens": 2e-06, - "input_cost_per_token_priority": 2e-06, - "input_cost_per_token_above_272k_tokens_priority": 4e-06, + "cache_read_input_token_cost": 2e-08, + "cache_read_input_token_cost_above_272k_tokens": 4e-08, + "cache_read_input_token_cost_priority": 4e-08, + "cache_read_input_token_cost_above_272k_tokens_priority": 8e-08, + "input_cost_per_token": 2e-07, + "input_cost_per_token_above_272k_tokens": 4e-07, + "input_cost_per_token_priority": 4e-07, + "input_cost_per_token_above_272k_tokens_priority": 8e-07, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 6e-06, - "output_cost_per_token_above_272k_tokens": 9e-06, - "output_cost_per_token_priority": 1.2e-05, - "output_cost_per_token_above_272k_tokens_priority": 1.8e-05, + "output_cost_per_token": 1.2e-06, + "output_cost_per_token_above_272k_tokens": 1.8e-06, + "output_cost_per_token_priority": 2.4e-06, + "output_cost_per_token_above_272k_tokens_priority": 3.6e-06, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6599,20 +6599,20 @@ "supports_minimal_reasoning_effort": false }, "azure/us/gpt-5.6-terra": { - "cache_read_input_token_cost": 2.75e-07, - "cache_read_input_token_cost_above_272k_tokens": 5.5e-07, - "cache_read_input_token_cost_priority": 6.875e-07, - "input_cost_per_token": 2.75e-06, - "input_cost_per_token_above_272k_tokens": 5.5e-06, - "input_cost_per_token_priority": 6.875e-06, + "cache_read_input_token_cost": 2.2e-07, + "cache_read_input_token_cost_above_272k_tokens": 4.4e-07, + "cache_read_input_token_cost_priority": 5.5e-07, + "input_cost_per_token": 2.2e-06, + "input_cost_per_token_above_272k_tokens": 4.4e-06, + "input_cost_per_token_priority": 5.5e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, - "output_cost_per_token_above_272k_tokens": 2.475e-05, - "output_cost_per_token_priority": 4.125e-05, + "output_cost_per_token": 1.32e-05, + "output_cost_per_token_above_272k_tokens": 1.98e-05, + "output_cost_per_token_priority": 3.3e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6641,20 +6641,20 @@ "supports_minimal_reasoning_effort": false }, "azure/us/gpt-5.6-luna": { - "cache_read_input_token_cost": 1.1e-07, - "cache_read_input_token_cost_above_272k_tokens": 2.2e-07, - "cache_read_input_token_cost_priority": 2.75e-07, - "input_cost_per_token": 1.1e-06, - "input_cost_per_token_above_272k_tokens": 2.2e-06, - "input_cost_per_token_priority": 2.75e-06, + "cache_read_input_token_cost": 2.2e-08, + "cache_read_input_token_cost_above_272k_tokens": 4.4e-08, + "cache_read_input_token_cost_priority": 5.5e-08, + "input_cost_per_token": 2.2e-07, + "input_cost_per_token_above_272k_tokens": 4.4e-07, + "input_cost_per_token_priority": 5.5e-07, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 6.6e-06, - "output_cost_per_token_above_272k_tokens": 9.9e-06, - "output_cost_per_token_priority": 1.65e-05, + "output_cost_per_token": 1.32e-06, + "output_cost_per_token_above_272k_tokens": 1.98e-06, + "output_cost_per_token_priority": 3.3e-06, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6767,20 +6767,20 @@ "supports_minimal_reasoning_effort": false }, "azure/eu/gpt-5.6-terra": { - "cache_read_input_token_cost": 2.75e-07, - "cache_read_input_token_cost_above_272k_tokens": 5.5e-07, - "cache_read_input_token_cost_priority": 6.875e-07, - "input_cost_per_token": 2.75e-06, - "input_cost_per_token_above_272k_tokens": 5.5e-06, - "input_cost_per_token_priority": 6.875e-06, + "cache_read_input_token_cost": 2.2e-07, + "cache_read_input_token_cost_above_272k_tokens": 4.4e-07, + "cache_read_input_token_cost_priority": 5.5e-07, + "input_cost_per_token": 2.2e-06, + "input_cost_per_token_above_272k_tokens": 4.4e-06, + "input_cost_per_token_priority": 5.5e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, - "output_cost_per_token_above_272k_tokens": 2.475e-05, - "output_cost_per_token_priority": 4.125e-05, + "output_cost_per_token": 1.32e-05, + "output_cost_per_token_above_272k_tokens": 1.98e-05, + "output_cost_per_token_priority": 3.3e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6809,20 +6809,20 @@ "supports_minimal_reasoning_effort": false }, "azure/eu/gpt-5.6-luna": { - "cache_read_input_token_cost": 1.1e-07, - "cache_read_input_token_cost_above_272k_tokens": 2.2e-07, - "cache_read_input_token_cost_priority": 2.75e-07, - "input_cost_per_token": 1.1e-06, - "input_cost_per_token_above_272k_tokens": 2.2e-06, - "input_cost_per_token_priority": 2.75e-06, + "cache_read_input_token_cost": 2.2e-08, + "cache_read_input_token_cost_above_272k_tokens": 4.4e-08, + "cache_read_input_token_cost_priority": 5.5e-08, + "input_cost_per_token": 2.2e-07, + "input_cost_per_token_above_272k_tokens": 4.4e-07, + "input_cost_per_token_priority": 5.5e-07, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 6.6e-06, - "output_cost_per_token_above_272k_tokens": 9.9e-06, - "output_cost_per_token_priority": 1.65e-05, + "output_cost_per_token": 1.32e-06, + "output_cost_per_token_above_272k_tokens": 1.98e-06, + "output_cost_per_token_priority": 3.3e-06, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", diff --git a/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py b/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py index fbdf9b64bc0..9145e5dc76d 100644 --- a/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py +++ b/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py @@ -757,11 +757,11 @@ def test_generic_cost_per_token_gpt56_terra_cache_costs_by_tier_and_context( [ ("azure/gpt-5.6", 5e-6, 3e-5, 5e-7), ("azure/gpt-5.6-sol", 5e-6, 3e-5, 5e-7), - ("azure/gpt-5.6-terra", 2.5e-6, 1.5e-5, 2.5e-7), - ("azure/gpt-5.6-luna", 1e-6, 6e-6, 1e-7), + ("azure/gpt-5.6-terra", 2e-6, 1.2e-5, 2e-7), + ("azure/gpt-5.6-luna", 2e-7, 1.2e-6, 2e-8), ("azure/us/gpt-5.6", 5.5e-6, 3.3e-5, 5.5e-7), - ("azure/eu/gpt-5.6-terra", 2.75e-6, 1.65e-5, 2.75e-7), - ("azure/eu/gpt-5.6-luna", 1.1e-6, 6.6e-6, 1.1e-7), + ("azure/eu/gpt-5.6-terra", 2.2e-6, 1.32e-5, 2.2e-7), + ("azure/eu/gpt-5.6-luna", 2.2e-7, 1.32e-6, 2.2e-8), ], ) def test_generic_cost_per_token_azure_gpt56( From 0de901abf79da2481e343a87c2e1e4a0579120a3 Mon Sep 17 00:00:00 2001 From: mubashir1osmani Date: Sat, 1 Aug 2026 12:43:41 -0700 Subject: [PATCH 3/3] chore: drop fork-only GHCR publish workflow from this branch That workflow is fork-local for Concourse and does not belong in the Azure pricing PR against BerriAI staging --- .github/workflows/publish-ghcr.yml | 129 ----------------------------- 1 file changed, 129 deletions(-) delete mode 100644 .github/workflows/publish-ghcr.yml diff --git a/.github/workflows/publish-ghcr.yml b/.github/workflows/publish-ghcr.yml deleted file mode 100644 index 7530e85116a..00000000000 --- a/.github/workflows/publish-ghcr.yml +++ /dev/null @@ -1,129 +0,0 @@ -# Build and push LiteLLM images to THIS fork's GHCR. -name: Publish GHCR (fork) - -on: - workflow_dispatch: - inputs: - image_tag: - description: Primary image tag (e.g. dev, rc, short sha) - required: true - type: string - default: dev - git_ref: - description: Git ref to build. Empty uses the branch the workflow runs on. - required: false - type: string - default: "" - variants: - description: "Comma-separated: litellm,database,non_root" - required: false - type: string - default: litellm - dry_run: - description: Build only; skip push - required: false - type: boolean - default: false - -permissions: - contents: read - packages: write - -concurrency: - group: publish-ghcr-${{ github.event.inputs.image_tag }} - cancel-in-progress: false - -jobs: - publish: - name: Build and push ${{ matrix.name }} - runs-on: ubuntu-latest - timeout-minutes: 180 - strategy: - fail-fast: false - matrix: - include: - - name: litellm - dockerfile: Dockerfile - image_suffix: litellm - - name: database - dockerfile: docker/Dockerfile.database - image_suffix: litellm-database - - name: non_root - dockerfile: docker/Dockerfile.non_root - image_suffix: litellm-non_root - steps: - - name: Select variant - id: pick - shell: bash - run: | - set -euo pipefail - wanted="${{ github.event.inputs.variants }}" - name="${{ matrix.name }}" - if [[ ",${wanted}," == *",${name},"* ]] || [[ "${wanted}" == "${name}" ]]; then - echo "run=true" >> "$GITHUB_OUTPUT" - else - echo "run=false" >> "$GITHUB_OUTPUT" - fi - - - name: Checkout - if: steps.pick.outputs.run == 'true' - uses: actions/checkout@v4 - with: - ref: ${{ github.event.inputs.git_ref != '' && github.event.inputs.git_ref || github.ref }} - fetch-depth: 1 - - - name: Set up Docker Buildx - if: steps.pick.outputs.run == 'true' - uses: docker/setup-buildx-action@v3 - - - name: Log in to GHCR - if: steps.pick.outputs.run == 'true' && github.event.inputs.dry_run != 'true' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Image metadata - if: steps.pick.outputs.run == 'true' - id: meta - shell: bash - run: | - set -euo pipefail - owner="${GITHUB_REPOSITORY_OWNER,,}" - tag="${{ github.event.inputs.image_tag }}" - sha="$(git rev-parse --short HEAD)" - image="ghcr.io/${owner}/${{ matrix.image_suffix }}" - { - echo "image=${image}" - echo "tags=${image}:${tag},${image}:${sha}" - echo "sha=${sha}" - } >> "$GITHUB_OUTPUT" - echo "Will publish: ${image}:${tag} and ${image}:${sha}" - - - name: Build and push - if: steps.pick.outputs.run == 'true' - uses: docker/build-push-action@v6 - with: - context: . - file: ${{ matrix.dockerfile }} - push: ${{ github.event.inputs.dry_run != 'true' }} - tags: ${{ steps.meta.outputs.tags }} - platforms: linux/amd64 - provenance: false - sbom: false - cache-from: type=gha,scope=${{ matrix.name }} - cache-to: type=gha,mode=max,scope=${{ matrix.name }} - - - name: Summary - if: steps.pick.outputs.run == 'true' - shell: bash - run: | - { - echo "### ${{ matrix.name }}" - echo "" - echo "- image: \`${{ steps.meta.outputs.image }}\`" - echo "- tags: \`${{ steps.meta.outputs.tags }}\`" - echo "- dry_run: \`${{ github.event.inputs.dry_run }}\`" - echo "- sha: \`${{ steps.meta.outputs.sha }}\`" - } >> "$GITHUB_STEP_SUMMARY"