mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-06 02:48:13 +00:00
* feat(dev): seed linked tracing and spend fixtures * chore(dev): use OpenAI model in tracing config * chore(dev): align tracing credentials with UI E2E * fix(dev): update fixture seeder query scope * feat(dev): seed linked tracing and spend fixtures * chore(dev): use OpenAI model in tracing config * chore(dev): align tracing credentials with UI E2E * fix(dev): update fixture seeder query scope * wip * wip * wip * chore(trace): checkpoint ongoing Rust migration * refactor(trace): group Python bridge under trace package * refactor(traces): read span conventions through a Convention trait Each span format (Claude Code, LangSmith, OpenInference, gen_ai) now lives under normalize/convention/ as a unit struct implementing Convention, owning both its detection and its extraction. Precedence is one ordered registry instead of an if-chain in mod.rs that reached into each module differently. The modules now share one way to read attributes: present() for the first non-empty key and Payload for a text that also reports the key it consumed, replacing three different idioms and the &mut Vec threaded through payload readers. Instrumentation::adjust returns a new Extraction instead of mutating one, with each SDK rule as its own function, and the LangChain middleware suffix list exists once. * feat(trace): export Rust-owned wire schemas and enforce contract bounds * fix(trace): bound quoted counts in ClickHouse wire schemas * feat(trace): generate Python wire contracts with datamodel-code-generator * test(trace): validate migrated callers and generated contracts at the native boundary * refactor(traces): rename normalization convention to format * fix(traces): reconcile spend evidence and preserve unknown costs * feat(traces): normalize additional telemetry formats * test(traces): cover captured normalization fixtures * refactor(traces): isolate SDK normalization rules * feat(tracing): seed all trace exports for local dashboard * fix(clickhouse): preserve custom LiteLLM request metadata * docs(traces): define normalization module boundaries * docs(traces): define resolution and OTLP boundaries * fix(ui): normalize nullable trace message names * refactor(traces): split resolver modules and cover resolution behavior * test(traces): replace normalization snapshots with behavior assertions * fix(ui): align dashboard API contracts with generated types * refactor(traces): type normalization and storage boundaries * fix(traces): seed captured SDK spend and preserve provider identities * wip * test(traces): verify guide discovery and content ordering --------- Co-authored-by: Yujong Lee <yujong@berri.ai> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
192 lines
6.5 KiB
YAML
192 lines
6.5 KiB
YAML
name: LiteLLM Rust
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- "litellm-rust/**"
|
|
- "litellm/rust_bridge/**"
|
|
- "scripts/generate_trace_types.py"
|
|
- "scripts/trace_codegen/**"
|
|
- "tests/test_litellm_rust/**"
|
|
- "litellm/integrations/custom_logger.py"
|
|
- "litellm/litellm_core_utils/litellm_logging.py"
|
|
- "litellm/litellm_core_utils/logging_worker.py"
|
|
- "litellm/proxy/guardrails/**"
|
|
- "litellm/utils.py"
|
|
- "litellm/ocr/**"
|
|
- "litellm/llms/base_llm/ocr/**"
|
|
- "litellm/llms/custom_httpx/llm_http_handler.py"
|
|
- "tests/test_litellm/conftest.py"
|
|
- "Makefile"
|
|
- ".cargo/**"
|
|
- "pyproject.toml"
|
|
- "uv.lock"
|
|
- "rust-toolchain.toml"
|
|
- ".github/actions/setup-uv-with-retries/**"
|
|
- ".github/scripts/smoke_test_native_wheel.py"
|
|
- ".github/scripts/verify_linux_native_wheel.py"
|
|
- "tests/unit/rust_bridge/native_route_wheel_test.py"
|
|
- ".github/workflows/test-rust.yml"
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- "litellm_**"
|
|
paths:
|
|
- "litellm-rust/**"
|
|
- "litellm/rust_bridge/**"
|
|
- "scripts/generate_trace_types.py"
|
|
- "scripts/trace_codegen/**"
|
|
- "tests/test_litellm_rust/**"
|
|
- "litellm/integrations/custom_logger.py"
|
|
- "litellm/litellm_core_utils/litellm_logging.py"
|
|
- "litellm/litellm_core_utils/logging_worker.py"
|
|
- "litellm/proxy/guardrails/**"
|
|
- "litellm/utils.py"
|
|
- "litellm/ocr/**"
|
|
- "litellm/llms/base_llm/ocr/**"
|
|
- "litellm/llms/custom_httpx/llm_http_handler.py"
|
|
- "tests/test_litellm/conftest.py"
|
|
- "Makefile"
|
|
- ".cargo/**"
|
|
- "pyproject.toml"
|
|
- "uv.lock"
|
|
- "rust-toolchain.toml"
|
|
- ".github/actions/setup-uv-with-retries/**"
|
|
- ".github/scripts/smoke_test_native_wheel.py"
|
|
- ".github/scripts/verify_linux_native_wheel.py"
|
|
- "tests/unit/rust_bridge/native_route_wheel_test.py"
|
|
- ".github/workflows/test-rust.yml"
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
|
|
jobs:
|
|
rust-lint:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 15
|
|
defaults:
|
|
run:
|
|
working-directory: litellm-rust
|
|
steps:
|
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- run: rustup toolchain install --no-self-update
|
|
|
|
- run: cargo fmt --all --check
|
|
|
|
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
|
with:
|
|
workspaces: litellm-rust
|
|
cache-on-failure: true
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
|
|
- run: cargo clippy --workspace --all-targets --locked --features litellm-traces/schema,litellm-traces-clickhouse/schema -- -D warnings
|
|
|
|
rust-test:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
defaults:
|
|
run:
|
|
working-directory: litellm-rust
|
|
steps:
|
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- uses: ./.github/actions/setup-uv-with-retries
|
|
with:
|
|
version: "0.10.9"
|
|
|
|
- name: Install Python dependencies for the bridge tests
|
|
working-directory: .
|
|
run: |
|
|
uv sync --frozen --no-install-project
|
|
echo "PYTHONPATH=$PWD/.venv/lib/$(ls .venv/lib)/site-packages" >> "$GITHUB_ENV"
|
|
|
|
- run: rustup toolchain install --no-self-update
|
|
|
|
- uses: taiki-e/install-action@d438492cf8a250514fa2d34b30bc3c0dc37c65ff # v2.87.8
|
|
with:
|
|
tool: cargo-nextest@0.9.143
|
|
|
|
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
|
with:
|
|
workspaces: litellm-rust
|
|
cache-on-failure: true
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
|
|
- name: Check generated trace contracts
|
|
working-directory: .
|
|
run: uv run scripts/generate_trace_types.py --check
|
|
|
|
- run: cargo nextest run --workspace --locked --features litellm-traces/schema,litellm-traces-clickhouse/schema
|
|
|
|
- run: cargo test --workspace --doc --locked
|
|
|
|
- name: Test token counter feature combinations
|
|
run: |
|
|
for features in '' fast huggingface tiktoken fast,huggingface fast,tiktoken huggingface,tiktoken fast,huggingface,tiktoken; do
|
|
cargo test -p litellm-token-counter --locked --no-default-features --features "$features"
|
|
cargo check -p litellm-python-bridge --locked --no-default-features --features "abi3${features:+,$features}"
|
|
done
|
|
|
|
- name: Test secret manager feature combinations
|
|
run: |
|
|
cargo test -p litellm-auth-gcp --locked --no-default-features
|
|
for features in '' aws google hashicorp azure cyberark aws,google aws,azure google,azure aws,google,azure aws,google,cyberark aws,google,azure,cyberark aws,google,hashicorp,azure,cyberark; do
|
|
cargo test -p litellm-secrets --locked --no-default-features --features "$features"
|
|
done
|
|
|
|
rust-wheel:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
steps:
|
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- uses: ./.github/actions/setup-uv-with-retries
|
|
with:
|
|
version: "0.10.9"
|
|
|
|
- run: rustup toolchain install --no-self-update
|
|
|
|
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
|
with:
|
|
workspaces: litellm-rust
|
|
cache-on-failure: true
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
|
|
- run: uv build --wheel --out-dir dist
|
|
|
|
- run: python .github/scripts/verify_linux_native_wheel.py dist/*.whl
|
|
env:
|
|
RELEASE_WHEEL_COMMIT_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
|
|
- run: python tests/unit/rust_bridge/native_route_wheel_test.py dist/*.whl
|
|
|
|
- name: Run pytest tests/test_litellm_rust with the compiled extension
|
|
run: make test-rust-extension
|
|
|
|
- run: >-
|
|
uv build --wheel --out-dir panic-dist
|
|
--config-setting "maturin.build-args=--features panic-test,extension-module"
|
|
|
|
- run: python .github/scripts/smoke_test_native_wheel.py panic-dist/*.whl
|