cloudflare / cloudflare/cloudflare-python
path_template URL-encodes slashes in model name, breaking ai.run() in v5
- Dominant language
- Python
- Stars
- 506
- Forks
- 148
- Avg merge
- 3h 15m
- Merged PRs (30d)
- 1
Description
### 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
Contributor guide
Assessment
This issue has not been assessed yet.