{"record":{"id":"497fb4a5319fb542","repo":"zylon-ai/private-gpt","slug":"unknown-scheduler-tools-mode-mode","errorCode":null,"errorMessage":"Unknown scheduler.tools.mode: {mode}","messagePattern":"Unknown scheduler\\.tools\\.mode: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"private_gpt/components/tools/tool_scheduler.py","lineNumber":293,"sourceCode":"\n\nregister_tool_scheduler(\"celery\", CeleryToolScheduler)\n\n\n@singleton\nclass ToolSchedulerFactory:\n    @inject\n    def __init__(self, settings: Settings, injector: Injector) -> None:\n        self._settings = settings\n        self._injector = injector\n        self._scheduler: BaseToolScheduler | None = None\n\n    def get(self) -> BaseToolScheduler:\n        if self._scheduler is None:\n            mode = self._settings.scheduler.tools.mode\n            provider = _TOOL_SCHEDULERS.get(mode)\n            if provider is None:\n                raise ValueError(f\"Unknown scheduler.tools.mode: {mode}\")\n            self._scheduler = (\n                self._injector.get(provider)\n                if isinstance(provider, type)\n                else provider(self._injector)\n            )\n        return self._scheduler\n","sourceCodeStart":275,"sourceCodeEnd":300,"githubUrl":"https://github.com/zylon-ai/private-gpt/blob/4a030776a31a901ad80b1bf4d7faa2c1a367efbb/private_gpt/components/tools/tool_scheduler.py#L275-L300","documentation":"ValueError raised by ToolSchedulerFactory.get when settings.scheduler.tools.mode does not match any key in the _TOOL_SCHEDULERS provider map. The factory looks up the mode string and refuses to proceed with an unknown scheduler backend.","triggerScenarios":"Setting scheduler.tools.mode in settings (env var / config file) to a value not registered in _TOOL_SCHEDULERS (e.g. typo like 'inprocess' vs 'in_process', or a mode removed in a version upgrade). Raised on first scheduler access, i.e. lazily at runtime, not at startup.","commonSituations":"Copying a mode name from outdated docs; upgrading the library where scheduler modes were renamed/removed; stale environment variable overriding the config file.","solutions":["Check _TOOL_SCHEDULERS keys in private_gpt/components/tools/tool_scheduler.py and set scheduler.tools.mode to one of them","Inspect effective settings (env overrides included) to find the invalid value: print settings.scheduler.tools.mode","After upgrading, re-validate all scheduler.* settings against the current version's settings schema"],"exampleFix":"# before (settings.yaml)\nscheduler:\n  tools:\n    mode: inproc  # typo / unknown\n# after\nscheduler:\n  tools:\n    mode: in_process  # a key present in _TOOL_SCHEDULERS","handlingStrategy":"validation","validationCode":"from private_gpt.components.tools.tool_scheduler import _TOOL_SCHEDULERS\n\nmode = settings.scheduler.tools.mode\nassert mode in _TOOL_SCHEDULERS, (\n    f\"scheduler.tools.mode must be one of {sorted(_TOOL_SCHEDULERS)}, got {mode!r}\"\n)","typeGuard":null,"tryCatchPattern":"try:\n    scheduler = factory.get()\nexcept ValueError as e:\n    if \"Unknown scheduler.tools.mode\" in str(e):\n        # fix the setting and restart; do not retry with the same value\n        raise","preventionTips":["Validate all scheduler.* settings at startup rather than at first scheduler use","Pin docs/config templates to the version in use; re-check mode names after upgrades","Fail fast in deploy pipelines with an explicit settings validation step"],"tags":["configuration","scheduler","settings","startup"],"backgroundTag":null,"analyzedSha":"4a030776a31a901ad80b1bf4d7faa2c1a367efbb","analyzedAt":"2026-08-15T03:51:26.951Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}