File tree Expand file tree Collapse file tree 4 files changed +56
-2
lines changed Expand file tree Collapse file tree 4 files changed +56
-2
lines changed Original file line number Diff line number Diff line change @@ -111,3 +111,24 @@ def track(event_properties: BaseEvent):
111111 return
112112
113113 requests .post (USAGE_TRACKING_URL , json = payload , timeout = USAGE_REQUESTS_TIMEOUT_SEC )
114+
115+
116+ class IsCompleteEvent (BaseEvent ):
117+ is_completed : bool = True # True if the event was completed, False otherwise
118+
119+
120+ @silent
121+ def track_was_completed (func : t .Callable [P , T ]) -> t .Callable [P , T ]: # pragma: no cover
122+ """
123+ Track if the function was completed. This helps us understand failure cases and improve the user experience. Disable tracking by setting the environment variable RAGAS_DO_NOT_TRACK to True as usual.
124+ """
125+
126+ @wraps (func )
127+ def wrapper (* args : P .args , ** kwargs : P .kwargs ) -> t .Any :
128+ track (IsCompleteEvent (event_type = func .__name__ , is_completed = False ))
129+ result = func (* args , ** kwargs )
130+ track (IsCompleteEvent (event_type = func .__name__ , is_completed = True ))
131+
132+ return result
133+
134+ return wrapper
Original file line number Diff line number Diff line change 99from langchain_core .embeddings import Embeddings as LangchainEmbeddings
1010from langchain_core .language_models import BaseLanguageModel as LangchainLLM
1111
12- from ragas ._analytics import EvaluationEvent , track
12+ from ragas ._analytics import EvaluationEvent , track , track_was_completed
1313from ragas .callbacks import new_group
1414from ragas .cost import TokenUsage
1515from ragas .embeddings .base import (
4646 from ragas .cost import CostCallbackHandler , TokenUsageParser
4747
4848
49+ @track_was_completed
4950def evaluate (
5051 dataset : Dataset ,
5152 metrics : list [Metric ] | None = None ,
Original file line number Diff line number Diff line change 1010from langchain_openai .chat_models import ChatOpenAI
1111from langchain_openai .embeddings import OpenAIEmbeddings
1212
13- from ragas ._analytics import TestsetGenerationEvent , track
13+ from ragas ._analytics import TestsetGenerationEvent , track , track_was_completed
1414from ragas .embeddings .base import (
1515 BaseRagasEmbeddings ,
1616 LangchainEmbeddingsWrapper ,
@@ -231,6 +231,7 @@ def init_evolution(self, evolution: Evolution) -> None:
231231 if evolution .evolution_filter is None :
232232 evolution .evolution_filter = EvolutionFilter (llm = self .critic_llm )
233233
234+ @track_was_completed
234235 def generate (
235236 self ,
236237 test_size : int ,
Original file line number Diff line number Diff line change 11from __future__ import annotations
2+ import typing as t
3+ import pytest
24
35
46def test_debug_tracking_flag ():
@@ -125,3 +127,32 @@ def test_testset_generation_tracking(monkeypatch):
125127 monkeypatch .setattr (analyticsmodule , "do_not_track" , lambda : False )
126128 monkeypatch .setattr (analyticsmodule , "_usage_event_debugging" , lambda : False )
127129 track (testset_event_payload )
130+
131+
132+ def test_was_completed (monkeypatch ):
133+ from ragas ._analytics import track_was_completed , IsCompleteEvent
134+
135+ event_properties_list : t .List [IsCompleteEvent ] = []
136+
137+ def echo_track (event_properties ):
138+ event_properties_list .append (event_properties )
139+
140+ monkeypatch .setattr ("ragas._analytics.track" , echo_track )
141+
142+ @track_was_completed
143+ def test (raise_error = True ):
144+ if raise_error :
145+ raise ValueError ("test" )
146+ else :
147+ pass
148+
149+ with pytest .raises (ValueError ):
150+ test (raise_error = True )
151+
152+ assert event_properties_list [- 1 ].event_type == "test"
153+ assert event_properties_list [- 1 ].is_completed is False
154+
155+ test (raise_error = False )
156+
157+ assert event_properties_list [- 1 ].event_type == "test"
158+ assert event_properties_list [- 1 ].is_completed is True
You can’t perform that action at this time.
0 commit comments