Source code for minestudio.inference.recorder.base_recorder
'''
Date: 2024-11-25 07:35:51
LastEditors: caishaofei caishaofei@stu.pku.edu.cn
LastEditTime: 2024-11-25 12:55:03
FilePath: /MineStudio/minestudio/inference/recorder/base_recorder.py
'''
from abc import abstractmethod
from typing import List, Dict, Union, Generator
[docs]
class EpisodeRecorder:
"""
Base class for episode recorders.
Recorders are used to process and summarize a collection of episodes.
"""
def __init__(self):
"""
Initializes the EpisodeRecorder.
"""
pass
[docs]
def record(self, episode_generator: Generator) -> Union[Dict, str]:
"""
Records and summarizes episodes from an episode generator.
This method iterates through the episodes, counts the total number of episodes
and the number of episodes marked with "status" == "yes".
It returns a dictionary containing these counts and the 'yes_rate'.
:param episode_generator: A generator that yields episodes.
:type episode_generator: Generator
:returns: A dictionary with a summary of the episodes, including 'num_yes', 'num_episodes', and 'yes_rate'.
:rtype: Union[Dict, str]
"""
num_yes = 0
num_episodes = 0
for episode in episode_generator:
num_episodes += 1
if episode.get("status") == "yes":
num_yes += 1
return {
"num_yes": num_yes,
"num_episodes": num_episodes,
"yes_rate": f"{num_yes / num_episodes * 100:.2f}%",
}