cloudflare / cloudflare/cloudflare-python

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

Aberta Para iniciantes
#2,718 1 comentário 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
Python
Estrelas
506
Forks
148
Merge médio
3h 15min
PRs com merge (30d)
1

Descrição

### 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

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Comece em cloudflare._utils.path_template e siga o ponto de entrada client.ai.run usando o nome do modelo da reprodução. Verifique o caminho gerado em relação ao caminho esperado do modelo não dividido e, em seguida, adicione ou atualize uma cobertura focada para que identificadores de modelo que contenham barras produzam a rota esperada sem quebrar parâmetros comuns.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
api
Tipo de issue
Bug
Dificuldade
2/5
Tempo estimado
1-3 horas
Status de atividade
Pouca atividade
Clareza
Claramente especificada
Facilidade para iniciantes
65/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.