Files
NexQuant/rdagent/core/conf.py
T

91 lines
3.1 KiB
Python
Raw Normal View History

2024-06-12 15:12:11 +08:00
from __future__ import annotations
# TODO: use pydantic for other modules in Qlib
2024-06-12 15:12:11 +08:00
from pathlib import Path
from typing import TYPE_CHECKING, Any
2024-05-21 22:48:41 +08:00
if TYPE_CHECKING:
from pydantic.fields import FieldInfo
2024-06-12 15:12:11 +08:00
from pydantic_settings import (
BaseSettings,
EnvSettingsSource,
PydanticBaseSettingsSource,
SettingsConfigDict,
)
class ExtendedEnvSettingsSource(EnvSettingsSource):
def get_field_value(self, field: FieldInfo, field_name: str) -> tuple[Any, str, bool]:
# Dynamically gather prefixes from the current and parent classes
prefixes = [self.config.get("env_prefix", "")]
if hasattr(self.settings_cls, "__bases__"):
for base in self.settings_cls.__bases__:
if hasattr(base, "model_config"):
parent_prefix = base.model_config.get("env_prefix")
if parent_prefix and parent_prefix not in prefixes:
prefixes.append(parent_prefix)
for prefix in prefixes:
self.env_prefix = prefix
env_val, field_key, value_is_complex = super().get_field_value(field, field_name)
if env_val is not None:
return env_val, field_key, value_is_complex
return super().get_field_value(field, field_name)
class ExtendedSettingsConfigDict(SettingsConfigDict, total=False): ...
class ExtendedBaseSettings(BaseSettings):
@classmethod
def settings_customise_sources(
cls,
settings_cls: type[BaseSettings],
init_settings: PydanticBaseSettingsSource, # noqa
env_settings: PydanticBaseSettingsSource, # noqa
dotenv_settings: PydanticBaseSettingsSource, # noqa
file_secret_settings: PydanticBaseSettingsSource, # noqa
) -> tuple[PydanticBaseSettingsSource, ...]:
return (ExtendedEnvSettingsSource(settings_cls),)
2024-05-21 22:48:41 +08:00
class RDAgentSettings(ExtendedBaseSettings):
2024-07-16 20:35:42 +08:00
# TODO: (xiao) I think LLMSetting may be a better name.
# TODO: (xiao) I think most of the config should be in oai.config
2024-07-16 20:35:42 +08:00
# Log configs
2024-07-17 15:00:13 +08:00
# TODO: (xiao) think it can be a separate config.
2024-07-16 20:35:42 +08:00
log_trace_path: str | None = None
2024-05-30 10:33:07 +08:00
# azure document intelligence configs
2024-05-30 10:33:07 +08:00
azure_document_intelligence_key: str = ""
azure_document_intelligence_endpoint: str = ""
# factor extraction conf
2024-08-15 18:52:37 +08:00
max_input_duplicate_factor_group: int = 300
2024-05-30 10:33:07 +08:00
max_output_duplicate_factor_group: int = 20
2024-08-21 16:48:09 +08:00
max_kmeans_group_number: int = 40
2024-06-14 12:59:44 +08:00
2024-07-17 15:00:13 +08:00
# workspace conf
workspace_path: Path = Path.cwd() / "git_ignore_folder" / "RD-Agent_workspace"
# multi processing conf
multi_proc_n: int = 1
# pickle cache conf
cache_with_pickle: bool = True # whether to use pickle cache
pickle_cache_folder_path_str: str = str(
Path.cwd() / "pickle_cache/",
) # the path of the folder to store the pickle cache
use_file_lock: bool = (
True # when calling the function with same parameters, whether to use file lock to avoid
# executing the function multiple times
)
# misc
"""The limitation of context stdout"""
stdout_context_len: int = 400
RD_AGENT_SETTINGS = RDAgentSettings()