diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0b21c8f2..f0dbdd45 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: lint: timeout-minutes: 10 name: lint - runs-on: ${{ github.repository == 'stainless-sdks/retell-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: 'ubuntu-latest' if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -44,7 +44,7 @@ jobs: permissions: contents: read id-token: write - runs-on: ${{ github.repository == 'stainless-sdks/retell-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: 'ubuntu-latest' steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -64,7 +64,7 @@ jobs: - name: Get GitHub OIDC Token if: |- - github.repository == 'stainless-sdks/retell-python' && + github.repository == 'RetellAI/retell-python-sdk-staging' && !startsWith(github.ref, 'refs/heads/stl/') id: github-oidc uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 @@ -73,7 +73,7 @@ jobs: - name: Upload tarball if: |- - github.repository == 'stainless-sdks/retell-python' && + github.repository == 'RetellAI/retell-python-sdk-staging' && !startsWith(github.ref, 'refs/heads/stl/') env: URL: https://pkg.stainless.com/s @@ -84,7 +84,7 @@ jobs: test: timeout-minutes: 10 name: test - runs-on: ${{ github.repository == 'stainless-sdks/retell-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: 'ubuntu-latest' if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml index f5472e98..b3231f69 100644 --- a/.github/workflows/release-doctor.yml +++ b/.github/workflows/release-doctor.yml @@ -12,6 +12,17 @@ jobs: if: github.repository == 'RetellAI/retell-python-sdk' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') steps: + - name: Validate SDK GitHub App access + uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 + with: + client-id: ${{ secrets.DOCS_SYNC_APP_CLIENT_ID }} + private-key: ${{ secrets.DOCS_MANAGER_PVT_KEY }} + owner: ${{ github.repository_owner }} + repositories: retell-python-sdk + permission-contents: write + permission-pull-requests: write + permission-issues: write + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Check release environment diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 16debdb2..6ea68f12 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -1,20 +1,61 @@ name: Release Please + on: push: branches: - main + schedule: + - cron: '7,22,37,52 * * * *' + workflow_dispatch: + +concurrency: + group: sdk-release-please + cancel-in-progress: false -permissions: - contents: write - pull-requests: write +permissions: {} jobs: release-please: - if: github.repository == 'RetellAI/retell-python-sdk' + name: release please runs-on: ubuntu-latest + if: github.repository == 'RetellAI/retell-python-sdk' && github.ref == 'refs/heads/main' && vars.SDK_RELEASES_ENABLED == 'true' + + timeout-minutes: 10 steps: + - name: Mint SDK automation token + id: sdk-token + uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 + with: + client-id: ${{ secrets.DOCS_SYNC_APP_CLIENT_ID }} + private-key: ${{ secrets.DOCS_MANAGER_PVT_KEY }} + owner: ${{ github.repository_owner }} + repositories: | + docs + retell-typescript-sdk + retell-python-sdk + permission-contents: write + permission-pull-requests: write + permission-issues: write + + - name: Checkout shared release policy + uses: actions/checkout@v4 + with: + repository: RetellAI/docs + ref: main + path: .release-policy + token: ${{ steps.sdk-token.outputs.token }} + persist-credentials: false + + - name: Check whether release notes are frozen + id: policy + env: + GH_TOKEN: ${{ steps.sdk-token.outputs.token }} + run: python3 .release-policy/script/sdk_release_policy.py frozen --repo "${{ github.repository }}" + - uses: googleapis/release-please-action@5c625bfb5d1ff62eadeeb3772007f7f66fdcf071 # v4.4.1 id: release + if: steps.policy.outputs.frozen != 'true' with: - token: ${{ secrets.RELEASE_PLEASE_TOKEN }} + token: ${{ steps.sdk-token.outputs.token }} + skip-github-pull-request: ${{ steps.policy.outputs.refresh != 'true' }} diff --git a/.github/workflows/stlc-auto-merge.yml b/.github/workflows/stlc-auto-merge.yml new file mode 100644 index 00000000..54b523b5 --- /dev/null +++ b/.github/workflows/stlc-auto-merge.yml @@ -0,0 +1,172 @@ +name: Auto-merge SDK release PRs + +on: + pull_request_target: + types: [opened, synchronize, reopened, ready_for_review] + branches: [main] + workflow_run: + workflows: ['CI', 'Release Doctor'] + types: [completed] + schedule: + - cron: '*/15 * * * *' + workflow_dispatch: + inputs: + pr_number: + description: 'Optional PR number to evaluate' + required: false + release_now: + description: 'Bypass the 24-hour interval; all checks still apply' + type: boolean + default: false + +concurrency: + group: sdk-auto-merge + cancel-in-progress: false + +permissions: + contents: read + pull-requests: read + checks: read + statuses: read + actions: read + +jobs: + auto-merge: + if: github.repository == 'RetellAI/retell-python-sdk' && github.ref == 'refs/heads/main' && vars.SDK_RELEASES_ENABLED == 'true' + runs-on: ubuntu-latest + timeout-minutes: 10 + env: + GH_TOKEN: ${{ github.token }} + REPO: ${{ github.repository }} + steps: + - name: Mint SDK automation token + id: sdk-token + uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 + with: + client-id: ${{ secrets.DOCS_SYNC_APP_CLIENT_ID }} + private-key: ${{ secrets.DOCS_MANAGER_PVT_KEY }} + owner: ${{ github.repository_owner }} + repositories: | + docs + retell-typescript-sdk + retell-python-sdk + permission-contents: write + permission-pull-requests: write + + - name: Checkout shared release policy + uses: actions/checkout@v4 + with: + repository: RetellAI/docs + ref: main + path: .release-policy + token: ${{ steps.sdk-token.outputs.token }} + persist-credentials: false + + - name: Merge qualifying green PRs + shell: bash + env: + MERGE_TOKEN: ${{ steps.sdk-token.outputs.token }} + EVENT_NAME: ${{ github.event_name }} + EVENT_PR: ${{ github.event.pull_request.number }} + INPUT_PR: ${{ inputs.pr_number }} + RELEASE_NOW: ${{ inputs.release_now || false }} + SDK_ACTIONS_READ_TOKEN: ${{ github.token }} + run: | + set -euo pipefail + + if [ "$EVENT_NAME" = "pull_request_target" ]; then + numbers="$EVENT_PR" + elif [ "$EVENT_NAME" = "workflow_dispatch" ] && [ -n "$INPUT_PR" ]; then + numbers="$INPUT_PR" + else + numbers=$(gh pr list --repo "$REPO" --base main --state open --limit 1000 --json number --jq '.[].number') + fi + + while IFS= read -r pr; do + [ -n "$pr" ] || continue + if [[ ! "$pr" =~ ^[1-9][0-9]*$ ]]; then + echo "::error::Invalid PR number." + exit 1 + fi + echo "Evaluating PR #$pr" + pr_json=$(gh pr view "$pr" --repo "$REPO" --json state,title,isDraft,headRefName,headRefOid,headRepository,isCrossRepository,baseRefName,mergeStateStatus) + title=$(jq -r '.title' <<<"$pr_json") + is_draft=$(jq -r '.isDraft' <<<"$pr_json") + head_ref=$(jq -r '.headRefName' <<<"$pr_json") + head_sha=$(jq -r '.headRefOid' <<<"$pr_json") + head_repo=$(jq -r '.headRepository.nameWithOwner // ""' <<<"$pr_json") + is_cross_repository=$(jq -r '.isCrossRepository' <<<"$pr_json") + base_ref=$(jq -r '.baseRefName' <<<"$pr_json") + + if [ "$(jq -r .state <<<"$pr_json")" != "OPEN" ] || [ "$base_ref" != "main" ] || [ "$is_draft" = "true" ]; then + echo "Skipping PR #$pr: not a ready PR to main." + continue + fi + + if [ "$is_cross_repository" = "true" ] || [ "$head_repo" != "$REPO" ]; then + echo "Skipping PR #$pr: head branch is not in $REPO." + continue + fi + + merge_flag="" + if [ "$head_ref" = "stainless-release" ] && [ "$title" = "Release SDK updates" ]; then + merge_flag="--merge" + elif [[ "$head_ref" == release-please--* ]] && [[ "$title" == release:* ]]; then + merge_flag="--squash" + else + echo "Skipping PR #$pr: not an automated SDK release PR." + continue + fi + + ci_runs=$(gh api "/repos/$REPO/actions/workflows/ci.yml/runs?head_sha=$head_sha&event=push&per_page=1") + if ! jq -e '.workflow_runs[0] | .status == "completed" and .conclusion == "success"' <<<"$ci_runs" >/dev/null; then + echo "Skipping PR #$pr: push CI has not passed for $head_sha." + continue + fi + + check_pages=$(gh api --paginate --slurp "/repos/$REPO/commits/$head_sha/check-runs?filter=latest&per_page=100") + check_runs=$(jq '[.[].check_runs[] | select(.name != "auto-merge" or .app.slug != "github-actions")]' <<<"$check_pages") + check_count=$(jq 'length' <<<"$check_runs") + if [ "$check_count" -eq 0 ]; then + echo "Skipping PR #$pr: no check runs found yet." + continue + fi + + bad_checks=$(jq '[.[] | select(.status != "completed" or (.conclusion != "success" and .conclusion != "skipped"))] | length' <<<"$check_runs") + if [ "$bad_checks" -ne 0 ]; then + echo "Skipping PR #$pr: checks are pending or failed." + continue + fi + + statuses=$(gh api "/repos/$REPO/commits/$head_sha/status") + status_count=$(jq '.total_count' <<<"$statuses") + status_state=$(jq -r '.state' <<<"$statuses") + if [ "$status_count" -gt 0 ] && [ "$status_state" != "success" ]; then + echo "Skipping PR #$pr: commit statuses are $status_state." + continue + fi + + if [ "$merge_flag" = "--merge" ]; then + policy=$(GH_TOKEN="$MERGE_TOKEN" python3 .release-policy/script/sdk_release_policy.py frozen --repo "$REPO") + if grep -qx 'frozen=true' <<< "$policy"; then + echo "Skipping PR #$pr: finish the current version release first." + continue + fi + fi + + if [ "$merge_flag" = "--squash" ]; then + policy_args=(ready --repo "$REPO" --pr "$pr") + if [ "$EVENT_NAME" = "workflow_dispatch" ] && [ "$RELEASE_NOW" = "true" ]; then + policy_args+=(--force) + fi + policy=$(GH_TOKEN="$MERGE_TOKEN" python3 .release-policy/script/sdk_release_policy.py "${policy_args[@]}") + echo "$policy" + if ! grep -qx 'ready=true' <<< "$policy"; then + continue + fi + fi + + echo "Merging PR #$pr with ${merge_flag}." + GH_TOKEN="$MERGE_TOKEN" gh pr merge "$pr" --repo "$REPO" "$merge_flag" --delete-branch --match-head-commit "$head_sha" + echo "Merged PR #$pr." + done <<<"$numbers" diff --git a/.github/workflows/stlc-promote.yml b/.github/workflows/stlc-promote.yml deleted file mode 100644 index ec48c297..00000000 --- a/.github/workflows/stlc-promote.yml +++ /dev/null @@ -1,183 +0,0 @@ -name: Promote SDKs - -on: - push: - branches: [main] - -concurrency: - group: sdk-promotion - cancel-in-progress: false - -permissions: - contents: read - -jobs: - promote: - if: github.repository == 'RetellAI/retell-python-sdk-staging' - runs-on: ubuntu-latest - env: - PRODUCTION_REPO: RetellAI/retell-python-sdk - steps: - - name: Check out staging - uses: actions/checkout@v6 - with: - fetch-depth: 0 - persist-credentials: false - - - name: Mint SDK promotion token - id: sdk-token - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 - with: - client-id: ${{ secrets.DOCS_SYNC_APP_CLIENT_ID }} - private-key: ${{ secrets.DOCS_MANAGER_PVT_KEY }} - owner: ${{ github.repository_owner }} - repositories: retell-python-sdk - permission-contents: write - permission-pull-requests: write - - - name: Fetch production main - env: - GH_TOKEN: ${{ steps.sdk-token.outputs.token }} - run: | - set -euo pipefail - gh auth setup-git - git remote add production "https://github.com/${PRODUCTION_REPO}.git" - git fetch production main - - - name: Check if production is already in sync - id: diff - run: | - STAGING_SHA=$(git rev-parse origin/main) - PRODUCTION_SHA=$(git rev-parse production/main) - if [ "$STAGING_SHA" = "$PRODUCTION_SHA" ]; then - echo "Production is already at $STAGING_SHA. Nothing to release." - echo "synced=true" >> "$GITHUB_OUTPUT" - else - echo "synced=false" >> "$GITHUB_OUTPUT" - fi - - - name: Preserve production-owned files - if: steps.diff.outputs.synced == 'false' - run: | - git config user.name "stlc-bot" - git config user.email "stlc-bot@users.noreply.github.com" - git switch --force-create stainless-release origin/main - - git rm -r -f --ignore-unmatch .github/workflows - git checkout production/main -- .github/workflows - git rm -f --ignore-unmatch .github/workflows/stlc-promote.yml - - for release_path in \ - .release-please-manifest.json \ - CHANGELOG.md \ - pyproject.toml \ - src/retell/_version.py - do - if git cat-file -e "production/main:${release_path}" 2>/dev/null; then - git checkout production/main -- "${release_path}" - else - git rm -f --ignore-unmatch "${release_path}" - fi - done - - if ! git diff --quiet HEAD -- \ - .github/workflows \ - .release-please-manifest.json \ - CHANGELOG.md \ - pyproject.toml \ - src/retell/_version.py - then - git add \ - .github/workflows \ - .release-please-manifest.json \ - CHANGELOG.md \ - pyproject.toml \ - src/retell/_version.py - git commit -m "chore: preserve production workflow files" - fi - - - name: Check whether promotion is needed - if: steps.diff.outputs.synced == 'false' - id: promotion - run: | - set -euo pipefail - commit_messages=$(git log --format=%B production/main..HEAD) - # Production-only changes survive the merge and must not count as SDK updates. - merged_tree=$(git merge-tree --write-tree production/main HEAD) - if git diff --quiet production/main "$merged_tree" && \ - ! grep -Eq '^Release-As: [0-9]+\.[0-9]+\.[0-9]+([+-][[:alnum:].-]+)?[[:space:]]*$' <<< "$commit_messages" - then - echo "Prepared SDK matches production and has no reserved release; nothing to promote." - echo "needed=false" >> "$GITHUB_OUTPUT" - else - echo "needed=true" >> "$GITHUB_OUTPUT" - fi - - - name: Push release branch on production - if: steps.promotion.outputs.needed == 'true' - env: - GH_TOKEN: ${{ steps.sdk-token.outputs.token }} - run: | - set -euo pipefail - base_sha=$(git rev-parse production/main) - git fetch production main - if [ "$(git rev-parse production/main)" != "$base_sha" ]; then - echo "::error::Production main changed during promotion; rerun against the latest main." - exit 1 - fi - git fetch production "+refs/heads/stainless-release:refs/remotes/production/stainless-release" || true - git push --force-with-lease production HEAD:refs/heads/stainless-release - - - name: Open or update the release PR on production - if: steps.promotion.outputs.needed == 'true' - env: - GH_TOKEN: ${{ steps.sdk-token.outputs.token }} - APP_SLUG: ${{ steps.sdk-token.outputs.app-slug }} - run: | - set -euo pipefail - log_file="$RUNNER_TEMP/sdk-commits.txt" - git log --format=%B production/main..HEAD > "$log_file" - handles=$(sed -n 's/^cc //p' "$log_file" | grep -oE '@[A-Za-z0-9][A-Za-z0-9-]*' | sort -u | head -5 | paste -sd' ' - || true) - body_file="$RUNNER_TEMP/sdk-release-pr.md" - removals=$(awk '/^BREAKING CHANGE:/ { print; while (getline > 0 && NF) print }' "$log_file") - { - printf 'Updates the generated SDK from the coordinated docs build.\n\n' - printf 'Source changes:\n' - git log --format='- %s' production/main..HEAD | sed '/^- chore: preserve production workflow files$/d' - sed -n 's|^Source: RetellAI/docs@\([a-f0-9]\{40\}\)$|- https://github.com/RetellAI/docs/commit/\1|p; /^Backend changes: /p; /^- .*https:\/\/github.com\/RetellAI\/retell-backend\/pull\/[0-9]/p' "$log_file" | sort -u - printf '\nSDK versions reserved by these builds:\n' - sed -n 's/^Release-As: /- /p' "$log_file" | sort -Vu - if [ -n "$removals" ]; then printf '\nRemoved SDK methods:\n%s\n' "$removals"; fi - printf '\nValidation: auto-merge waits for SDK CI and all PR checks on the current commit.\n' - printf 'Promotion workflow: https://github.com/%s/actions/runs/%s\n' "$GITHUB_REPOSITORY" "$GITHUB_RUN_ID" - if [ -n "$handles" ]; then printf '\ncc %s\n' "$handles"; fi - } > "$body_file" - EXISTING_PR=$(gh pr list --repo "$PRODUCTION_REPO" --head stainless-release --state open \ - --json number --jq '.[0].number // empty') - if [ -n "$EXISTING_PR" ]; then - author=$(gh pr view "$EXISTING_PR" --repo "$PRODUCTION_REPO" --json author --jq '.author.login') - if [ "$author" != "${APP_SLUG}[bot]" ] && [ "$author" != "app/${APP_SLUG}" ]; then - gh pr close "$EXISTING_PR" --repo "$PRODUCTION_REPO" \ - --comment "The GitHub App will replace this promotion PR so future updates use the bot identity." - EXISTING_PR="" - fi - fi - if [ -z "$EXISTING_PR" ]; then - gh pr create --repo "$PRODUCTION_REPO" --base main --head stainless-release \ - --title "Release SDK updates" --body-file "$body_file" - else - previous_handles=$(gh pr view "$EXISTING_PR" --repo "$PRODUCTION_REPO" --json body --jq '.body' \ - | grep -oE '@[A-Za-z0-9][A-Za-z0-9-]*' | sort -u | paste -sd' ' - || true) - gh pr edit "$EXISTING_PR" --repo "$PRODUCTION_REPO" --body-file "$body_file" - added="" - for handle in $handles; do - case " $previous_handles " in - *" $handle "*) ;; - *) added="${added:+$added }$handle" ;; - esac - done - if [ -n "$added" ]; then - gh pr comment "$EXISTING_PR" --repo "$PRODUCTION_REPO" \ - --body "$added — this SDK update now also includes your source changes. See the source links in the description." - fi - fi diff --git a/.release-please-manifest.json b/.release-please-manifest.json index e30834d7..6c57d4bf 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "5.43.0" + ".": "6.2.12" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index e37f60a1..a46ce7a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,550 @@ # Changelog +## [6.2.12](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.11...v6.2.12) (2026-10-24) + + +### Bug Fixes + +* **api:** Add the privacy_scope query parameter to listApps and document the PrivacyScope enum. ([8442f2e](https://github.com/RetellAI/retell-python-sdk/commit/8442f2eb1f859b60154c24c92f7a53a66fcd5732)) + +## [6.2.11](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.10...v6.2.11) (2026-10-23) + + +### Bug Fixes + +* **api:** Add is_suspended to AgentListItemResponse and require it in list results. ([ccd217e](https://github.com/RetellAI/retell-python-sdk/commit/ccd217e444b532f382dbcb6fdaaacfcf27108b86)) +* **sdks:** disable retries for outbound creation methods ([6361cfa](https://github.com/RetellAI/retell-python-sdk/commit/6361cfa6d7dd4b43335a0979cef5273752e2e5c8)) +* **sdks:** honor Python request option defaults ([c3db944](https://github.com/RetellAI/retell-python-sdk/commit/c3db944dac3f5aa7163a7aad49a0bacbcdea2a6e)) + +## [6.2.10](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.9...v6.2.10) (2026-10-22) + + +### Bug Fixes + +* **api:** Add additionalProperties to integration response schemas and document enum_labels and forbid_literal_const for app tool schema resolution. ([a94026d](https://github.com/RetellAI/retell-python-sdk/commit/a94026d6e13adc3a80a18f451aed3532e690b36b)) +* **api:** Add avatar_url to voice objects and update the provider description. ([5051697](https://github.com/RetellAI/retell-python-sdk/commit/50516971c2af899fc92442b30934be9971bceecc)) +* **api:** Add grok-voice-3.0 to S2S model enums and allow xai voice providers. ([5051697](https://github.com/RetellAI/retell-python-sdk/commit/50516971c2af899fc92442b30934be9971bceecc)) +* **api:** Add model_config to agent overrides, Retell LLM overrides, conversation flow overrides, and node definitions. ([4258ce7](https://github.com/RetellAI/retell-python-sdk/commit/4258ce7127f6213d4cdce55790bcbca12ae7ebec)) +* **api:** Add SipCodecList to custom phone number import and update requests, and to phone number responses. ([9944e2a](https://github.com/RetellAI/retell-python-sdk/commit/9944e2a4dcbe2dcd12aa66f5c884cd619abc903c)) +* **api:** Deprecate model_choice, model_temperature, model, s2s_model, model_high_priority, and model_ultrafast in favor of model_config. ([4258ce7](https://github.com/RetellAI/retell-python-sdk/commit/4258ce7127f6213d4cdce55790bcbca12ae7ebec)) +* **api:** Deprecate the states field in the Retell LLM schema. ([635b8a2](https://github.com/RetellAI/retell-python-sdk/commit/635b8a2444d3c49a11e48030c1e42e4028d53a89)) + +## [6.2.9](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.8...v6.2.9) (2026-10-20) + + +### Bug Fixes + +* **api:** Clarify that excluded_contact_ids accepts at most 1,000 contact IDs. ([67e7ac5](https://github.com/RetellAI/retell-python-sdk/commit/67e7ac58388cbe884f3e97c42e61badbc07c1514)) + +## [6.2.8](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.7...v6.2.8) (2026-10-17) + + +### Bug Fixes + +* **api:** Add SMS sender and destination options, plus `speak_after_execution`, to SMS tools and nodes. ([8d6d4ff](https://github.com/RetellAI/retell-python-sdk/commit/8d6d4ff219a02bb7bb516a0305f2a15ae93167f9)) +* **api:** Clarify chart type behavior and revise the live-call takeover description for PCI sessions. ([8d6d4ff](https://github.com/RetellAI/retell-python-sdk/commit/8d6d4ff219a02bb7bb516a0305f2a15ae93167f9)) +* **api:** Remove the deprecated `multi` scalar from agent language fields; use a locale or locale array instead. ([8d6d4ff](https://github.com/RetellAI/retell-python-sdk/commit/8d6d4ff219a02bb7bb516a0305f2a15ae93167f9)) + +## [6.2.7](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.6...v6.2.7) (2026-10-15) + + +### Bug Fixes + +* **api:** Add a 409 Conflict response for takeOverLiveCall when a PCI session is active. ([c383015](https://github.com/RetellAI/retell-python-sdk/commit/c383015b5b211949fe6b77a9d880beb7342689b5)) +* **api:** Add is_transfer_agent to agent create requests, agent responses, and agent list filters. ([c3eaf6d](https://github.com/RetellAI/retell-python-sdk/commit/c3eaf6d20dd3bc2972d08fc418043bc4ea642aed)) +* **api:** Add model_ultrafast and ultrafast override fields to Retell LLM configurations. ([207e06f](https://github.com/RetellAI/retell-python-sdk/commit/207e06fb009116fcaacd4ce708d186271f01769e)) +* **api:** api update ([87bdfdd](https://github.com/RetellAI/retell-python-sdk/commit/87bdfdd67eb16fad3988e5913cd263f40ec5483b)) +* **api:** Clarify that AgentOverrideRequest uses the latest version when no response-engine version is provided. ([747ff86](https://github.com/RetellAI/retell-python-sdk/commit/747ff86e2ec32bdcd164cf1330adead3439226b8)) + +## [6.2.6](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.5...v6.2.6) (2026-10-13) + + +### Bug Fixes + +* **api:** Add the new `type` field to tool call invocation messages and document known values. ([4ce4443](https://github.com/RetellAI/retell-python-sdk/commit/4ce4443a9b473b2d86d34f55d617225f533a5259)) +* **api:** Clarify that `name` contains the configured tool or node name, not the tool kind. ([4ce4443](https://github.com/RetellAI/retell-python-sdk/commit/4ce4443a9b473b2d86d34f55d617225f533a5259)) +* **api:** Remove gpt-4.1-nano and claude-4.5-sonnet from LLM model enums. ([7cdf93e](https://github.com/RetellAI/retell-python-sdk/commit/7cdf93e62c6c783370ba761fb436bb28049918a8)) + +## [6.2.5](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.4...v6.2.5) (2026-10-09) + + +### Bug Fixes + +* **api:** Add name character and length requirements to AppTool and SendSMSTool tool names. ([54eb1fe](https://github.com/RetellAI/retell-python-sdk/commit/54eb1feba6c1892d9e7c2b929958f3d43c94ce71)) + + +### Chores + +* **sdks:** refresh generated assets ([35e68a3](https://github.com/RetellAI/retell-python-sdk/commit/35e68a3a55aaa4c1eee5be6bcb00f5a8d159e557)) + +## [6.2.4](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.3...v6.2.4) (2026-10-08) + + +### Bug Fixes + +* **api:** sync OpenAPI from retell-backend ([97fd5f5](https://github.com/RetellAI/retell-python-sdk/commit/97fd5f58cf4f657e5ab18e69602c0b79f8516bf3)) + + +### Chores + +* preserve production workflow files ([8d1908c](https://github.com/RetellAI/retell-python-sdk/commit/8d1908cb5fe195a08eefa36d568e4b5ca7fd0b4e)) + +## [6.2.3](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.2...v6.2.3) (2026-10-08) + + +### Bug Fixes + +* **api:** sync OpenAPI from retell-backend ([88b031a](https://github.com/RetellAI/retell-python-sdk/commit/88b031a72fb1ccf923203d5a9e7a486f50bf13ed)) + + +### Chores + +* preserve production workflow files ([52266a3](https://github.com/RetellAI/retell-python-sdk/commit/52266a3eda82ec7734137301b44b01118ae66239)) + +## [6.2.2](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.1...v6.2.2) (2026-10-08) + + +### Chores + +* preserve production workflow files ([40532e0](https://github.com/RetellAI/retell-python-sdk/commit/40532e09cf12723db6f3803a22a8d4f6c290c3eb)) + +## [6.2.1](https://github.com/RetellAI/retell-python-sdk/compare/v6.2.0...v6.2.1) (2026-10-07) + + +### Chores + +* preserve production workflow files ([365fbd2](https://github.com/RetellAI/retell-python-sdk/commit/365fbd2fb5610341dc1d35c2e9a9a3082cf903bc)) +* **sdks:** refresh generated assets ([137f031](https://github.com/RetellAI/retell-python-sdk/commit/137f0317220d163256636de41cfd83568b579701)) + +## [6.2.0](https://github.com/RetellAI/retell-python-sdk/compare/v6.1.1...v6.2.0) (2026-10-07) + + +### Features + +* **api:** sync OpenAPI from retell-backend ([745190f](https://github.com/RetellAI/retell-python-sdk/commit/745190fb960f07d4de144b819cd82de336488a01)) + + +### Chores + +* preserve production workflow files ([ceb0bc1](https://github.com/RetellAI/retell-python-sdk/commit/ceb0bc1a7623f7014fc557ff33f61a87db2459f3)) + +## [6.1.1](https://github.com/RetellAI/retell-python-sdk/compare/v6.1.0...v6.1.1) (2026-10-05) + + +### Bug Fixes + +* **sdks:** re-anchor custom-code seals on staging main ([3e38345](https://github.com/RetellAI/retell-python-sdk/commit/3e3834561aa158d32dc62dae2b56376cf0d5cc37)) + + +### Chores + +* preserve production workflow files ([d85dc66](https://github.com/RetellAI/retell-python-sdk/commit/d85dc6654b07a82282fde10248caec09f792c78f)) + +## [6.1.0](https://github.com/RetellAI/retell-python-sdk/compare/v6.0.1...v6.1.0) (2026-10-05) + + +### Features + +* **api:** sync OpenAPI from retell-backend ([a48276a](https://github.com/RetellAI/retell-python-sdk/commit/a48276acfbf6206245e5eba27cdc8cb6a7ac2a80)) + + +### Chores + +* preserve production workflow files ([07833c9](https://github.com/RetellAI/retell-python-sdk/commit/07833c923bd51315dadc70b35b80ae143d52e862)) + +## [6.0.1](https://github.com/RetellAI/retell-python-sdk/compare/v6.0.0...v6.0.1) (2026-09-14) + + +### Chores + +* preserve production workflow files ([af09c02](https://github.com/RetellAI/retell-python-sdk/commit/af09c026fdbd75274bc1985839481b7f5fac6092)) +* **sdks:** refresh generated assets ([fa5a373](https://github.com/RetellAI/retell-python-sdk/commit/fa5a37322af9fc8454f1818e296e8b1568c1b78f)) + +## [6.0.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.66.1...v6.0.0) (2026-09-14) + + +### ⚠ BREAKING CHANGES + +* **api:** sync removed endpoints from retell-backend + +### Features + +* **api:** sync removed endpoints from retell-backend ([0153b25](https://github.com/RetellAI/retell-python-sdk/commit/0153b25666e5409410454d09653d33657ee8af72)) + + +### Chores + +* preserve production workflow files ([3a06229](https://github.com/RetellAI/retell-python-sdk/commit/3a062298434ef62fe88e3c672ab39f335046c40f)) + +## [5.66.1](https://github.com/RetellAI/retell-python-sdk/compare/v5.66.0...v5.66.1) (2026-09-11) + + +### Bug Fixes + +* **types:** update published source module resolution ([545daa6](https://github.com/RetellAI/retell-python-sdk/commit/545daa61e0cac21ee035dbb9b9291ccf30864a98)) + + +### Chores + +* preserve production workflow files ([e0191db](https://github.com/RetellAI/retell-python-sdk/commit/e0191dbcd54278cbb167170fd7846820b1c932e0)) + +## [5.66.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.65.0...v5.66.0) (2026-09-10) + + +### Features + +* **api:** api update ([3471d56](https://github.com/RetellAI/retell-python-sdk/commit/3471d566283e1e3360e7e5c28ba6d3f8409779d2)) + + +### Chores + +* preserve production workflow files ([23f1b1b](https://github.com/RetellAI/retell-python-sdk/commit/23f1b1bd80245d4f6ab9295bd829ee3b8eb901f2)) + +## [5.65.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.64.0...v5.65.0) (2026-09-10) + + +### Features + +* **api:** api update ([baa52dd](https://github.com/RetellAI/retell-python-sdk/commit/baa52ddc907eb44ec3e39c91bf56b34c6e90a9c9)) +* **api:** api update ([fdcf3c4](https://github.com/RetellAI/retell-python-sdk/commit/fdcf3c404dad0bcdf1f68eecda754152d3ecebdd)) +* **api:** api update ([3838870](https://github.com/RetellAI/retell-python-sdk/commit/3838870a600fa938d540adccc456d327f0f1c296)) +* **api:** api update ([e491ec5](https://github.com/RetellAI/retell-python-sdk/commit/e491ec52a39740657baa39c7dc112c8b4128a149)) +* **api:** api update ([97f1623](https://github.com/RetellAI/retell-python-sdk/commit/97f1623a7ecd99b571254a7c361d626dcc970b79)) +* **api:** api update ([16c2274](https://github.com/RetellAI/retell-python-sdk/commit/16c2274134de2f380798476473f037f0bf10275a)) +* **api:** api update ([8d9ee8a](https://github.com/RetellAI/retell-python-sdk/commit/8d9ee8a5ebbedb59ace1ccc9215fb15d25265c56)) +* **api:** release accumulated SDK updates ([#502](https://github.com/RetellAI/retell-python-sdk/issues/502)) ([3877699](https://github.com/RetellAI/retell-python-sdk/commit/38776994e40b240316b99841c03ac669a3c585f9)) + + +### Bug Fixes + +* **ci:** restore SDK releases with the existing GitHub App ([#503](https://github.com/RetellAI/retell-python-sdk/issues/503)) ([9cbfca1](https://github.com/RetellAI/retell-python-sdk/commit/9cbfca10cfc1146c2f1eac265c0303d170168f05)) + + +### Chores + +* preserve production workflow files ([16a64fb](https://github.com/RetellAI/retell-python-sdk/commit/16a64fbb69a1aa45dabc9a8f3c186d9baf909c24)) + + +### Documentation + +* overhaul guide for browser web calls; simplify setup and clarify transcript/audio features ([eb3f0d3](https://github.com/RetellAI/retell-python-sdk/commit/eb3f0d3241547a0b0f127b922afb3609d96b7154)) +* remove `create-web-v3` endpoint from config and map exclusion reasoning ([003036c](https://github.com/RetellAI/retell-python-sdk/commit/003036ccb077a7440b0542a01bcd55e64df625da)) + +## [5.64.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.61.0...v5.64.0) (2026-08-23) + + +### Features + +* **api:** api update ([a7267c3](https://github.com/RetellAI/retell-python-sdk/commit/a7267c36bc6775d469cb3cffd8cd23c75b6a871f)) +* **api:** expose contact, app, and CRM APIs in API reference and SDKs ([a2ade63](https://github.com/RetellAI/retell-python-sdk/commit/a2ade63b58a71fbd0da7e8c542e4ebc73bd29271)) + + +### Chores + +* preserve production workflow files ([ebd7949](https://github.com/RetellAI/retell-python-sdk/commit/ebd794948a9cb7165329da6c458a8883dd25c597)) + +## [5.61.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.60.0...v5.61.0) (2026-08-10) + + +### Features + +* **api:** api update ([4d9257e](https://github.com/RetellAI/retell-python-sdk/commit/4d9257ef02bdc29d5eb44d439988e73f60089148)) + + +### Chores + +* preserve production workflow files ([edc85e4](https://github.com/RetellAI/retell-python-sdk/commit/edc85e4dd308870de5b06171bd4abe99e725c553)) + +## [5.60.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.59.0...v5.60.0) (2026-08-01) + + +### Features + +* **api:** api update ([e66311e](https://github.com/RetellAI/retell-python-sdk/commit/e66311ebe5bb4bc4cc341300afda4ce81153b94b)) + + +### Chores + +* preserve production workflow files ([b6a1838](https://github.com/RetellAI/retell-python-sdk/commit/b6a1838e73af9e12acc8b90fc88be38e272f2bf4)) + +## [5.59.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.58.0...v5.59.0) (2026-07-31) + + +### Features + +* **api:** api update ([8db3f55](https://github.com/RetellAI/retell-python-sdk/commit/8db3f557ba549de9a3c3adb8816ed982761647b1)) + + +### Chores + +* preserve production workflow files ([6064a87](https://github.com/RetellAI/retell-python-sdk/commit/6064a8718916e364934d1d033dc8b9c522612340)) + +## [5.58.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.57.2...v5.58.0) (2026-07-30) + + +### Features + +* **sdks:** expose live updates and analysis reruns ([54996b1](https://github.com/RetellAI/retell-python-sdk/commit/54996b124d05717af5f4d6709994d69d18d9cec6)) + + +### Chores + +* preserve production workflow files ([924da2f](https://github.com/RetellAI/retell-python-sdk/commit/924da2f987e2dc50bef0226e32047ef9627eec81)) + +## [5.57.2](https://github.com/RetellAI/retell-python-sdk/compare/v5.57.1...v5.57.2) (2026-07-30) + + +### Bug Fixes + +* **webhooks:** harden signature verification ([#4](https://github.com/RetellAI/retell-python-sdk/issues/4)) ([6ec8602](https://github.com/RetellAI/retell-python-sdk/commit/6ec8602981e477cf9c4003384c5d9fc9cfb5aa57)) + + +### Chores + +* preserve production workflow files ([2e1ab60](https://github.com/RetellAI/retell-python-sdk/commit/2e1ab60af9a9662454271b3cdf91bec1d387335f)) + +## [5.57.1](https://github.com/RetellAI/retell-python-sdk/compare/v5.57.0...v5.57.1) (2026-07-30) + + +### Bug Fixes + +* **multipart:** use bare file array field names ([481281a](https://github.com/RetellAI/retell-python-sdk/commit/481281a29cfcdacc4935e0b813eb3a75f0def28c)) +* **multipart:** use bare file array field names ([377f072](https://github.com/RetellAI/retell-python-sdk/commit/377f0720ac978819f24e5ec0bf7f89ee34ec1844)) + + +### Chores + +* preserve production workflow files ([b255e7e](https://github.com/RetellAI/retell-python-sdk/commit/b255e7e5b3ad0cb95ad37150b0597b97a93c910f)) + +## [5.57.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.56.1...v5.57.0) (2026-07-28) + + +### Features + +* **api:** api update ([626c03b](https://github.com/RetellAI/retell-python-sdk/commit/626c03be40dbde240f21bbc85512a9a289b13b2d)) + + +### Chores + +* preserve production workflow files ([c7945c6](https://github.com/RetellAI/retell-python-sdk/commit/c7945c6b8e6dd1f0cdc44ca7370f2e59dab695e6)) + +## [5.56.1](https://github.com/RetellAI/retell-python-sdk/compare/v5.56.0...v5.56.1) (2026-07-23) + + +### Chores + +* preserve production workflow files ([a16215b](https://github.com/RetellAI/retell-python-sdk/commit/a16215b2ebc789fcb2510b128c53277e198a425b)) + +## [5.56.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.55.0...v5.56.0) (2026-07-22) + + +### Features + +* **api:** api update ([f73d299](https://github.com/RetellAI/retell-python-sdk/commit/f73d2993321831cc7d41d6b0e2bf0ec338cdd743)) + + +### Chores + +* preserve production workflow files ([325aa95](https://github.com/RetellAI/retell-python-sdk/commit/325aa95896b6c5621340dba412806752fadca5d7)) + +## [5.55.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.54.0...v5.55.0) (2026-07-09) + + +### Features + +* **api:** api update ([831f27d](https://github.com/RetellAI/retell-python-sdk/commit/831f27d873ce6eff926d370d751fdc4c1584d45f)) + + +### Chores + +* preserve production workflow files ([d2ceaf3](https://github.com/RetellAI/retell-python-sdk/commit/d2ceaf3bcadb016214205446c365ee565aac49f9)) + +## [5.54.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.53.0...v5.54.0) (2026-07-08) + + +### Features + +* **api:** api update ([e7e729f](https://github.com/RetellAI/retell-python-sdk/commit/e7e729fc17e4d264a22142eaf26d405cfd6593aa)) +* **api:** api update ([dfce78e](https://github.com/RetellAI/retell-python-sdk/commit/dfce78e5398a5c0ec272b3852598770b40c7204c)) +* **api:** api update ([4dc0a99](https://github.com/RetellAI/retell-python-sdk/commit/4dc0a990089765f8fc19c67bf886a64451fd9fc0)) +* **api:** api update ([a05cffa](https://github.com/RetellAI/retell-python-sdk/commit/a05cffacd3f4159c0cdeb8b02d8ee81b010a7fda)) +* **api:** api update ([9e80f55](https://github.com/RetellAI/retell-python-sdk/commit/9e80f556b2de52668b20bf9d30ced35ea4c9e337)) + + +### Chores + +* preserve production workflow files ([8683b11](https://github.com/RetellAI/retell-python-sdk/commit/8683b11151829ffa2179b286610cfaa4f488f854)) + +## [5.53.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.52.0...v5.53.0) (2026-06-24) + + +### Features + +* **api:** api update ([36d42b3](https://github.com/RetellAI/retell-python-sdk/commit/36d42b3c8e89fe81b753bdfc3a31971febd3e1f4)) + + +### Chores + +* preserve production workflow files ([45d7aed](https://github.com/RetellAI/retell-python-sdk/commit/45d7aed33c6aaea6b9bdf9c152cfbb9270f7097d)) + +## [5.52.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.51.0...v5.52.0) (2026-06-23) + + +### Features + +* **api:** api update ([8ce76d0](https://github.com/RetellAI/retell-python-sdk/commit/8ce76d0de39343ae3e83217f1a8f34dbff60b440)) + + +### Chores + +* preserve production workflow files ([5540212](https://github.com/RetellAI/retell-python-sdk/commit/5540212198562befd780b811a3aa9cb1d22ea0a0)) + +## [5.51.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.50.0...v5.51.0) (2026-06-17) + + +### Features + +* **api:** api update ([73dec56](https://github.com/RetellAI/retell-python-sdk/commit/73dec56f49821452f30a7cd89c303f5505c16c4a)) + + +### Chores + +* preserve production workflow files ([09d57b1](https://github.com/RetellAI/retell-python-sdk/commit/09d57b17aa3af1462458321627f90c5c16410e4c)) + +## [5.50.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.49.0...v5.50.0) (2026-06-16) + + +### Features + +* **api:** api update ([91b673c](https://github.com/RetellAI/retell-python-sdk/commit/91b673c334463c107e36f7a1a5d8cde306a9f82a)) + + +### Chores + +* preserve production workflow files ([94c2f0d](https://github.com/RetellAI/retell-python-sdk/commit/94c2f0d4eb4c8e820676984beb3ac509c3bd60d6)) + +## [5.49.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.48.0...v5.49.0) (2026-06-08) + + +### Features + +* **api:** api update ([0e6c50c](https://github.com/RetellAI/retell-python-sdk/commit/0e6c50c808e8b1d96d95462fac7d9538d22b7bd1)) + + +### Chores + +* preserve production workflow files ([c30cbb5](https://github.com/RetellAI/retell-python-sdk/commit/c30cbb563f3394750695a99381d2fb40cebb19b0)) + +## [5.48.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.47.0...v5.48.0) (2026-06-04) + + +### Features + +* **api:** api update ([0922f59](https://github.com/RetellAI/retell-python-sdk/commit/0922f592d548608dee1f563f927cdcf47b7df267)) + + +### Chores + +* preserve production workflow files ([3453b45](https://github.com/RetellAI/retell-python-sdk/commit/3453b45bf8185d3c293702310357dd38260dff11)) + +## [5.47.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.46.0...v5.47.0) (2026-06-04) + + +### Features + +* **api:** api update ([346634f](https://github.com/RetellAI/retell-python-sdk/commit/346634f3547846366a241260f4585f776bad8cc5)) + + +### Chores + +* preserve production workflow files ([2e271d2](https://github.com/RetellAI/retell-python-sdk/commit/2e271d2bb76823939dc1dcff62a9fa484204bf1a)) + +## [5.46.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.45.3...v5.46.0) (2026-06-03) + + +### Features + +* **api:** api update ([e8599c9](https://github.com/RetellAI/retell-python-sdk/commit/e8599c933355aef8b1ec14e264cc151be3d742fe)) + + +### Chores + +* preserve production workflow files ([02fb027](https://github.com/RetellAI/retell-python-sdk/commit/02fb027422e35b17bc2b849b4f071891ed568240)) + +## [5.45.3](https://github.com/RetellAI/retell-python-sdk/compare/v5.45.2...v5.45.3) (2026-06-01) + + +### Chores + +* preserve production workflow files ([796a30b](https://github.com/RetellAI/retell-python-sdk/commit/796a30b644e349ffd5ca2115e150905c9b16ae06)) + +## [5.45.2](https://github.com/RetellAI/retell-python-sdk/compare/v5.45.1...v5.45.2) (2026-06-01) + + +### Chores + +* preserve production workflow files ([2873729](https://github.com/RetellAI/retell-python-sdk/commit/28737294ed63d5f974ff3dc930db9a7fb2ec50b3)) + + +### Documentation + +* fix OpenAPI phone number description typo ([967f88b](https://github.com/RetellAI/retell-python-sdk/commit/967f88bbb7fd117fc24a8cd9c7c8416eaa6ba51a)) + +## [5.45.1](https://github.com/RetellAI/retell-python-sdk/compare/v5.45.0...v5.45.1) (2026-05-30) + + +### Bug Fixes + +* **api:** clarify inbound webhook description ([9638b62](https://github.com/RetellAI/retell-python-sdk/commit/9638b626e6f5d406423c888bb0395c45327673fb)) + + +### Chores + +* preserve production workflow files ([4bed949](https://github.com/RetellAI/retell-python-sdk/commit/4bed9492d6abaa99b1bb5c45d8ebb2d46cecc8b4)) + +## [5.45.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.44.1...v5.45.0) (2026-05-29) + + +### Features + +* **api:** api update ([2f12990](https://github.com/RetellAI/retell-python-sdk/commit/2f12990411eddc2e1d584266b5787e9a38f54ae1)) + + +### Chores + +* preserve production workflow files ([8e839ba](https://github.com/RetellAI/retell-python-sdk/commit/8e839bae64ec3a2b4e61a196ca772c6695014dfc)) + +## [5.44.1](https://github.com/RetellAI/retell-python-sdk/compare/v5.44.0...v5.44.1) (2026-05-29) + + +### Chores + +* restore stlc auto-merge triggers ([5f38f95](https://github.com/RetellAI/retell-python-sdk/commit/5f38f95c5a65f79aedc16da6277c8800f4d05ffc)) + +## 5.44.0 (2026-05-29) + +Full Changelog: [v5.43.1...v5.44.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.43.1...v5.44.0) + +### Features + +* **api:** api update ([a559d90](https://github.com/RetellAI/retell-python-sdk/commit/a559d9031cc2e111ae02a19ce988b8042c137526)) + + +### Chores + +* disable stlc auto-merge workflow ([83fc966](https://github.com/RetellAI/retell-python-sdk/commit/83fc96699b82d56652355396723f52caeb837842)) + +## 5.43.1 (2026-05-29) + +Full Changelog: [v5.43.0...v5.43.1](https://github.com/RetellAI/retell-python-sdk/compare/v5.43.0...v5.43.1) + +### Chores + +* add release-please workflow ([2ded49b](https://github.com/RetellAI/retell-python-sdk/commit/2ded49be02e1471bef0968f422c1cbf19314119b)) +* add SDK auto-merge workflow ([0966b89](https://github.com/RetellAI/retell-python-sdk/commit/0966b89b08dcb1ab507511b480270961bf8332b0)) +* harden SDK auto-merge workflow ([be57a3f](https://github.com/RetellAI/retell-python-sdk/commit/be57a3f70524d1f4bad69b37b73b383efb4c48d6)) +* restrict SDK auto-merge to same-repo branches ([4644075](https://github.com/RetellAI/retell-python-sdk/commit/4644075b17cc17443e67bc8fafa3ffe8e0e65e85)) + ## 5.43.0 (2026-05-28) Full Changelog: [v5.42.0...v5.43.0](https://github.com/RetellAI/retell-python-sdk/compare/v5.42.0...v5.43.0) diff --git a/pyproject.toml b/pyproject.toml index 0e3f0751..01961c6e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "retell-sdk" -version = "5.43.0" +version = "6.2.12" description = "The official Python library for the retell API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/retell/_version.py b/src/retell/_version.py index a74ec2af..44e2bea6 100644 --- a/src/retell/_version.py +++ b/src/retell/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "retell" -__version__ = "5.43.0" # x-release-please-version +__version__ = "6.2.12" # x-release-please-version diff --git a/src/retell/resources/conversation_flow.py b/src/retell/resources/conversation_flow.py index 08b67bd7..6603d808 100644 --- a/src/retell/resources/conversation_flow.py +++ b/src/retell/resources/conversation_flow.py @@ -56,6 +56,7 @@ def create( *, nodes: Iterable[conversation_flow_create_params.Node], start_speaker: Literal["user", "agent"], + backup_model: conversation_flow_create_params.BackupModel | Omit = omit, begin_after_user_silence_ms: Optional[int] | Omit = omit, begin_tag_display_position: Optional[conversation_flow_create_params.BeginTagDisplayPosition] | Omit = omit, components: Optional[Iterable[conversation_flow_create_params.Component]] | Omit = omit, @@ -91,6 +92,9 @@ def create( start_speaker: Who starts the conversation - user or agent. + backup_model: Backup models are supported only for call agents. Response engines with a backup + model cannot be used by chat agents. + begin_after_user_silence_ms: If set, the AI will begin the conversation after waiting for the user for the duration (in milliseconds) specified by this attribute. This only applies if the agent is configured to wait for the user to speak first. If not set, the agent @@ -151,6 +155,7 @@ def create( { "nodes": nodes, "start_speaker": start_speaker, + "backup_model": backup_model, "begin_after_user_silence_ms": begin_after_user_silence_ms, "begin_tag_display_position": begin_tag_display_position, "components": components, @@ -233,6 +238,7 @@ def update( conversation_flow_id: str, *, version: int | Omit = omit, + backup_model: conversation_flow_update_params.BackupModel | Omit = omit, begin_after_user_silence_ms: Optional[int] | Omit = omit, begin_tag_display_position: Optional[conversation_flow_update_params.BeginTagDisplayPosition] | Omit = omit, components: Optional[Iterable[conversation_flow_update_params.Component]] | Omit = omit, @@ -266,6 +272,9 @@ def update( Args: version: Optional version of the conversation flow to update. Default to latest version. + backup_model: Backup models are supported only for call agents. Response engines with a backup + model cannot be used by chat agents. + begin_after_user_silence_ms: If set, the AI will begin the conversation after waiting for the user for the duration (in milliseconds) specified by this attribute. This only applies if the agent is configured to wait for the user to speak first. If not set, the agent @@ -334,6 +343,7 @@ def update( ), body=maybe_transform( { + "backup_model": backup_model, "begin_after_user_silence_ms": begin_after_user_silence_ms, "begin_tag_display_position": begin_tag_display_position, "components": components, @@ -498,6 +508,7 @@ async def create( *, nodes: Iterable[conversation_flow_create_params.Node], start_speaker: Literal["user", "agent"], + backup_model: conversation_flow_create_params.BackupModel | Omit = omit, begin_after_user_silence_ms: Optional[int] | Omit = omit, begin_tag_display_position: Optional[conversation_flow_create_params.BeginTagDisplayPosition] | Omit = omit, components: Optional[Iterable[conversation_flow_create_params.Component]] | Omit = omit, @@ -533,6 +544,9 @@ async def create( start_speaker: Who starts the conversation - user or agent. + backup_model: Backup models are supported only for call agents. Response engines with a backup + model cannot be used by chat agents. + begin_after_user_silence_ms: If set, the AI will begin the conversation after waiting for the user for the duration (in milliseconds) specified by this attribute. This only applies if the agent is configured to wait for the user to speak first. If not set, the agent @@ -593,6 +607,7 @@ async def create( { "nodes": nodes, "start_speaker": start_speaker, + "backup_model": backup_model, "begin_after_user_silence_ms": begin_after_user_silence_ms, "begin_tag_display_position": begin_tag_display_position, "components": components, @@ -675,6 +690,7 @@ async def update( conversation_flow_id: str, *, version: int | Omit = omit, + backup_model: conversation_flow_update_params.BackupModel | Omit = omit, begin_after_user_silence_ms: Optional[int] | Omit = omit, begin_tag_display_position: Optional[conversation_flow_update_params.BeginTagDisplayPosition] | Omit = omit, components: Optional[Iterable[conversation_flow_update_params.Component]] | Omit = omit, @@ -708,6 +724,9 @@ async def update( Args: version: Optional version of the conversation flow to update. Default to latest version. + backup_model: Backup models are supported only for call agents. Response engines with a backup + model cannot be used by chat agents. + begin_after_user_silence_ms: If set, the AI will begin the conversation after waiting for the user for the duration (in milliseconds) specified by this attribute. This only applies if the agent is configured to wait for the user to speak first. If not set, the agent @@ -776,6 +795,7 @@ async def update( ), body=await async_maybe_transform( { + "backup_model": backup_model, "begin_after_user_silence_ms": begin_after_user_silence_ms, "begin_tag_display_position": begin_tag_display_position, "components": components, diff --git a/src/retell/resources/llm.py b/src/retell/resources/llm.py index d2afd1e8..201899c5 100644 --- a/src/retell/resources/llm.py +++ b/src/retell/resources/llm.py @@ -48,6 +48,7 @@ def with_streaming_response(self) -> LlmResourceWithStreamingResponse: def create( self, *, + backup_model: llm_create_params.BackupModel | Omit = omit, begin_after_user_silence_ms: Optional[int] | Omit = omit, begin_message: Optional[str] | Omit = omit, default_dynamic_variables: Optional[Dict[str, str]] | Omit = omit, @@ -128,6 +129,9 @@ def create( is used to generate response output for the agent. Args: + backup_model: Backup models are supported only for call agents. Response engines with a backup + model cannot be used by chat agents. + begin_after_user_silence_ms: If set, the AI will begin the conversation after waiting for the user for the duration (in milliseconds) specified by this attribute. This only applies if the agent is configured to wait for the user to speak first. If not set, the agent @@ -206,6 +210,7 @@ def create( "/create-retell-llm", body=maybe_transform( { + "backup_model": backup_model, "begin_after_user_silence_ms": begin_after_user_silence_ms, "begin_message": begin_message, "default_dynamic_variables": default_dynamic_variables, @@ -285,6 +290,7 @@ def update( llm_id: str, *, version: int | Omit = omit, + backup_model: llm_update_params.BackupModel | Omit = omit, begin_after_user_silence_ms: Optional[int] | Omit = omit, begin_message: Optional[str] | Omit = omit, default_dynamic_variables: Optional[Dict[str, str]] | Omit = omit, @@ -365,6 +371,9 @@ def update( Args: version: Optional version of the API to use for this request. Default to latest version. + backup_model: Backup models are supported only for call agents. Response engines with a backup + model cannot be used by chat agents. + begin_after_user_silence_ms: If set, the AI will begin the conversation after waiting for the user for the duration (in milliseconds) specified by this attribute. This only applies if the agent is configured to wait for the user to speak first. If not set, the agent @@ -445,6 +454,7 @@ def update( path_template("/update-retell-llm/{llm_id}", llm_id=llm_id), body=maybe_transform( { + "backup_model": backup_model, "begin_after_user_silence_ms": begin_after_user_silence_ms, "begin_message": begin_message, "default_dynamic_variables": default_dynamic_variables, @@ -599,6 +609,7 @@ def with_streaming_response(self) -> AsyncLlmResourceWithStreamingResponse: async def create( self, *, + backup_model: llm_create_params.BackupModel | Omit = omit, begin_after_user_silence_ms: Optional[int] | Omit = omit, begin_message: Optional[str] | Omit = omit, default_dynamic_variables: Optional[Dict[str, str]] | Omit = omit, @@ -679,6 +690,9 @@ async def create( is used to generate response output for the agent. Args: + backup_model: Backup models are supported only for call agents. Response engines with a backup + model cannot be used by chat agents. + begin_after_user_silence_ms: If set, the AI will begin the conversation after waiting for the user for the duration (in milliseconds) specified by this attribute. This only applies if the agent is configured to wait for the user to speak first. If not set, the agent @@ -757,6 +771,7 @@ async def create( "/create-retell-llm", body=await async_maybe_transform( { + "backup_model": backup_model, "begin_after_user_silence_ms": begin_after_user_silence_ms, "begin_message": begin_message, "default_dynamic_variables": default_dynamic_variables, @@ -836,6 +851,7 @@ async def update( llm_id: str, *, version: int | Omit = omit, + backup_model: llm_update_params.BackupModel | Omit = omit, begin_after_user_silence_ms: Optional[int] | Omit = omit, begin_message: Optional[str] | Omit = omit, default_dynamic_variables: Optional[Dict[str, str]] | Omit = omit, @@ -916,6 +932,9 @@ async def update( Args: version: Optional version of the API to use for this request. Default to latest version. + backup_model: Backup models are supported only for call agents. Response engines with a backup + model cannot be used by chat agents. + begin_after_user_silence_ms: If set, the AI will begin the conversation after waiting for the user for the duration (in milliseconds) specified by this attribute. This only applies if the agent is configured to wait for the user to speak first. If not set, the agent @@ -996,6 +1015,7 @@ async def update( path_template("/update-retell-llm/{llm_id}", llm_id=llm_id), body=await async_maybe_transform( { + "backup_model": backup_model, "begin_after_user_silence_ms": begin_after_user_silence_ms, "begin_message": begin_message, "default_dynamic_variables": default_dynamic_variables, diff --git a/src/retell/types/batch_call_create_batch_call_params.py b/src/retell/types/batch_call_create_batch_call_params.py index a553739a..1c212e62 100644 --- a/src/retell/types/batch_call_create_batch_call_params.py +++ b/src/retell/types/batch_call_create_batch_call_params.py @@ -77,6 +77,8 @@ "TaskAgentOverrideAgentVoicemailOptionActionVoicemailActionHangup", "TaskAgentOverrideAgentVoicemailOptionActionVoicemailActionBridgeTransfer", "TaskAgentOverrideConversationFlow", + "TaskAgentOverrideConversationFlowBackupModel", + "TaskAgentOverrideConversationFlowBackupModelBackupModelChoice", "TaskAgentOverrideConversationFlowKBConfig", "TaskAgentOverrideConversationFlowModelChoice", "TaskAgentOverrideConversationFlowModelChoiceModelChoiceCascading", @@ -89,6 +91,8 @@ "TaskAgentOverrideConversationFlowModelConfigS2SModelConfig", "TaskAgentOverrideConversationFlowModelConfigS2SModelConfigPrimary", "TaskAgentOverrideRetellLlm", + "TaskAgentOverrideRetellLlmBackupModel", + "TaskAgentOverrideRetellLlmBackupModelBackupModelChoice", "TaskAgentOverrideRetellLlmKBConfig", "TaskAgentOverrideRetellLlmModelConfig", "TaskAgentOverrideRetellLlmModelConfigCascadingModelConfig", @@ -2277,6 +2281,76 @@ class TaskAgentOverrideAgent(TypedDict, total=False): """ +class TaskAgentOverrideConversationFlowBackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +TaskAgentOverrideConversationFlowBackupModel: TypeAlias = Union[ + TaskAgentOverrideConversationFlowBackupModelBackupModelChoice, Optional[object] +] + + class TaskAgentOverrideConversationFlowKBConfig(TypedDict, total=False): """Knowledge base configuration for RAG retrieval.""" @@ -2365,6 +2439,11 @@ class TaskAgentOverrideConversationFlowModelChoiceModelChoiceS2S(TypedDict, tota class TaskAgentOverrideConversationFlowModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", @@ -2532,6 +2611,14 @@ class TaskAgentOverrideConversationFlow(TypedDict, total=False): Only applicable when using conversation flow as the response engine. Supported attributes - model_config, tool_call_strict_mode, knowledge_base_ids, kb_config, start_speaker, begin_after_user_silence_ms. A model_config override can set backup to null to remove it for this call. """ + backup_model: TaskAgentOverrideConversationFlowBackupModel + """Replace backup model configuration for this call only. + + Omit to inherit the saved configuration, or set null to disable backup. An + omitted backup_kick_in_timeout in a supplied configuration defaults to 1500 + milliseconds. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the @@ -2572,6 +2659,76 @@ class TaskAgentOverrideConversationFlow(TypedDict, total=False): """ +class TaskAgentOverrideRetellLlmBackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +TaskAgentOverrideRetellLlmBackupModel: TypeAlias = Union[ + TaskAgentOverrideRetellLlmBackupModelBackupModelChoice, Optional[object] +] + + class TaskAgentOverrideRetellLlmKBConfig(TypedDict, total=False): """Knowledge base configuration for RAG retrieval.""" @@ -2583,6 +2740,11 @@ class TaskAgentOverrideRetellLlmKBConfig(TypedDict, total=False): class TaskAgentOverrideRetellLlmModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", @@ -2749,6 +2911,14 @@ class TaskAgentOverrideRetellLlm(TypedDict, total=False): Only applicable when using Retell LLM as the response engine. Supported attributes - model_config, tool_call_strict_mode, knowledge_base_ids, kb_config, start_speaker, begin_after_user_silence_ms, begin_message. A model_config override can set backup to null to remove it for this call, but cannot switch a speech-to-speech LLM to a cascading model. """ + backup_model: TaskAgentOverrideRetellLlmBackupModel + """Replace backup model configuration for this call only. + + Omit to inherit the saved configuration, or set null to disable backup. An + omitted backup_kick_in_timeout in a supplied configuration defaults to 1500 + milliseconds. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the diff --git a/src/retell/types/call_create_phone_call_params.py b/src/retell/types/call_create_phone_call_params.py index 8c651796..d45543fa 100644 --- a/src/retell/types/call_create_phone_call_params.py +++ b/src/retell/types/call_create_phone_call_params.py @@ -76,6 +76,8 @@ "AgentOverrideAgentVoicemailOptionActionVoicemailActionHangup", "AgentOverrideAgentVoicemailOptionActionVoicemailActionBridgeTransfer", "AgentOverrideConversationFlow", + "AgentOverrideConversationFlowBackupModel", + "AgentOverrideConversationFlowBackupModelBackupModelChoice", "AgentOverrideConversationFlowKBConfig", "AgentOverrideConversationFlowModelChoice", "AgentOverrideConversationFlowModelChoiceModelChoiceCascading", @@ -88,6 +90,8 @@ "AgentOverrideConversationFlowModelConfigS2SModelConfig", "AgentOverrideConversationFlowModelConfigS2SModelConfigPrimary", "AgentOverrideRetellLlm", + "AgentOverrideRetellLlmBackupModel", + "AgentOverrideRetellLlmBackupModelBackupModelChoice", "AgentOverrideRetellLlmKBConfig", "AgentOverrideRetellLlmModelConfig", "AgentOverrideRetellLlmModelConfigCascadingModelConfig", @@ -2308,6 +2312,76 @@ class AgentOverrideAgent(TypedDict, total=False): """ +class AgentOverrideConversationFlowBackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +AgentOverrideConversationFlowBackupModel: TypeAlias = Union[ + AgentOverrideConversationFlowBackupModelBackupModelChoice, Optional[object] +] + + class AgentOverrideConversationFlowKBConfig(TypedDict, total=False): """Knowledge base configuration for RAG retrieval.""" @@ -2395,6 +2469,11 @@ class AgentOverrideConversationFlowModelChoiceModelChoiceS2S(TypedDict, total=Fa class AgentOverrideConversationFlowModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", @@ -2561,6 +2640,14 @@ class AgentOverrideConversationFlow(TypedDict, total=False): Only applicable when using conversation flow as the response engine. Supported attributes - model_config, tool_call_strict_mode, knowledge_base_ids, kb_config, start_speaker, begin_after_user_silence_ms. A model_config override can set backup to null to remove it for this call. """ + backup_model: AgentOverrideConversationFlowBackupModel + """Replace backup model configuration for this call only. + + Omit to inherit the saved configuration, or set null to disable backup. An + omitted backup_kick_in_timeout in a supplied configuration defaults to 1500 + milliseconds. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the @@ -2601,6 +2688,76 @@ class AgentOverrideConversationFlow(TypedDict, total=False): """ +class AgentOverrideRetellLlmBackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +AgentOverrideRetellLlmBackupModel: TypeAlias = Union[ + AgentOverrideRetellLlmBackupModelBackupModelChoice, Optional[object] +] + + class AgentOverrideRetellLlmKBConfig(TypedDict, total=False): """Knowledge base configuration for RAG retrieval.""" @@ -2612,6 +2769,11 @@ class AgentOverrideRetellLlmKBConfig(TypedDict, total=False): class AgentOverrideRetellLlmModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", @@ -2778,6 +2940,14 @@ class AgentOverrideRetellLlm(TypedDict, total=False): Only applicable when using Retell LLM as the response engine. Supported attributes - model_config, tool_call_strict_mode, knowledge_base_ids, kb_config, start_speaker, begin_after_user_silence_ms, begin_message. A model_config override can set backup to null to remove it for this call, but cannot switch a speech-to-speech LLM to a cascading model. """ + backup_model: AgentOverrideRetellLlmBackupModel + """Replace backup model configuration for this call only. + + Omit to inherit the saved configuration, or set null to disable backup. An + omitted backup_kick_in_timeout in a supplied configuration defaults to 1500 + milliseconds. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the diff --git a/src/retell/types/call_create_web_call_params.py b/src/retell/types/call_create_web_call_params.py index 8257e69e..0c013f53 100644 --- a/src/retell/types/call_create_web_call_params.py +++ b/src/retell/types/call_create_web_call_params.py @@ -76,6 +76,8 @@ "AgentOverrideAgentVoicemailOptionActionVoicemailActionHangup", "AgentOverrideAgentVoicemailOptionActionVoicemailActionBridgeTransfer", "AgentOverrideConversationFlow", + "AgentOverrideConversationFlowBackupModel", + "AgentOverrideConversationFlowBackupModelBackupModelChoice", "AgentOverrideConversationFlowKBConfig", "AgentOverrideConversationFlowModelChoice", "AgentOverrideConversationFlowModelChoiceModelChoiceCascading", @@ -88,6 +90,8 @@ "AgentOverrideConversationFlowModelConfigS2SModelConfig", "AgentOverrideConversationFlowModelConfigS2SModelConfigPrimary", "AgentOverrideRetellLlm", + "AgentOverrideRetellLlmBackupModel", + "AgentOverrideRetellLlmBackupModelBackupModelChoice", "AgentOverrideRetellLlmKBConfig", "AgentOverrideRetellLlmModelConfig", "AgentOverrideRetellLlmModelConfigCascadingModelConfig", @@ -2283,6 +2287,76 @@ class AgentOverrideAgent(TypedDict, total=False): """ +class AgentOverrideConversationFlowBackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +AgentOverrideConversationFlowBackupModel: TypeAlias = Union[ + AgentOverrideConversationFlowBackupModelBackupModelChoice, Optional[object] +] + + class AgentOverrideConversationFlowKBConfig(TypedDict, total=False): """Knowledge base configuration for RAG retrieval.""" @@ -2370,6 +2444,11 @@ class AgentOverrideConversationFlowModelChoiceModelChoiceS2S(TypedDict, total=Fa class AgentOverrideConversationFlowModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", @@ -2536,6 +2615,14 @@ class AgentOverrideConversationFlow(TypedDict, total=False): Only applicable when using conversation flow as the response engine. Supported attributes - model_config, tool_call_strict_mode, knowledge_base_ids, kb_config, start_speaker, begin_after_user_silence_ms. A model_config override can set backup to null to remove it for this call. """ + backup_model: AgentOverrideConversationFlowBackupModel + """Replace backup model configuration for this call only. + + Omit to inherit the saved configuration, or set null to disable backup. An + omitted backup_kick_in_timeout in a supplied configuration defaults to 1500 + milliseconds. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the @@ -2576,6 +2663,76 @@ class AgentOverrideConversationFlow(TypedDict, total=False): """ +class AgentOverrideRetellLlmBackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +AgentOverrideRetellLlmBackupModel: TypeAlias = Union[ + AgentOverrideRetellLlmBackupModelBackupModelChoice, Optional[object] +] + + class AgentOverrideRetellLlmKBConfig(TypedDict, total=False): """Knowledge base configuration for RAG retrieval.""" @@ -2587,6 +2744,11 @@ class AgentOverrideRetellLlmKBConfig(TypedDict, total=False): class AgentOverrideRetellLlmModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", @@ -2753,6 +2915,14 @@ class AgentOverrideRetellLlm(TypedDict, total=False): Only applicable when using Retell LLM as the response engine. Supported attributes - model_config, tool_call_strict_mode, knowledge_base_ids, kb_config, start_speaker, begin_after_user_silence_ms, begin_message. A model_config override can set backup to null to remove it for this call, but cannot switch a speech-to-speech LLM to a cascading model. """ + backup_model: AgentOverrideRetellLlmBackupModel + """Replace backup model configuration for this call only. + + Omit to inherit the saved configuration, or set null to disable backup. An + omitted backup_kick_in_timeout in a supplied configuration defaults to 1500 + milliseconds. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the diff --git a/src/retell/types/call_register_phone_call_params.py b/src/retell/types/call_register_phone_call_params.py index 784dda5f..c33a3160 100644 --- a/src/retell/types/call_register_phone_call_params.py +++ b/src/retell/types/call_register_phone_call_params.py @@ -76,6 +76,8 @@ "AgentOverrideAgentVoicemailOptionActionVoicemailActionHangup", "AgentOverrideAgentVoicemailOptionActionVoicemailActionBridgeTransfer", "AgentOverrideConversationFlow", + "AgentOverrideConversationFlowBackupModel", + "AgentOverrideConversationFlowBackupModelBackupModelChoice", "AgentOverrideConversationFlowKBConfig", "AgentOverrideConversationFlowModelChoice", "AgentOverrideConversationFlowModelChoiceModelChoiceCascading", @@ -88,6 +90,8 @@ "AgentOverrideConversationFlowModelConfigS2SModelConfig", "AgentOverrideConversationFlowModelConfigS2SModelConfigPrimary", "AgentOverrideRetellLlm", + "AgentOverrideRetellLlmBackupModel", + "AgentOverrideRetellLlmBackupModelBackupModelChoice", "AgentOverrideRetellLlmKBConfig", "AgentOverrideRetellLlmModelConfig", "AgentOverrideRetellLlmModelConfigCascadingModelConfig", @@ -2274,6 +2278,76 @@ class AgentOverrideAgent(TypedDict, total=False): """ +class AgentOverrideConversationFlowBackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +AgentOverrideConversationFlowBackupModel: TypeAlias = Union[ + AgentOverrideConversationFlowBackupModelBackupModelChoice, Optional[object] +] + + class AgentOverrideConversationFlowKBConfig(TypedDict, total=False): """Knowledge base configuration for RAG retrieval.""" @@ -2361,6 +2435,11 @@ class AgentOverrideConversationFlowModelChoiceModelChoiceS2S(TypedDict, total=Fa class AgentOverrideConversationFlowModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", @@ -2527,6 +2606,14 @@ class AgentOverrideConversationFlow(TypedDict, total=False): Only applicable when using conversation flow as the response engine. Supported attributes - model_config, tool_call_strict_mode, knowledge_base_ids, kb_config, start_speaker, begin_after_user_silence_ms. A model_config override can set backup to null to remove it for this call. """ + backup_model: AgentOverrideConversationFlowBackupModel + """Replace backup model configuration for this call only. + + Omit to inherit the saved configuration, or set null to disable backup. An + omitted backup_kick_in_timeout in a supplied configuration defaults to 1500 + milliseconds. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the @@ -2567,6 +2654,76 @@ class AgentOverrideConversationFlow(TypedDict, total=False): """ +class AgentOverrideRetellLlmBackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +AgentOverrideRetellLlmBackupModel: TypeAlias = Union[ + AgentOverrideRetellLlmBackupModelBackupModelChoice, Optional[object] +] + + class AgentOverrideRetellLlmKBConfig(TypedDict, total=False): """Knowledge base configuration for RAG retrieval.""" @@ -2578,6 +2735,11 @@ class AgentOverrideRetellLlmKBConfig(TypedDict, total=False): class AgentOverrideRetellLlmModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", @@ -2744,6 +2906,14 @@ class AgentOverrideRetellLlm(TypedDict, total=False): Only applicable when using Retell LLM as the response engine. Supported attributes - model_config, tool_call_strict_mode, knowledge_base_ids, kb_config, start_speaker, begin_after_user_silence_ms, begin_message. A model_config override can set backup to null to remove it for this call, but cannot switch a speech-to-speech LLM to a cascading model. """ + backup_model: AgentOverrideRetellLlmBackupModel + """Replace backup model configuration for this call only. + + Omit to inherit the saved configuration, or set null to disable backup. An + omitted backup_kick_in_timeout in a supplied configuration defaults to 1500 + milliseconds. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the diff --git a/src/retell/types/conversation_flow_create_params.py b/src/retell/types/conversation_flow_create_params.py index 5ac46e4f..e0ceb041 100644 --- a/src/retell/types/conversation_flow_create_params.py +++ b/src/retell/types/conversation_flow_create_params.py @@ -763,6 +763,8 @@ "NodeCancelTransferNodeModelConfig", "NodeCancelTransferNodeModelConfigNodeModelConfig", "NodeCancelTransferNodeModelConfigNodeModelConfigPrimary", + "BackupModel", + "BackupModelBackupModelChoice", "BeginTagDisplayPosition", "Component", "ComponentNode", @@ -1564,6 +1566,12 @@ class ConversationFlowCreateParams(TypedDict, total=False): start_speaker: Required[Literal["user", "agent"]] """Who starts the conversation - user or agent.""" + backup_model: BackupModel + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the @@ -11678,6 +11686,74 @@ class NodeCancelTransferNode(TypedDict, total=False): ] +class BackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +BackupModel: TypeAlias = Union[BackupModelBackupModelChoice, Optional[object]] + + class BeginTagDisplayPosition(TypedDict, total=False): """Display position for the begin tag in the frontend.""" @@ -22423,6 +22499,11 @@ class ModelChoiceModelChoiceS2S(TypedDict, total=False): class ModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", diff --git a/src/retell/types/conversation_flow_response.py b/src/retell/types/conversation_flow_response.py index b9dcc078..7c5f6beb 100644 --- a/src/retell/types/conversation_flow_response.py +++ b/src/retell/types/conversation_flow_response.py @@ -9,6 +9,8 @@ __all__ = [ "ConversationFlowResponse", + "BackupModel", + "BackupModelBackupModelChoice", "BeginTagDisplayPosition", "Component", "ComponentNode", @@ -1556,6 +1558,72 @@ ] +class BackupModelBackupModelChoice(BaseModel): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + """The LLM model to use""" + + type: Literal["cascading"] + """Type of model choice""" + + backup_kick_in_timeout: Optional[int] = None + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: Optional[bool] = None + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: Optional[bool] = None + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +BackupModel: TypeAlias = Union[BackupModelBackupModelChoice, Optional[object]] + + class BeginTagDisplayPosition(BaseModel): """Display position for the begin tag in the frontend.""" @@ -12125,6 +12193,11 @@ class ModelChoiceModelChoiceS2S(BaseModel): class ModelConfigCascadingModelConfigBackupBackupModelRef(BaseModel): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Literal[ "gpt-4.1", "gpt-4.1-mini", @@ -22566,6 +22639,12 @@ class ConversationFlowResponse(BaseModel): version: int """Version number of the conversation flow""" + backup_model: Optional[BackupModel] = None + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + begin_after_user_silence_ms: Optional[int] = None """ If set, the AI will begin the conversation after waiting for the user for the diff --git a/src/retell/types/conversation_flow_update_params.py b/src/retell/types/conversation_flow_update_params.py index 25be6563..aaf14e2e 100644 --- a/src/retell/types/conversation_flow_update_params.py +++ b/src/retell/types/conversation_flow_update_params.py @@ -10,6 +10,8 @@ __all__ = [ "ConversationFlowUpdateParams", + "BackupModel", + "BackupModelBackupModelChoice", "BeginTagDisplayPosition", "Component", "ComponentNode", @@ -1561,6 +1563,12 @@ class ConversationFlowUpdateParams(TypedDict, total=False): version: int """Optional version of the conversation flow to update. Default to latest version.""" + backup_model: BackupModel + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the @@ -1643,6 +1651,74 @@ class ConversationFlowUpdateParams(TypedDict, total=False): """Tools available in the conversation flow.""" +class BackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +BackupModel: TypeAlias = Union[BackupModelBackupModelChoice, Optional[object]] + + class BeginTagDisplayPosition(TypedDict, total=False): """Display position for the begin tag in the frontend.""" @@ -12388,6 +12464,11 @@ class ModelChoiceModelChoiceS2S(TypedDict, total=False): class ModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", diff --git a/src/retell/types/llm_create_params.py b/src/retell/types/llm_create_params.py index 5c43038a..1b4bd853 100644 --- a/src/retell/types/llm_create_params.py +++ b/src/retell/types/llm_create_params.py @@ -10,6 +10,8 @@ __all__ = [ "LlmCreateParams", + "BackupModel", + "BackupModelBackupModelChoice", "GeneralTool", "GeneralToolEndCallTool", "GeneralToolTransferCallTool", @@ -130,6 +132,12 @@ class LlmCreateParams(TypedDict, total=False): + backup_model: BackupModel + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the @@ -286,6 +294,74 @@ class LlmCreateParams(TypedDict, total=False): """ +class BackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +BackupModel: TypeAlias = Union[BackupModelBackupModelChoice, Optional[object]] + + class GeneralToolEndCallTool(TypedDict, total=False): name: Required[str] """Name of the tool. @@ -1586,6 +1662,11 @@ class Mcp(TypedDict, total=False): class ModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", diff --git a/src/retell/types/llm_response.py b/src/retell/types/llm_response.py index 9b1586fb..1bb66a7b 100644 --- a/src/retell/types/llm_response.py +++ b/src/retell/types/llm_response.py @@ -9,6 +9,8 @@ __all__ = [ "LlmResponse", + "BackupModel", + "BackupModelBackupModelChoice", "GeneralTool", "GeneralToolEndCallTool", "GeneralToolTransferCallTool", @@ -128,6 +130,72 @@ ] +class BackupModelBackupModelChoice(BaseModel): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + """The LLM model to use""" + + type: Literal["cascading"] + """Type of model choice""" + + backup_kick_in_timeout: Optional[int] = None + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: Optional[bool] = None + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: Optional[bool] = None + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +BackupModel: TypeAlias = Union[BackupModelBackupModelChoice, Optional[object]] + + class GeneralToolEndCallTool(BaseModel): name: str """Name of the tool. @@ -1432,6 +1500,11 @@ class Mcp(BaseModel): class ModelConfigCascadingModelConfigBackupBackupModelRef(BaseModel): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Literal[ "gpt-4.1", "gpt-4.1-mini", @@ -2949,6 +3022,12 @@ class LlmResponse(BaseModel): llm_id: str """Unique id of Retell LLM Response Engine.""" + backup_model: Optional[BackupModel] = None + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + begin_after_user_silence_ms: Optional[int] = None """ If set, the AI will begin the conversation after waiting for the user for the diff --git a/src/retell/types/llm_update_params.py b/src/retell/types/llm_update_params.py index 59b5458b..419fa7bc 100644 --- a/src/retell/types/llm_update_params.py +++ b/src/retell/types/llm_update_params.py @@ -10,6 +10,8 @@ __all__ = [ "LlmUpdateParams", + "BackupModel", + "BackupModelBackupModelChoice", "GeneralTool", "GeneralToolEndCallTool", "GeneralToolTransferCallTool", @@ -133,6 +135,12 @@ class LlmUpdateParams(TypedDict, total=False): version: int """Optional version of the API to use for this request. Default to latest version.""" + backup_model: BackupModel + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + begin_after_user_silence_ms: Optional[int] """ If set, the AI will begin the conversation after waiting for the user for the @@ -289,6 +297,74 @@ class LlmUpdateParams(TypedDict, total=False): """ +class BackupModelBackupModelChoice(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + + model: Required[ + Literal[ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-5", + "gpt-5-mini", + "gpt-5-nano", + "gpt-5.1", + "gpt-5.2", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.4-nano", + "gpt-5.5", + "gpt-5.6-terra", + "gpt-5.6-luna", + "gpt-6-astra", + "gpt-6-sol", + "gpt-6.1-sol", + "gpt-6-luna", + "claude-4.6-sonnet", + "claude-5-opus", + "claude-5.5-opus", + "claude-5-sonnet", + "claude-5.5-sonnet", + "claude-5.5-haiku", + "claude-4.5-haiku", + "gemini-3.0-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash", + "gemini-3.5-flash-lite", + "gemini-3.6-flash", + "gemini-3.7-flash", + "gemini-3.8-flash", + "gemini-4-argon", + ] + ] + """The LLM model to use""" + + type: Required[Literal["cascading"]] + """Type of model choice""" + + backup_kick_in_timeout: int + """ + Duration in milliseconds to prefer primary model output while both models run + concurrently. Must be between 300 and 60000 milliseconds, inclusive. Defaults to + 1500 when omitted. + """ + + high_priority: bool + """Whether to use high priority pool with more dedicated resource, default false""" + + ultrafast: bool + """ + Whether to use the ultrafast tier for much faster response generation, default + false. Only supported by gpt-6.1-sol on voice agents; ignored otherwise. Takes + precedence over high_priority. + """ + + +BackupModel: TypeAlias = Union[BackupModelBackupModelChoice, Optional[object]] + + class GeneralToolEndCallTool(TypedDict, total=False): name: Required[str] """Name of the tool. @@ -1589,6 +1665,11 @@ class Mcp(TypedDict, total=False): class ModelConfigCascadingModelConfigBackupBackupModelRef(TypedDict, total=False): + """Backup models are supported only for call agents. + + Response engines with a backup model cannot be used by chat agents. + """ + model: Required[ Literal[ "gpt-4.1", diff --git a/tests/api_resources/test_batch_call.py b/tests/api_resources/test_batch_call.py index 3b6ac946..559d9313 100644 --- a/tests/api_resources/test_batch_call.py +++ b/tests/api_resources/test_batch_call.py @@ -222,6 +222,13 @@ def test_method_create_batch_call_with_all_params(self, client: Retell) -> None: "webhook_url": "https://webhook-url-here", }, "conversation_flow": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "kb_config": { "filter_score": 0.6, @@ -252,6 +259,13 @@ def test_method_create_batch_call_with_all_params(self, client: Retell) -> None: "tool_call_strict_mode": True, }, "retell_llm": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "begin_message": "Hey I am a virtual assistant calling from Retell Hospital.", "kb_config": { @@ -544,6 +558,13 @@ async def test_method_create_batch_call_with_all_params(self, async_client: Asyn "webhook_url": "https://webhook-url-here", }, "conversation_flow": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "kb_config": { "filter_score": 0.6, @@ -574,6 +595,13 @@ async def test_method_create_batch_call_with_all_params(self, async_client: Asyn "tool_call_strict_mode": True, }, "retell_llm": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "begin_message": "Hey I am a virtual assistant calling from Retell Hospital.", "kb_config": { diff --git a/tests/api_resources/test_call.py b/tests/api_resources/test_call.py index d57ad64b..6c95d06f 100644 --- a/tests/api_resources/test_call.py +++ b/tests/api_resources/test_call.py @@ -557,6 +557,13 @@ def test_method_create_phone_call_with_all_params(self, client: Retell) -> None: "webhook_url": "https://webhook-url-here", }, "conversation_flow": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "kb_config": { "filter_score": 0.6, @@ -587,6 +594,13 @@ def test_method_create_phone_call_with_all_params(self, client: Retell) -> None: "tool_call_strict_mode": True, }, "retell_llm": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "begin_message": "Hey I am a virtual assistant calling from Retell Hospital.", "kb_config": { @@ -856,6 +870,13 @@ def test_method_create_web_call_with_all_params(self, client: Retell) -> None: "webhook_url": "https://webhook-url-here", }, "conversation_flow": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "kb_config": { "filter_score": 0.6, @@ -886,6 +907,13 @@ def test_method_create_web_call_with_all_params(self, client: Retell) -> None: "tool_call_strict_mode": True, }, "retell_llm": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "begin_message": "Hey I am a virtual assistant calling from Retell Hospital.", "kb_config": { @@ -1192,6 +1220,13 @@ def test_method_register_phone_call_with_all_params(self, client: Retell) -> Non "webhook_url": "https://webhook-url-here", }, "conversation_flow": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "kb_config": { "filter_score": 0.6, @@ -1222,6 +1257,13 @@ def test_method_register_phone_call_with_all_params(self, client: Retell) -> Non "tool_call_strict_mode": True, }, "retell_llm": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "begin_message": "Hey I am a virtual assistant calling from Retell Hospital.", "kb_config": { @@ -2016,6 +2058,13 @@ async def test_method_create_phone_call_with_all_params(self, async_client: Asyn "webhook_url": "https://webhook-url-here", }, "conversation_flow": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "kb_config": { "filter_score": 0.6, @@ -2046,6 +2095,13 @@ async def test_method_create_phone_call_with_all_params(self, async_client: Asyn "tool_call_strict_mode": True, }, "retell_llm": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "begin_message": "Hey I am a virtual assistant calling from Retell Hospital.", "kb_config": { @@ -2315,6 +2371,13 @@ async def test_method_create_web_call_with_all_params(self, async_client: AsyncR "webhook_url": "https://webhook-url-here", }, "conversation_flow": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "kb_config": { "filter_score": 0.6, @@ -2345,6 +2408,13 @@ async def test_method_create_web_call_with_all_params(self, async_client: AsyncR "tool_call_strict_mode": True, }, "retell_llm": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "begin_message": "Hey I am a virtual assistant calling from Retell Hospital.", "kb_config": { @@ -2651,6 +2721,13 @@ async def test_method_register_phone_call_with_all_params(self, async_client: As "webhook_url": "https://webhook-url-here", }, "conversation_flow": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "kb_config": { "filter_score": 0.6, @@ -2681,6 +2758,13 @@ async def test_method_register_phone_call_with_all_params(self, async_client: As "tool_call_strict_mode": True, }, "retell_llm": { + "backup_model": { + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, "begin_after_user_silence_ms": 2000, "begin_message": "Hey I am a virtual assistant calling from Retell Hospital.", "kb_config": { diff --git a/tests/api_resources/test_conversation_flow.py b/tests/api_resources/test_conversation_flow.py index 0a2d5cf9..90fa0bd7 100644 --- a/tests/api_resources/test_conversation_flow.py +++ b/tests/api_resources/test_conversation_flow.py @@ -179,6 +179,13 @@ def test_method_create_with_all_params(self, client: Retell) -> None: } ], start_speaker="agent", + backup_model={ + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, begin_after_user_silence_ms=2000, begin_tag_display_position={ "x": 100, @@ -593,6 +600,13 @@ def test_method_update_with_all_params(self, client: Retell) -> None: conversation_flow = client.conversation_flow.update( conversation_flow_id="conversation_flow_id", version=1, + backup_model={ + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, begin_after_user_silence_ms=2000, begin_tag_display_position={ "x": 100, @@ -1321,6 +1335,13 @@ async def test_method_create_with_all_params(self, async_client: AsyncRetell) -> } ], start_speaker="agent", + backup_model={ + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, begin_after_user_silence_ms=2000, begin_tag_display_position={ "x": 100, @@ -1735,6 +1756,13 @@ async def test_method_update_with_all_params(self, async_client: AsyncRetell) -> conversation_flow = await async_client.conversation_flow.update( conversation_flow_id="conversation_flow_id", version=1, + backup_model={ + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, begin_after_user_silence_ms=2000, begin_tag_display_position={ "x": 100, diff --git a/tests/api_resources/test_llm.py b/tests/api_resources/test_llm.py index 2e13d7f8..4c446114 100644 --- a/tests/api_resources/test_llm.py +++ b/tests/api_resources/test_llm.py @@ -30,6 +30,13 @@ def test_method_create(self, client: Retell) -> None: @parametrize def test_method_create_with_all_params(self, client: Retell) -> None: llm = client.llm.create( + backup_model={ + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, begin_after_user_silence_ms=2000, begin_message="Hey I am a virtual assistant calling from Retell Hospital.", default_dynamic_variables={"customer_name": "John Doe"}, @@ -261,6 +268,13 @@ def test_method_update_with_all_params(self, client: Retell) -> None: llm = client.llm.update( llm_id="16b980523634a6dc504898cda492e939", version=1, + backup_model={ + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, begin_after_user_silence_ms=2000, begin_message="Hey I am a virtual assistant calling from Retell Hospital.", default_dynamic_variables={"customer_name": "John Doe"}, @@ -544,6 +558,13 @@ async def test_method_create(self, async_client: AsyncRetell) -> None: @parametrize async def test_method_create_with_all_params(self, async_client: AsyncRetell) -> None: llm = await async_client.llm.create( + backup_model={ + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, begin_after_user_silence_ms=2000, begin_message="Hey I am a virtual assistant calling from Retell Hospital.", default_dynamic_variables={"customer_name": "John Doe"}, @@ -775,6 +796,13 @@ async def test_method_update_with_all_params(self, async_client: AsyncRetell) -> llm = await async_client.llm.update( llm_id="16b980523634a6dc504898cda492e939", version=1, + backup_model={ + "model": "gpt-4.1", + "type": "cascading", + "backup_kick_in_timeout": 300, + "high_priority": True, + "ultrafast": True, + }, begin_after_user_silence_ms=2000, begin_message="Hey I am a virtual assistant calling from Retell Hospital.", default_dynamic_variables={"customer_name": "John Doe"},