{"record":{"id":"093c72be2f232136","repo":"zylon-ai/private-gpt","slug":"unknown-memory-type-type","errorCode":null,"errorMessage":"Unknown memory type: {type}","messagePattern":"Unknown memory type: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"private_gpt/components/memory/memory.py","lineNumber":34,"sourceCode":"_PROVIDERS: dict[str, MemoryProvider] = {\n    \"trim\": _trim_memory,\n}\n\n\ndef register_memory(memory_type: str, provider: MemoryProvider) -> None:\n    _PROVIDERS[memory_type] = provider\n\n\nclass Memory:\n    @classmethod\n    def from_defaults(\n        cls,\n        type: Literal[\"trim\", \"summary\"],\n        **kwargs: Any,\n    ) -> \"BaseMemory\":\n        provider = _PROVIDERS.get(type)\n        if provider is None:\n            raise ValueError(f\"Unknown memory type: {type}\")\n        return provider(**kwargs)\n","sourceCodeStart":16,"sourceCodeEnd":36,"githubUrl":"https://github.com/zylon-ai/private-gpt/blob/4a030776a31a901ad80b1bf4d7faa2c1a367efbb/private_gpt/components/memory/memory.py#L16-L36","documentation":"Raised by Memory.from_defaults when the requested memory type string is not a key in the _PROVIDERS registry. Providers register themselves (presumably via a register decorator writing into _PROVIDERS), and from_defaults only accepts registered types — the Literal['trim', 'summary'] in the signature documents the built-ins. The error is a registry miss: unknown, misspelled, or unregistered type.","triggerScenarios":"Memory.from_defaults(type='trimm') (typo); type='summarize' instead of 'summary'; a custom memory provider whose registration code never ran (module not imported, entry point missing); passing a provider class instead of the string key.","commonSituations":"Typos in memory config; renaming of memory types across versions; custom memory modules not imported before from_defaults is called.","solutions":["Use a registered type string: 'trim' or 'summary' (or your registered custom key).","Ensure custom providers are registered by importing their module before calling from_defaults.","Check the _PROVIDERS dict keys to see what is actually registered in your runtime.","Guard config at load time against the allowed set of memory types."],"exampleFix":"# before\nmemory = Memory.from_defaults(type='trimm', token_limit=2048)\n\n# after\nmemory = Memory.from_defaults(type='trim', token_limit=2048)","handlingStrategy":"validation","validationCode":"KNOWN_MEMORY_TYPES = {'trim', 'summary'}\nif memory_type not in KNOWN_MEMORY_TYPES:\n    raise ConfigError(f'memory type must be one of {KNOWN_MEMORY_TYPES}')","typeGuard":"def is_known_memory_type(t: str) -> bool:\n    return t in _PROVIDERS","tryCatchPattern":"try:\n    mem = Memory.from_defaults(type=memory_type, **kw)\nexcept ValueError:\n    mem = Memory.from_defaults(type='trim', **kw)","preventionTips":["Restrict the memory-type setting with an enum/Literal at the config layer.","Import custom memory provider modules before any from_defaults call so registration happens."],"tags":["memory","registry","configuration","validation"],"backgroundTag":null,"analyzedSha":"4a030776a31a901ad80b1bf4d7faa2c1a367efbb","analyzedAt":"2026-08-15T03:51:26.951Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}