mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-26 05:48:36 +08:00
* mypy is invaluable * fix config, add test * Add new-style toml support * add singleton, small doc fixes * fix some cases of loading toml, clean up, try to make it clearer * Add defaults_dict for UI * allow config to be mutable error handling fix toml parsing * remove debug stuff * Adapt Makefile * Add defaults for temperature and top_p * update to CodeActAgent * comments * fix unit tests * implement groups of llm settings (CLI) * fix merge issue * small fix sandboxes, small refactoring * adapt LLM init to accept overrides at runtime * reading config is enough * Encapsulate minimally embeddings initialization * agent bug fix; fix tests * fix sandboxes tests * refactor globals in sandboxes to properties
29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
import dataclasses
|
|
|
|
|
|
class Singleton(type):
|
|
_instances: dict = {}
|
|
|
|
def __call__(cls, *args, **kwargs):
|
|
if cls not in cls._instances:
|
|
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
|
|
else:
|
|
# allow updates, just update existing instance
|
|
# perhaps not the most orthodox way to do it, though it simplifies client code
|
|
# useful for pre-defined groups of settings
|
|
instance = cls._instances[cls]
|
|
for key, value in kwargs.items():
|
|
setattr(instance, key, value)
|
|
return cls._instances[cls]
|
|
|
|
@classmethod
|
|
def reset(cls):
|
|
# used by pytest to reset the state of the singleton instances
|
|
for instance_type, instance in cls._instances.items():
|
|
print('resetting... ', instance_type)
|
|
for field in dataclasses.fields(instance_type):
|
|
if dataclasses.is_dataclass(field.type):
|
|
setattr(instance, field.name, field.type())
|
|
else:
|
|
setattr(instance, field.name, field.default)
|