Passer au contenu principal
Cette page répertorie les limites de Weave, les problèmes connus et les comportements attendus. Utilisez-la comme référence lorsque vous obtenez des résultats inattendus ou souhaitez comprendre comment Weave gère les cas limites.
  • Pour les requêtes susceptibles d’être retentées, Weave réessaie à partir d’1 seconde après la première erreur, puis double le délai entre les tentatives jusqu’à 5 minutes. Les requêtes expirent après 36 heures.
  • Au lieu de lever des exceptions, .call() capture les exceptions et les stocke dans call.exception. Si vous devez lever des exceptions pendant l’exécution, définissez le paramètre __should_raise, comme ceci :
    showLineNumbers
    # Ceci lève des exceptions
    result, call = foo.call(__should_raise=True)
    
  • Les instances Dedicated Weave utilisent une URL d’ingress OpenTelemetry différente. Pour plus d’informations sur les points de terminaison officiels, voir Envoyer des traces OpenTelemetry.
  • Weave tronque parfois les objets de données de trace volumineux. Cela se produit parce que la sortie de trace par défaut est un objet Python personnalisé brut que Weave ne peut pas sérialiser automatiquement. Pour renvoyer toutes vos données de trace, définissez un dictionnaire de chaînes, comme ceci :
    import weave
    
    class MyObj:
        """An object with a large string attribute."""
        def __init__(self, x: int):
            self.x = x
    
        def __repr__(self):
            return f"MyObj(x={self.x})"
    
        def to_dict(self):
            return {"x": self.x}
    
    @weave.op()
    def make_my_obj():
        x = "a" * 10_000
        return MyObj(x)
    
    def main():
        weave.init("<entity/project>")
    
        # Définir une opération traçable qui traite MyObj
        @weave.op()
        def process_obj(obj: MyObj) -> int:
            return len(obj.x)
    
        # Créer et traiter une grande instance de MyObj
        large_obj = make_my_obj()
        length = process_obj(large_obj)
        print(f"Length of x in MyObj: {length}")
        print("dict:", large_obj.to_dict())
    
    if __name__ == "__main__":
        main()