Skip to main content

Interface to handle multiple LLMs and AI tools.

Project description

llmax

Python package to manage most external and internal LLM APIs fluently.

Installation

To install, run the following command:

python3 -m pip install delos-llmax

How to use

You first have to define a list of Deployment as such, where you need to specify the endpoints, key and deployment_name. Then create the client:

from llmax.clients import MultiAIClient
from llmax.models import Deployment, Model

deployments: dict[Model, Deployment] = {
        "gpt-4o": Deployment(
            model="gpt-4o",
            provider="azure",
            deployment_name="gpt-4o-2024-05-13",
            api_key=os.getenv("LLMAX_AZURE_OPENAI_SWEDENCENTRAL_KEY", ""),
            endpoint=os.getenv("LLMAX_AZURE_OPENAI_SWEDENCENTRAL_ENDPOINT", ""),
        ),
        "whisper-1": Deployment(
            model="whisper-1",
            provider="azure",
            deployment_name="whisper-1",
            api_key=os.getenv("LLMAX_AZURE_OPENAI_SWEDENCENTRAL_KEY", ""),
            endpoint=os.getenv("LLMAX_AZURE_OPENAI_SWEDENCENTRAL_ENDPOINT", ""),
            api_version="2024-02-01",
        ),
    }

client = MultiAIClient(
        deployments=deployments,
    )

Then you should define your input (that can be a text, image or audio, following the openai documentation for instance).

messages = [
        {"role": "user", "content": "Raconte moi une blague."},
    ]

And finally get the response:

response = client.invoke_to_str(messages, model)
print(response)

Requêter des modèles

Le client MultiAIClient offre plusieurs méthodes pour interagir avec les modèles, que ce soit de manière synchrone ou asynchrone.

Méthodes synchrones

invoke_to_str()

La méthode la plus simple pour obtenir une réponse textuelle directement :

response = client.invoke_to_str(
    messages=messages,
    model="gpt-4o",
    system="Tu es un assistant utile.",  # Optionnel
    delay=0.0,  # Délai entre les tentatives en cas d'erreur
    tries=1,  # Nombre de tentatives en cas de rate limit
)
print(response)  # Affiche directement le texte de la réponse

invoke()

Retourne l'objet de réponse complet (déprécié, préférez la version asynchrone) :

response = client.invoke(messages, model="gpt-4o")
print(response.choices[0].message.content)

Méthodes asynchrones

ainvoke_to_str()

Version asynchrone de invoke_to_str() :

import asyncio

async def main():
    response = await client.ainvoke_to_str(
        messages=messages,
        model="gpt-4o",
        system="Tu es un assistant utile.",
    )
    print(response)

asyncio.run(main())

ainvoke()

Version asynchrone qui retourne l'objet de réponse complet :

response = await client.ainvoke(messages, model="gpt-4o")
print(response.choices[0].message.content)

Streaming avec astream()

Pour recevoir les réponses en temps réel au fur et à mesure de leur génération :

async def stream_response():
    async for chunk in client.astream(messages, model="gpt-4o"):
        if chunk.content:
            print(chunk.content, end="", flush=True)

asyncio.run(stream_response())

Paramètres supplémentaires

Toutes les méthodes acceptent des paramètres supplémentaires via **kwargs qui sont transmis directement à l'API sous-jacente. Par exemple :

response = await client.ainvoke_to_str(
    messages=messages,
    model="gpt-4o",
    temperature=0.7,  # Contrôle la créativité
    max_tokens=500,  # Limite la longueur de la réponse
    top_p=0.9,  # Contrôle la diversité
)

Modèles Scaleway

Les modèles Scaleway utilisent une API compatible OpenAI, ce qui permet une intégration transparente avec llmax. Pour utiliser un modèle Scaleway, vous devez configurer le déploiement avec le provider "scaleway" et fournir soit un endpoint complet, soit un project_id (recommandé).

Configuration d'un modèle Scaleway

Option 1 : Utilisation avec project_id (recommandé)

L'URL sera automatiquement construite comme https://api.scaleway.ai/v1/{project_id} :

from llmax.clients import MultiAIClient
from llmax.models import Deployment, Model
import os

deployments: dict[Model, Deployment] = {
    "scaleway/llama-3.3-70b-instruct": Deployment(
        model="scaleway/llama-3.3-70b-instruct",
        provider="scaleway",
        deployment_name="llama-3.3-70b-instruct",  # Le nom du déploiement sur Scaleway
        api_key=os.getenv("SCALEWAY_API_KEY", ""),
        project_id=os.getenv("SCALEWAY_PROJECT_ID", ""),  # Recommandé
    ),
    "scaleway/qwen3-235b-a22b-instruct-2507": Deployment(
        model="scaleway/qwen3-235b-a22b-instruct-2507",
        provider="scaleway",
        deployment_name="qwen3-235b-a22b-instruct-2507",
        api_key=os.getenv("SCALEWAY_API_KEY", ""),
        project_id=os.getenv("SCALEWAY_PROJECT_ID", ""),
    ),
}

client = MultiAIClient(deployments=deployments)

Option 2 : Utilisation avec endpoint complet (rétrocompatibilité)

Vous pouvez également fournir un endpoint complet si vous préférez :

deployments: dict[Model, Deployment] = {
    "scaleway/llama-3.3-70b-instruct": Deployment(
        model="scaleway/llama-3.3-70b-instruct",
        provider="scaleway",
        deployment_name="llama-3.3-70b-instruct",
        api_key=os.getenv("SCALEWAY_API_KEY", ""),
        endpoint=os.getenv("SCALEWAY_ENDPOINT", ""),  # Ex: https://api.scaleway.ai/v1/your-project-id
    ),
}

Note : Vous devez fournir soit endpoint soit project_id, mais pas nécessairement les deux. Si vous fournissez project_id, l'URL sera construite automatiquement selon la spécification OpenAPI Scaleway.

Utilisation des modèles Scaleway

Une fois configuré, l'utilisation est identique aux autres modèles :

messages = [
    {"role": "user", "content": "Explique-moi le machine learning en quelques phrases."},
]

# Utilisation synchrone
response = client.invoke_to_str(
    messages=messages,
    model="scaleway/llama-3.3-70b-instruct",
)

# Utilisation asynchrone
response = await client.ainvoke_to_str(
    messages=messages,
    model="scaleway/qwen3-235b-a22b-instruct-2507",
    temperature=0.8,
    max_tokens=300,
)

Modèles Scaleway disponibles

Les modèles suivants sont supportés :

  • scaleway/qwen3-235b-a22b-instruct-2507 - Modèle Qwen 3 (235B)
  • scaleway/gpt-oss-120b - GPT Open Source (120B)
  • scaleway/gemma-3-27b-it - Gemma 3 (27B)
  • scaleway/whisper-large-v3 - Whisper pour la transcription audio
  • scaleway/voxtral-small-24b-2507 - Voxtral Small (24B)
  • scaleway/mistral-small-3.2-24b-instruct-2506 - Mistral Small 3.2 (24B)
  • scaleway/llama-3.3-70b-instruct - Llama 3.3 (70B)
  • scaleway/deepseek-r1-distill-llama-70b - DeepSeek R1 Distill (70B)

Note spéciale pour le modèle Qwen

Le modèle scaleway/qwen3-235b-a22b-instruct-2507 nécessite un format spécial pour les réponses JSON. Si vous utilisez response_format={"type": "json_object"}, il sera automatiquement transformé en format json_schema requis par Scaleway :

response = await client.ainvoke_to_str(
    messages=messages,
    model="scaleway/qwen3-235b-a22b-instruct-2507",
    response_format={"type": "json_object"},  # Transformé automatiquement
)

Specificities

When creating the client, you can also specify two functions, increment_usage and get_usage. The first one is Callable[[float, Model], bool] while the second is Callable[[], float]. increment_usage is a function that is called after a call of the llm. The float is the price and Model, the model used. It can therefore be used to update your database. get_usage returns whether a condition is met. For instance, it can be a function that calls your database and returns whether the user is still active.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

delos_llmax-1.12.2.tar.gz (29.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

delos_llmax-1.12.2-py3-none-any.whl (37.6 kB view details)

Uploaded Python 3

File details

Details for the file delos_llmax-1.12.2.tar.gz.

File metadata

  • Download URL: delos_llmax-1.12.2.tar.gz
  • Upload date:
  • Size: 29.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.11.2 Linux/6.12.58-1-lts

File hashes

Hashes for delos_llmax-1.12.2.tar.gz
Algorithm Hash digest
SHA256 b8e83d8a7642ae16fb99cc4db2131be86e44750a27cd06f50a2613a1fa723533
MD5 780075a69ee6e615258e1c35cfb480d9
BLAKE2b-256 9f82167dfe68f01033e4e7bc5e8978a71ab8e47427e3ab41c1fe5b7e74fbb46b

See more details on using hashes here.

File details

Details for the file delos_llmax-1.12.2-py3-none-any.whl.

File metadata

  • Download URL: delos_llmax-1.12.2-py3-none-any.whl
  • Upload date:
  • Size: 37.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.11.2 Linux/6.12.58-1-lts

File hashes

Hashes for delos_llmax-1.12.2-py3-none-any.whl
Algorithm Hash digest
SHA256 570ae599f972963ec38eaf5990988a7005178f50ad5c585ce58830213c423fae
MD5 437f72b0fd26ea493403c33bf8c58c9a
BLAKE2b-256 aa3c646213e10c07964ea17109243e00e670b3c1b44bbbafadd0503c85c12d5c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page