Skip to main content

henergyqueai

La bibliothèque officielle de l’API HenergyqueAI pour Python : Velys, Oryne et Aelyr en quelques lignes.

  • Python 3.9+, une seule dépendance (httpx).
  • Un client classique et un client asynchrone.
  • Streaming, outils, images, sorties JSON.
  • Nouvelles tentatives automatiques sur les erreurs passagères.
pip install henergyqueai

Créez une clé sur henergyqueai.fr/plateforme/cles, puis :

export HENERGYQUEAI_API_KEY="hak_…"

Premier appel

from henergyqueai import HenergyqueAI

client = HenergyqueAI()  # lit HENERGYQUEAI_API_KEY

print(client.ask("Donne-moi trois idées de prénom pour un chat."))

ask utilise Velys par défaut :

client.ask("Relis cette fonction.", model="oryne", system="Réponds en une phrase.")

Conversation complète

reponse = client.chat.create(
    model="oryne",
    messages=[
        {"role": "system", "content": "Tu es un relecteur de code exigeant."},
        {"role": "user", "content": "Que penses-tu de `for i in range(len(liste))` ?"},
    ],
    temperature=0.3,
)

print(reponse.text)  # le texte, déjà extrait
print(reponse.usage.total_tokens)

Les réponses sont des dictionnaires dont les clés se lisent aussi comme des attributs : reponse.choices[0].message.content ou reponse["choices"][0]["message"]["content"].

Streaming

with client.chat.stream(
    model="velys",
    messages=[{"role": "user", "content": "Raconte une histoire courte."}],
) as flux:
    for texte in flux.text_stream:
        print(texte, end="", flush=True)
    finale = flux.final_completion()

Client asynchrone

import asyncio
from henergyqueai import AsyncHenergyqueAI

async def main():
    async with AsyncHenergyqueAI() as client:
        print(await client.ask("Bonjour !"))
        flux = client.chat.stream(model="velys", messages=[{"role": "user", "content": "Un haïku."}])
        async for texte in flux.text_stream:
            print(texte, end="", flush=True)

asyncio.run(main())

Outils

import json

reponse = client.chat.create(
    model="oryne",
    messages=[{"role": "user", "content": "Quel temps fait-il à Nantes ?"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "meteo",
            "description": "La météo actuelle d’une ville",
            "parameters": {"type": "object", "properties": {"ville": {"type": "string"}}, "required": ["ville"]},
        },
    }],
)

for appel in reponse.choices[0].message.get("tool_calls") or []:
    ville = json.loads(appel.function.arguments)["ville"]
    # … exécutez l’outil, puis renvoyez son résultat dans un message {"role": "tool", "tool_call_id": appel.id, "content": …}

Format messages

message = client.messages.create(
    model="aelyr",
    system="Tu es précis et concis.",
    messages=[{"role": "user", "content": "Explique la différence entre TCP et UDP."}],
)
print(message.text)

with client.messages.stream(model="aelyr", messages=[{"role": "user", "content": "Un haïku."}]) as flux:
    for texte in flux.text_stream:
        print(texte, end="")

client.messages.count_tokens(model="velys", messages=[{"role": "user", "content": "Bonjour"}]).input_tokens

max_tokens vaut 1024 par défaut dans la bibliothèque.

Modèles et consommation

[modele.id for modele in client.models.list()]  # ["velys", "oryne", "aelyr"]
client.models.retrieve("oryne")
client.usage().requests.remaining

Erreurs

from henergyqueai import RateLimitError, AuthenticationError

try:
    client.ask("Bonjour")
except RateLimitError as erreur:
    print(f"Réessayez dans {erreur.retry_after} s.")
except AuthenticationError:
    print("Clé invalide.")

Chaque erreur porte status, type, code, param, request_id et retry_after. Les autres classes sont InvalidRequestError, PermissionDeniedError, NotFoundError, ServerError, ConnectionError et TimeoutError, toutes filles de HenergyqueAIError.

Les erreurs passagères (429, 5xx, coupure réseau) sont retentées deux fois, en respectant retry-after. La limite quotidienne de votre offre n’est jamais retentée.

Options

client = HenergyqueAI(
    "hak_…",          # sinon HENERGYQUEAI_API_KEY
    timeout=60.0,     # secondes (10 minutes par défaut)
    max_retries=3,    # 2 par défaut
)

Licence

MIT

Release files for henergyqueai 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for henergyqueai 0.1.0
File Size Uploaded
henergyqueai-0.1.0.tar.gz 11.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for henergyqueai 0.1.0
File Interpreter ABI Platform
henergyqueai-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 22.8 kB

Release files / henergyqueai-0.1.0.tar.gz

Download URL henergyqueai-0.1.0.tar.gz
Size 11.3 kB
Tags Source
SHA-256 checksum
How to use checksums
da75be09113e15fec2b125fe40b873909f5ec3c5adaadb21efe8c86a02be6f38
BLAKE2b-256 checksum
How to use checksums
eb9641a79f2c9606c646d18310b19ac69cec89164f5f9cfef205d44d4b88708a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / henergyqueai-0.1.0-py3-none-any.whl

Download URL henergyqueai-0.1.0-py3-none-any.whl
Size 11.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
76de924c33b1c699514ed750aa90c2fd8d5a0e33de21de4e47355857357637d4
BLAKE2b-256 checksum
How to use checksums
4d297c34619e71bc82d807c3d719da2fbd0c095c88635a2bf0ab08bb3a4d4115
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page