import os from dataclasses import dataclass, field, fields from typing import Any, Optional from langchain_core.runnables import RunnableConfig from dataclasses import dataclass @dataclass(kw_only=True) class Configuration: """The configurable fields for the chatbot.""" user_id: str = "default-user" todo_category: str = "general" task_maistro_role: str = "You are a helpful task management assistant. You help you create, organize, and manage the user's ToDo list." @classmethod def from_runnable_config( cls, config: Optional[RunnableConfig] = None ) -> "Configuration": """Create a Configuration instance from a RunnableConfig.""" configurable = ( config["configurable"] if config and "configurable" in config else {} ) values: dict[str, Any] = { f.name: os.environ.get(f.name.upper(), configurable.get(f.name)) for f in fields(cls) if f.init } return cls(**{k: v for k, v in values.items() if v})