Tous les modèles, capacités et tarifs

SDK Python

Deux voies en Python — anthropic pour du code Claude natif, openai pour les migrations. Les deux fonctionnent en changeant uniquement base_url.

Installation

bash
pip3 install anthropic
# or, for OpenAI-style code:
pip3 install openai

# In a venv (recommended):
# python3 -m venv .venv && source .venv/bin/activate
# pip install anthropic openai

SDK Anthropic

python
import os
from anthropic import Anthropic

client = Anthropic(
    api_key=os.environ["API_AI_KEY"],
    base_url="https://api-ai.fr",
)

resp = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Say hi."}],
)
print(resp.content[0].text)

OpenAI-compatible

python
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["API_AI_KEY"],
    base_url="https://api-ai.fr/v1",
)

resp = client.chat.completions.create(
    model="claude-sonnet-5-5",
    messages=[{"role": "user", "content": "Say hi."}],
)
print(resp.choices[0].message.content)

Client asynchrone

python
import asyncio
from anthropic import AsyncAnthropic

async def main():
    client = AsyncAnthropic(base_url="https://api-ai.fr")
    resp = await client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=512,
        messages=[{"role": "user", "content": "Hi async."}],
    )
    print(resp.content[0].text)

asyncio.run(main())

Streaming

python
with client.messages.stream(
    model="claude-sonnet-5-5",
    max_tokens=512,
    messages=[{"role": "user", "content": "Tell me a haiku."}],
) as stream:
    for chunk in stream.text_stream:
        print(chunk, end="", flush=True)

Utilisation d’outils

python
tools = [{
    "name": "get_weather",
    "description": "Get current weather for a city.",
    "input_schema": {
        "type": "object",
        "properties": {"city": {"type": "string"}},
        "required": ["city"],
    },
}]

resp = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "What's the weather in Paris?"}],
)
# resp.stop_reason == "tool_use"
# Inspect resp.content for tool_use blocks.

Nouvelles tentatives et gestion des erreurs

python
from anthropic import APIStatusError
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(
    stop=stop_after_attempt(3),
    wait=wait_exponential(multiplier=0.5, min=0.5, max=4),
    retry_error_cls=APIStatusError,
)
def call():
    return client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=512,
        messages=[{"role": "user", "content": "Hi."}],
    )
Ne codez pas la clé en dur
Lisez toujours la clé depuis une variable d’environnement ou un gestionnaire de secrets. Une clé codée en dur finit tôt ou tard dans le gestionnaire de versions.
Dernière mise à jour : 2 octobre 2026Une erreur ? support@minedom-france.fr