cloudflare / cloudflare/cloudflare-python

path_template URL-encodes slashes in model name, breaking ai.run() in v5

Offen Anfängerfreundlich
#2,718 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
506
Forks
148
Ø Merge
3 Std. 15 Min.
Gemergte PRs (30 T.)
1

Beschreibung

### Confirm this is a Python library issue and not an underlying Cloudflare API issue.

- [x] This is an issue with the Python library

### Describe the bug

# Bug: `path_template` URL-encodes slashes in model name, breaking `ai.run()` in v5

## Description

After upgrading from `cloudflare` Python SDK v4.3.1 to v5.x, my calls to `client.ai.run()` fail with a `400` error:

```json
{
"success": false,
"errors": [{"code": 7000, "message": "No route for that URI"}],
"messages": [],
"result": null
}
```

The root cause seems to be that `path_template()` URL-encodes the forward slashes (`/` → `%2F`) in the `model_name` parameter, producing an invalid API path.

## Expected path

```
/accounts/{account_id}/ai/run/@cf/black-forest-labs/flux-1-schnell
```

## Actual path (v5)

```
/accounts/{account_id}/ai/run/@cf%2Fblack-forest-labs%2Fflux-1-schnell
```

## Reproduction

```python
from cloudflare import Cloudflare

client = Cloudflare(api_token="")

# This worked in v4.3.1, fails in v5 with "No route for that URI"
result = client.ai.run(
"@cf/black-forest-labs/flux-1-schnell",
account_id="",
prompt="a cat sitting on a chair",
)
```

I also confirmed the encoding without making an API call:

```python
from cloudflare._utils import path_template

path = path_template(
"/accounts/{account_id}/ai/run/{model_name}",
account_id="test123",
model_name="@cf/black-forest-labs/flux-1-schnell",
)
print(path)
# Output: /accounts/test123/ai/run/@cf%2Fblack-forest-labs%2Fflux-1-schnell
# Expected: /accounts/test123/ai/run/@cf/black-forest-labs/flux-1-schnell
```

## Environment

- **SDK version:** 5.0.0 / 5.1.0 (both affected)
- **Python:** 3.12
- **OS:** Ubuntu 24 (GitHub Actions runner) — also reproducible locally
- **Last working version:** 4.3.1

## Impact

This breaks **every** `client.ai.run()` call for any model which identifiers contain slashes (e.g. `@cf/meta/llama-3.1-8b-instruct`, `@cf/black-forest-labs/flux-1-schnell`, etc.).

## Workaround

In the meantime, I am using a workaround based on the REST API directly to bypass the SDK:

```python
import requests

response = requests.post(
f"https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/run/@cf/black-forest-labs/flux-1-schnell",
headers={"Authorization": f"Bearer {api_token}"},
json={"prompt": "a cat sitting on a chair"},
)
data = response.json()
```

### To Reproduce

```python
from cloudflare import Cloudflare

client = Cloudflare(api_token="")

# This worked in v4.3.1, fails in v5 with "No route for that URI"
result = client.ai.run(
"@cf/black-forest-labs/flux-1-schnell",
account_id="",
prompt="a cat sitting on a chair",
)
```

### Code snippets

```Python

```

### OS

Linux Fedora

### Python version

3.12

### Library version

5.1.0

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne in cloudflare._utils.path_template und verfolge den Einstiegspunkt client.ai.run unter Verwendung des Modellnamens aus der Reproduktion. Überprüfe den generierten Pfad anhand des erwarteten ungeteilten Modellpfads und ergänze oder aktualisiere anschließend fokussierte Tests, sodass Modellbezeichner mit Schrägstrichen die erwartete Route erzeugen, ohne gewöhnliche Parameter zu beeinträchtigen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
api
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Ruhig
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
65/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.