Skip to content

velora.callbacks

Documentation

User Guide - Tutorials: Callbacks

Methods that provide extra functionality for agent training.

CometAnalytics

Bases: TrainCallback

A callback that enables comet-ml cloud-based analytics tracking.

Requires Comet ML API key set using the COMET_API_KEY environment variable.

Features:

  • Upload agent configuration objects
  • Tracks episodic training metrics
  • Uploads video recordings (if RecordVideos callback applied)
Source code in velora/callbacks.py
Python
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
class CometAnalytics(TrainCallback):
    """
    A callback that enables [`comet-ml`](https://www.comet.com/site/) cloud-based
    analytics tracking.

    Requires Comet ML API key set using the `COMET_API_KEY` environment variable.

    Features:

    - Upload agent configuration objects
    - Tracks episodic training metrics
    - Uploads video recordings (if `RecordVideos` callback applied)
    """

    @override
    def __init__(
        self,
        project_name: str,
        experiment_name: str | None = None,
        *,
        tags: List[str] | None = None,
        experiment_key: str | None = None,
    ) -> None:
        """
        Parameters:
            project_name (str): the name of the Comet ML project to add this
                experiment to
            experiment_name (str, optional): the name of this experiment run.
                If `None`, automatically creates the name using the format
                `<agent_classname>_<env_name>_<n_episodes>ep`. Ignored when
                using `experiment_key`
            tags (List[str], optional): a list of tags associated with the
                experiment. If `None` adds the `agent_classname` and `env_name`
                by default. Ignored when using `experiment_key`
            experiment_key (str, optional): an existing Comet ML experiment key.
                Used for continuing an experiment
        """
        try:
            from comet_ml import Experiment
        except ImportError:
            raise ImportError(
                "Failed to load the 'comet_ml' package. Have you installed it using 'pip install velora[comet]'?"
            )

        api_key = os.getenv("COMET_API_KEY", None)
        if api_key is None or api_key == "":
            raise ValueError(
                "Missing 'api_key'! Store it as a 'COMET_API_KEY' environment variable."
            )

        self.experiment: Experiment | None = None
        self.experiment_key = experiment_key

        self.state = AnalyticsState(
            project_name=project_name,
            experiment_name=experiment_name,
            tags=tags,
        )

        self.project_name = project_name
        self.experiment_name = experiment_name if experiment_name else "auto"
        self.tags = tags if tags else "auto"

    def __call__(self, state: "TrainState") -> "TrainState":
        # Setup experiment
        if state.status == "start":
            # Update comet training state
            state.analytics_state = self.state
            state.analytics_update()

            self.init_experiment(state)

            # Log config
            self.experiment.log_parameters(state.agent.config.model_dump())

        # Send episodic metrics
        if state.status == "logging":
            if state.logging_type == "episode":
                self.log_episode_data(state)

        # Finalize training
        if state.status == "complete":
            # Log video recordings
            if state.record_state is not None:
                for video in state.record_state.dirpath.iterdir():
                    self.experiment.log_video(str(video), format="mp4")

            self.experiment.end()

        return state

    def log_episode_data(self, state: "TrainState") -> None:
        """
        Logs episodic data to the experiment.

        Parameters:
            state (TrainState): the current training state
        """
        results = get_current_episode(
            state.session,
            state.experiment_id,
            state.current_ep,
        )

        for item in results:
            reward_low = item.reward_moving_avg - item.reward_moving_std
            reward_high = item.reward_moving_avg + item.reward_moving_std

            self.experiment.log_metrics(
                {
                    "reward/moving_lower": reward_low,
                    "reward/moving_avg": item.reward_moving_avg,
                    "reward/moving_upper": reward_high,
                    "episode/return": item.reward,
                    "episode/length": item.length,
                    "losses/actor": item.actor_loss,
                    "losses/critic": item.critic_loss,
                    "losses/entropy": item.entropy_loss,
                },
                epoch=state.current_ep,
            )

    def init_experiment(self, state: "TrainState") -> None:
        """Setups up a comet experiment and stores it locally.

        Parameters:
            state (TrainState): the current training state
        """
        from comet_ml import ExistingExperiment, Experiment

        if self.experiment_key is not None:
            # Continue existing experiment
            self.experiment = ExistingExperiment(
                api_key=os.getenv("COMET_API_KEY", None),
                project_name=state.analytics_state.project_name,
                experiment_key=self.experiment_key,
                disabled=bool(os.getenv("VELORA_TEST_MODE", "").lower())
                in ("true", "1"),
                log_env_cpu=True,
                log_env_gpu=True,
                log_env_details=True,
            )
        else:
            # Start new experiment
            self.experiment = Experiment(
                api_key=os.getenv("COMET_API_KEY", None),
                project_name=state.analytics_state.project_name,
                auto_param_logging=False,
                auto_metric_logging=False,
                auto_output_logging=False,
                log_graph=False,
                display_summary_level=0,
                disabled=bool(os.getenv("VELORA_TEST_MODE", "").lower())
                in ("true", "1"),
            )

            self.experiment.set_name(state.analytics_state.experiment_name)
            self.experiment.add_tags(state.analytics_state.tags)

    def config(self) -> Tuple[str, Dict[str, Any]]:
        return self.__class__.__name__, {
            "project_name": self.project_name,
            "experiment_name": self.experiment_name,
            "tags": ",".join(self.tags) if isinstance(self.tags, list) else self.tags,
            "experiment_key": self.experiment_key,
        }

    def info(self) -> str:
        return f"'{self.__class__.__name__}' enabled with 'project_name={self.project_name}', 'experiment_name={self.experiment_name}' and 'tags={self.tags}'."

__init__(project_name, experiment_name=None, *, tags=None, experiment_key=None)

Parameters:

Name Type Description Default
project_name str

the name of the Comet ML project to add this experiment to

required
experiment_name str

the name of this experiment run. If None, automatically creates the name using the format <agent_classname>_<env_name>_<n_episodes>ep. Ignored when using experiment_key

None
tags List[str]

a list of tags associated with the experiment. If None adds the agent_classname and env_name by default. Ignored when using experiment_key

None
experiment_key str

an existing Comet ML experiment key. Used for continuing an experiment

None
Source code in velora/callbacks.py
Python
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
@override
def __init__(
    self,
    project_name: str,
    experiment_name: str | None = None,
    *,
    tags: List[str] | None = None,
    experiment_key: str | None = None,
) -> None:
    """
    Parameters:
        project_name (str): the name of the Comet ML project to add this
            experiment to
        experiment_name (str, optional): the name of this experiment run.
            If `None`, automatically creates the name using the format
            `<agent_classname>_<env_name>_<n_episodes>ep`. Ignored when
            using `experiment_key`
        tags (List[str], optional): a list of tags associated with the
            experiment. If `None` adds the `agent_classname` and `env_name`
            by default. Ignored when using `experiment_key`
        experiment_key (str, optional): an existing Comet ML experiment key.
            Used for continuing an experiment
    """
    try:
        from comet_ml import Experiment
    except ImportError:
        raise ImportError(
            "Failed to load the 'comet_ml' package. Have you installed it using 'pip install velora[comet]'?"
        )

    api_key = os.getenv("COMET_API_KEY", None)
    if api_key is None or api_key == "":
        raise ValueError(
            "Missing 'api_key'! Store it as a 'COMET_API_KEY' environment variable."
        )

    self.experiment: Experiment | None = None
    self.experiment_key = experiment_key

    self.state = AnalyticsState(
        project_name=project_name,
        experiment_name=experiment_name,
        tags=tags,
    )

    self.project_name = project_name
    self.experiment_name = experiment_name if experiment_name else "auto"
    self.tags = tags if tags else "auto"

init_experiment(state)

Setups up a comet experiment and stores it locally.

Parameters:

Name Type Description Default
state TrainState

the current training state

required
Source code in velora/callbacks.py
Python
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
def init_experiment(self, state: "TrainState") -> None:
    """Setups up a comet experiment and stores it locally.

    Parameters:
        state (TrainState): the current training state
    """
    from comet_ml import ExistingExperiment, Experiment

    if self.experiment_key is not None:
        # Continue existing experiment
        self.experiment = ExistingExperiment(
            api_key=os.getenv("COMET_API_KEY", None),
            project_name=state.analytics_state.project_name,
            experiment_key=self.experiment_key,
            disabled=bool(os.getenv("VELORA_TEST_MODE", "").lower())
            in ("true", "1"),
            log_env_cpu=True,
            log_env_gpu=True,
            log_env_details=True,
        )
    else:
        # Start new experiment
        self.experiment = Experiment(
            api_key=os.getenv("COMET_API_KEY", None),
            project_name=state.analytics_state.project_name,
            auto_param_logging=False,
            auto_metric_logging=False,
            auto_output_logging=False,
            log_graph=False,
            display_summary_level=0,
            disabled=bool(os.getenv("VELORA_TEST_MODE", "").lower())
            in ("true", "1"),
        )

        self.experiment.set_name(state.analytics_state.experiment_name)
        self.experiment.add_tags(state.analytics_state.tags)

log_episode_data(state)

Logs episodic data to the experiment.

Parameters:

Name Type Description Default
state TrainState

the current training state

required
Source code in velora/callbacks.py
Python
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
def log_episode_data(self, state: "TrainState") -> None:
    """
    Logs episodic data to the experiment.

    Parameters:
        state (TrainState): the current training state
    """
    results = get_current_episode(
        state.session,
        state.experiment_id,
        state.current_ep,
    )

    for item in results:
        reward_low = item.reward_moving_avg - item.reward_moving_std
        reward_high = item.reward_moving_avg + item.reward_moving_std

        self.experiment.log_metrics(
            {
                "reward/moving_lower": reward_low,
                "reward/moving_avg": item.reward_moving_avg,
                "reward/moving_upper": reward_high,
                "episode/return": item.reward,
                "episode/length": item.length,
                "losses/actor": item.actor_loss,
                "losses/critic": item.critic_loss,
                "losses/entropy": item.entropy_loss,
            },
            epoch=state.current_ep,
        )

EarlyStopping

Bases: TrainCallback

A callback that applies early stopping to the training process.

Source code in velora/callbacks.py
Python
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
class EarlyStopping(TrainCallback):
    """
    A callback that applies early stopping to the training process.
    """

    @override
    def __init__(self, target: float, *, patience: int = 3) -> None:
        """
        Parameters:
            target (float): episode reward target to achieve
            patience (int, optional): number of times the threshold needs
                to be met to terminate training
        """
        self.target = target
        self.patience = patience

        self.count = 0

    def __call__(self, state: "TrainState") -> "TrainState":
        if state.stop_training:
            return state

        if state.status == "episode":
            if state.ep_reward >= self.target:
                self.count += 1

                if self.count >= self.patience:
                    state.stop_training = True
            else:
                self.count = 0

        return state

    def config(self) -> Tuple[str, Dict[str, Any]]:
        return self.__class__.__name__, {
            "target": self.target,
            "patience": self.patience,
        }

    def info(self) -> str:
        return f"'{self.__class__.__name__}' enabled with 'target={self.target}' and 'patience={self.patience}'."

__init__(target, *, patience=3)

Parameters:

Name Type Description Default
target float

episode reward target to achieve

required
patience int

number of times the threshold needs to be met to terminate training

3
Source code in velora/callbacks.py
Python
71
72
73
74
75
76
77
78
79
80
81
82
@override
def __init__(self, target: float, *, patience: int = 3) -> None:
    """
    Parameters:
        target (float): episode reward target to achieve
        patience (int, optional): number of times the threshold needs
            to be met to terminate training
    """
    self.target = target
    self.patience = patience

    self.count = 0

RecordVideos

Bases: TrainCallback

A callback to enable intermittent environment video recording to visualize the agent training progress.

Requires environment with render_mode="rgb_array".

Source code in velora/callbacks.py
Python
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
class RecordVideos(TrainCallback):
    """
    A callback to enable intermittent environment video recording to visualize
    the agent training progress.

    Requires environment with `render_mode="rgb_array"`.
    """

    @override
    def __init__(
        self,
        dirname: str,
        *,
        method: RecordMethodLiteral = "episode",
        frequency: int = 100,
        force: bool = False,
    ) -> None:
        """
        Parameters:
            dirname (str): the model directory name to store the videos.
                Automatically created in `checkpoints` directory as
                `checkpoints/<dirname>/videos`.

                Compliments `TrainCallback.SaveCheckpoints` callback.

            method (Literal["episode", "step"], optional): the recording method.
                When `episode` records episodically. When `step` records during
                training steps.
            frequency (int, optional): the `episode` or `step` record frequency
            force (bool, optional): enables file overwriting, ignoring existing
                video files. Useful for continuing model training
        """
        if method not in get_args(RecordMethodLiteral):
            raise ValueError(
                f"'{method=}' is not supported. Choices: '{get_args(RecordMethodLiteral)}'"
            )

        self.dirname = dirname
        self.method = method
        self.frequency = frequency
        self.force = force

        self.dirpath = Path("checkpoints", dirname, "videos")

        if not force and self.dirpath.exists():
            raise FileExistsError(
                f"Files already exist in the '{self.dirpath.parent}' directory! Either change the 'dirname', delete/move the folder and its contents, or use 'force=True' to allow overwriting."
            )

        def trigger(t: int) -> bool:
            # Skip first item
            if t == 0:
                return False

            return t % frequency == 0

        self.details = RecordState(
            dirpath=self.dirpath,
            method=method,
            episode_trigger=trigger if method == "episode" else None,
            step_trigger=trigger if method == "step" else None,
        )

    def __call__(self, state: "TrainState") -> "TrainState":
        # 'start': Set the recording state
        if state.status == "start":
            state.record_state = self.details

            state.env = gym.wrappers.RecordVideo(
                state.env,
                name_prefix=state.env.spec.name,
                **state.record_state.to_wrapper(),
            )

        # Ignore other events
        return state

    def config(self) -> Tuple[str, Dict[str, Any]]:
        return self.__class__.__name__, {
            "dirname": self.dirname,
            "method": self.method,
            "frequency": self.frequency,
            "force": self.force,
        }

    def info(self) -> str:
        return (
            f"'{self.__class__.__name__}' enabled with 'method={str(self.method)}' and 'frequency={self.frequency}'.\n"
            f"    Files will be saved in the 'checkpoints/{self.dirname}/videos' directory."
        )

__init__(dirname, *, method='episode', frequency=100, force=False)

Parameters:

Name Type Description Default
dirname str

the model directory name to store the videos. Automatically created in checkpoints directory as checkpoints/<dirname>/videos.

Compliments TrainCallback.SaveCheckpoints callback.

required
method Literal[episode, step]

the recording method. When episode records episodically. When step records during training steps.

'episode'
frequency int

the episode or step record frequency

100
force bool

enables file overwriting, ignoring existing video files. Useful for continuing model training

False
Source code in velora/callbacks.py
Python
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
@override
def __init__(
    self,
    dirname: str,
    *,
    method: RecordMethodLiteral = "episode",
    frequency: int = 100,
    force: bool = False,
) -> None:
    """
    Parameters:
        dirname (str): the model directory name to store the videos.
            Automatically created in `checkpoints` directory as
            `checkpoints/<dirname>/videos`.

            Compliments `TrainCallback.SaveCheckpoints` callback.

        method (Literal["episode", "step"], optional): the recording method.
            When `episode` records episodically. When `step` records during
            training steps.
        frequency (int, optional): the `episode` or `step` record frequency
        force (bool, optional): enables file overwriting, ignoring existing
            video files. Useful for continuing model training
    """
    if method not in get_args(RecordMethodLiteral):
        raise ValueError(
            f"'{method=}' is not supported. Choices: '{get_args(RecordMethodLiteral)}'"
        )

    self.dirname = dirname
    self.method = method
    self.frequency = frequency
    self.force = force

    self.dirpath = Path("checkpoints", dirname, "videos")

    if not force and self.dirpath.exists():
        raise FileExistsError(
            f"Files already exist in the '{self.dirpath.parent}' directory! Either change the 'dirname', delete/move the folder and its contents, or use 'force=True' to allow overwriting."
        )

    def trigger(t: int) -> bool:
        # Skip first item
        if t == 0:
            return False

        return t % frequency == 0

    self.details = RecordState(
        dirpath=self.dirpath,
        method=method,
        episode_trigger=trigger if method == "episode" else None,
        step_trigger=trigger if method == "step" else None,
    )

SaveCheckpoints

Bases: TrainCallback

A callback that applies model state saving checkpoints to the training process.

Source code in velora/callbacks.py
Python
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
class SaveCheckpoints(TrainCallback):
    """
    A callback that applies model state saving checkpoints to the training process.
    """

    @override
    def __init__(
        self,
        dirname: str,
        *,
        frequency: int = 100,
        buffer: bool = False,
    ) -> None:
        """
        Parameters:
            dirname (str): the model directory name to save checkpoints.
                Automatically created inside `checkpoints` directory as
                `checkpoints/<dirname>/saves`.

                Compliments `TrainCallback.RecordVideos` callback.

            frequency (int, optional): save frequency (in episodes or steps)
            buffer (bool, optional): whether to save the buffer state
        """
        self.dirname = dirname
        self.frequency = frequency
        self.buffer = buffer

        self.filepath = Path("checkpoints", self.dirname, "saves")

        if self.filepath.exists():
            raise FileExistsError(
                f"Items already exist in the '{self.filepath.parent}' directory! Either change the 'dirname' or delete the folders contents."
            )

    def __call__(self, state: "TrainState") -> "TrainState":
        if state.status == "start":
            state.saving_enabled = True
            state.checkpoint_dir = self.filepath

        # Only perform checkpoint operations on episode and complete events
        if state.status != "episode" and state.status != "complete":
            return state

        # Create directory if it doesn't exist on first call
        self.filepath.mkdir(parents=True, exist_ok=True)

        ep_idx = state.current_ep

        should_save = False
        filename = f"{state.env.spec.name}_"

        # Save checkpoint at specified frequency
        if state.status == "episode" and ep_idx != state.total_episodes:
            if ep_idx % self.frequency == 0:
                should_save = True
                filename += f"{number_to_short(ep_idx)}"

        # Perform final checkpoint save
        elif state.status == "complete":
            should_save = True
            filename += "final"

        if should_save:
            self.save_checkpoint(state.agent, filename)

        return state

    def save_checkpoint(self, agent: "RLModuleAgent", dirname: str) -> None:
        """
        Saves a checkpoint at a given episode with the given suffix.

        Parameters:
            agent (RLModuleAgent): the agent being trained
            dirname (str): the checkpoint directory name
        """
        checkpoint_path = Path(self.filepath, dirname)
        agent.save(checkpoint_path, buffer=self.buffer, config=True)

    def config(self) -> Tuple[str, Dict[str, Any]]:
        return self.__class__.__name__, {
            "dirname": self.dirname,
            "frequency": self.frequency,
            "buffer": self.buffer,
        }

    def info(self) -> str:
        return (
            f"'{self.__class__.__name__}' enabled with 'frequency={self.frequency}' and 'buffer={self.buffer}'.\n"
            f"    Files will be saved in the 'checkpoints/{self.dirname}/saves' directory."
        )

__init__(dirname, *, frequency=100, buffer=False)

Parameters:

Name Type Description Default
dirname str

the model directory name to save checkpoints. Automatically created inside checkpoints directory as checkpoints/<dirname>/saves.

Compliments TrainCallback.RecordVideos callback.

required
frequency int

save frequency (in episodes or steps)

100
buffer bool

whether to save the buffer state

False
Source code in velora/callbacks.py
Python
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
@override
def __init__(
    self,
    dirname: str,
    *,
    frequency: int = 100,
    buffer: bool = False,
) -> None:
    """
    Parameters:
        dirname (str): the model directory name to save checkpoints.
            Automatically created inside `checkpoints` directory as
            `checkpoints/<dirname>/saves`.

            Compliments `TrainCallback.RecordVideos` callback.

        frequency (int, optional): save frequency (in episodes or steps)
        buffer (bool, optional): whether to save the buffer state
    """
    self.dirname = dirname
    self.frequency = frequency
    self.buffer = buffer

    self.filepath = Path("checkpoints", self.dirname, "saves")

    if self.filepath.exists():
        raise FileExistsError(
            f"Items already exist in the '{self.filepath.parent}' directory! Either change the 'dirname' or delete the folders contents."
        )

save_checkpoint(agent, dirname)

Saves a checkpoint at a given episode with the given suffix.

Parameters:

Name Type Description Default
agent RLModuleAgent

the agent being trained

required
dirname str

the checkpoint directory name

required
Source code in velora/callbacks.py
Python
177
178
179
180
181
182
183
184
185
186
def save_checkpoint(self, agent: "RLModuleAgent", dirname: str) -> None:
    """
    Saves a checkpoint at a given episode with the given suffix.

    Parameters:
        agent (RLModuleAgent): the agent being trained
        dirname (str): the checkpoint directory name
    """
    checkpoint_path = Path(self.filepath, dirname)
    agent.save(checkpoint_path, buffer=self.buffer, config=True)

TrainCallback

Abstract base class for all training callbacks.

Source code in velora/callbacks.py
Python
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class TrainCallback:
    """
    Abstract base class for all training callbacks.
    """

    @abstractmethod
    def __init__(self, *args, **kwargs) -> None:
        pass  # pragma: no cover

    @abstractmethod
    def __call__(self, state: "TrainState") -> "TrainState":
        """
        The callback function that gets called during training.

        Parameters:
            state (TrainState): the current training state

        Returns:
            state (TrainState): the current training state.
        """
        pass  # pragma: no cover

    @abstractmethod
    def config(self) -> Tuple[str, Dict[str, Any]]:
        """
        Retrieves callback details in the form: `(name, values)`.

        Returns:
            name (str): callback name.
            values (Dict[str, Any]): a dictionary containing callback settings.
        """
        pass  # pragma: no cover

    @abstractmethod
    def info(self) -> str:
        """
        Provides details with basic information about the callback initialization.

        Returns:
            details (str): a string of information.
        """
        pass  # pragma: no cover

__call__(state) abstractmethod

The callback function that gets called during training.

Parameters:

Name Type Description Default
state TrainState

the current training state

required

Returns:

Name Type Description
state TrainState

the current training state.

Source code in velora/callbacks.py
Python
31
32
33
34
35
36
37
38
39
40
41
42
@abstractmethod
def __call__(self, state: "TrainState") -> "TrainState":
    """
    The callback function that gets called during training.

    Parameters:
        state (TrainState): the current training state

    Returns:
        state (TrainState): the current training state.
    """
    pass  # pragma: no cover

config() abstractmethod

Retrieves callback details in the form: (name, values).

Returns:

Name Type Description
name str

callback name.

values Dict[str, Any]

a dictionary containing callback settings.

Source code in velora/callbacks.py
Python
44
45
46
47
48
49
50
51
52
53
@abstractmethod
def config(self) -> Tuple[str, Dict[str, Any]]:
    """
    Retrieves callback details in the form: `(name, values)`.

    Returns:
        name (str): callback name.
        values (Dict[str, Any]): a dictionary containing callback settings.
    """
    pass  # pragma: no cover

info() abstractmethod

Provides details with basic information about the callback initialization.

Returns:

Name Type Description
details str

a string of information.

Source code in velora/callbacks.py
Python
55
56
57
58
59
60
61
62
63
@abstractmethod
def info(self) -> str:
    """
    Provides details with basic information about the callback initialization.

    Returns:
        details (str): a string of information.
    """
    pass  # pragma: no cover