Passer au contenu principal
Dans Weave, les attributs vous permettent d’associer des métadonnées personnalisées à vos traces et évaluations. Ces métadonnées peuvent inclure des informations comme des noms d’environnement, des versions de modèle, des ID d’expérience, des ID d’utilisateur ou d’autres informations contextuelles pour vous aider à organiser, filtrer et analyser vos données Weave. Les attributs sont particulièrement utiles lorsque vous devez regrouper ou filtrer les traces en fonction des éléments suivants :
  • Déploiements
  • tenants
  • Experiments
Weave propose deux façons d’ajouter des attributs :
  • Attributs par appel : utilisez weave.attributes() pour ajouter des métadonnées à des opérations spécifiques ou à des blocs de code
  • Attributs globaux : utilisez le champ global_attributes pour définir des attributs lors de l’initialisation, qui s’appliquent à toutes les traces et évaluations de votre projet
Vous pouvez afficher tous les attributs enregistrés au cours des traces et des évaluations dans l’UI. Vous pouvez ensuite les utiliser pour filtrer et regrouper les données.
call.attributes ne peut pas être modifié une fois l’appel commencé. Utilisez ce gestionnaire de contexte pour définir les métadonnées avant d’invoquer l’op.

Attributs par appel

Le gestionnaire de contexte weave.attributes() vous permet d’ajouter des métadonnées à des opérations tracées spécifiques. Vous pouvez ainsi associer des informations contextuelles à certains appels de fonction ou runs d’évaluation.
import weave

weave.init("<your-team-name/your-project-name>")

@weave.op
def my_function(name: str):
    return f"Hello, {name}!"

# Ajouter des attributs à un appel spécifique
with weave.attributes({'env': 'production', 'user_id': '12345'}):
    result = my_function("World")
La fonction applique les attributs à toutes les opérations tracées dans le bloc du gestionnaire de contexte (Python) ou dans la fonction de rappel (TypeScript). Vous pouvez également imbriquer des contextes weave.attributes(). Les contextes internes remplacent les contextes externes pour les mêmes clés :
@weave.op
def process_data(data: str):
    return data.upper()

# Contexte externe
with weave.attributes({
    "env": "production",
    "version": "1.0.0",
    "region": "us-west-2"
}):
    process_data("hello")  # Inclut les trois attributs
    
    # Le contexte interne remplace 'version'
    with weave.attributes({
        "version": "1.1.0",
        "experiment": "exp-456"
    }):
        process_data("world")  # Inclut env='production', version='1.1.0', region='us-west-2', experiment='exp-456'

Attributs globaux

Lorsque vous définissez des attributs globaux lors de l’initialisation de Weave, ils s’appliquent automatiquement à toutes les traces et évaluations de votre projet. C’est utile pour transmettre des métadonnées à l’échelle du projet, comme l’environnement, la version du déploiement ou les informations sur l’équipe.
import weave

weave.init(
    "my-project",
    global_attributes={
        "env": "production",
        "app_version": "2.1.0",
        "region": "us-west-2",
        "team": "ml-platform"
    }
)

# Le dictionnaire global_attributes applique désormais ces attributs à toutes les opérations suivantes
@weave.op
def my_function():
    return "Hello"

my_function()  # Hérite automatiquement de tous les attributs globaux

# Les évaluations héritent également des attributs globaux
evaluation = weave.Evaluation(dataset=examples, scorers=[scorer])
asyncio.run(evaluation.evaluate(model))  # Hérite de tous les attributs globaux

Combiner les attributs globaux et les attributs par appel

Vous pouvez utiliser conjointement des attributs globaux et des attributs par appel. Les attributs par appel qui ont la même clé remplacent les attributs globaux :
import weave

# Définir les attributs globaux
weave.init(
    "my-project",
    global_attributes={
        "env": "production",
        "app_version": "2.1.0"
    }
)

@weave.op
def process(data: str):
    return data

# Cet appel utilise : env='production', app_version='2.1.0'
process("test1")

# Cet appel utilise : env='staging', app_version='2.1.0', experiment='A'
with weave.attributes({'env': 'staging', 'experiment': 'A'}):
    process("test2")

Obtenir des attributs pendant l’exécution

Renvoie l’ensemble actuel des attributs enregistrés pour votre appel. Cela peut vous aider à déboguer vos appels ou à exploiter le contexte dans une logique conditionnelle.
L’exemple suivant utilise le décorateur Weave pour enregistrer la fonction process_data, configure les attributs à enregistrer, puis les renvoie à l’exécution.
import weave

weave.init("your-team/your-project")

@weave.op
def process_data(data: str):
    # Obtenir l'appel courant à l'intérieur de l'op
    call = weave.get_current_call()
    if call:
        print(f"Attributes: {call.attributes}")
    return data.upper()

# Définir des attributs et exécuter la fonction
with weave.attributes({
    "env": "production",
    "version": "1.0.0",
    "region": "us-west-2"
}):
    process_data("hello")
    
    with weave.attributes({
        "version": "1.1.0",
        "experiment": "exp-456"
    }):
        process_data("world")
Cela produit :
Attributes: {'env': 'production', 'version': '1.0.0', 'region': 'us-west-2'}
Attributes: {'env': 'production', 'version': '1.1.0', 'region': 'us-west-2', 'experiment': 'exp-456'}
weave.get_current_call() fonctionne uniquement à l’intérieur d’une fonction décorée avec @weave.op. En dehors d’un op, il renvoie None.