Zum Inhalt

Asynchrone Operationen

Elluminate unterstützt asynchrone Operationen für verbesserte Leistung bei der Arbeit mit mehreren Prompts oder Evaluierungen. Dies ist besonders nützlich bei:

  • Batch-Verarbeitung: Gleichzeitige Verarbeitung mehrerer Prompts oder Responses
  • Leistungsoptimierung: Reduzierung der Gesamtausführungszeit bei umfangreichen Evaluierungen
  • Ressourceneffizienz: Bessere Nutzung der Systemressourcen während I/O-Operationen

Das folgende Beispiel zeigt, wie man asynchrone Operationen mit Collections in Elluminate verwendet:

import asyncio

from dotenv import load_dotenv
from elluminate import Client

load_dotenv(override=True)


async def run_eval() -> None:
    client = Client()

    prompt_template, _ = await client.prompt_templates.aget_or_create(
        "Please write a short summary of the life of {{person}} from {{state}}.",
        name="Summary of Person",
    )

    values = [
        {"person": "Paul Revere", "state": "Massachusetts"},
        {"person": "George Washington", "state": "Virginia"},
    ]
    collection, _ = await client.collections.aget_or_create(
        name="Founding Fathers", description="A collection of Founding Fathers"
    )  # (1)!

    await asyncio.gather(
        *[
            client.template_variables.aadd_to_collection(template_variables, collection)
            for template_variables in values
        ]
    )  # (2)!

    await client.criteria.aget_or_generate_many(prompt_template)
    responses = await client.responses.agenerate_many(prompt_template, collection=collection)
    criteria_ratings = await asyncio.gather(*(client.ratings.arate(response) for response in responses))

    for ratings in criteria_ratings:
        for rating in ratings:
            print(f"Criteria: {rating.criterion.criterion_str}")
            print(f"Rating: {rating.rating}\n")


asyncio.run(run_eval())
  1. Asynchrone Methoden in Elluminate haben das Präfix a. Zum Beispiel aget_or_create_collection anstelle von get_or_create_collection.

  2. Die Verwendung von asyncio.gather ermöglicht die gleichzeitige Ausführung mehrerer asynchroner Operationen, was die Leistung beim Hinzufügen mehrerer Einträge deutlich verbessert.

Die meisten Elluminate SDK-Operationen haben asynchrone Gegenstücke, wodurch es einfach ist, bestehenden synchronen Code in asynchronen umzuwandeln. Folgen Sie einfach diesen Schritten:

  1. Fügen Sie den Methoden das Präfix a hinzu (z.B. arate statt rate)
  2. Verwenden Sie await bei asynchronen Methodenaufrufen
  3. Verpacken Sie Ihren Code in eine asynchrone Funktion
  4. Nutzen Sie asyncio.run() zur Ausführung der asynchronen Funktion

Wenn Sie mit mehreren Operationen arbeiten, sollten Sie die Verwendung von asyncio.gather() in Betracht ziehen, um diese parallel auszuführen, wie im obigen Beispiel gezeigt.