{"record":{"id":"54d5d7997e7936e2","repo":"Fosowl/agenticSeek","slug":"model-not-set","errorCode":null,"errorMessage":"Model not set","messagePattern":"Model not set","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"llm_server/sources/generator.py","lineNumber":41,"sourceCode":"    def __init__(self):\n        self.model = None\n        self.state = GenerationState()\n        self.logger = logging.getLogger(__name__)\n        handler = logging.StreamHandler()\n        handler.setLevel(logging.INFO)\n        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')\n        handler.setFormatter(formatter)\n        self.logger.addHandler(handler)\n        self.logger.setLevel(logging.INFO)\n        cache = Cache()\n    \n    def set_model(self, model: str) -> None:\n        self.logger.info(f\"Model set to {model}\")\n        self.model = model\n    \n    def start(self, history: list) -> bool:\n        if self.model is None:\n            raise Exception(\"Model not set\")\n        with self.state.lock:\n            if self.state.is_generating:\n                return False\n            self.state.is_generating = True\n            self.logger.info(\"Starting generation\")\n            threading.Thread(target=self.generate, args=(history,)).start()\n        return True\n    \n    def get_status(self) -> dict:\n        with self.state.lock:\n            return self.state.status()\n\n    @abstractmethod\n    def generate(self, history: list) -> None:\n        \"\"\"\n        Generate text using the model.\n        args:\n            history: list of strings","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/Fosowl/agenticSeek/blob/ae57a2357745a9706cb12d0fd76d954c84d166fa/llm_server/sources/generator.py#L23-L59","documentation":"Generator.start() refuses to begin generation when no model has been configured on the generator instance. The library requires an explicit call to set_model() before start() so it knows which LLM to query; without it, generation state would be meaningless. It is thrown as a plain Exception before any thread is spawned or lock is taken.","triggerScenarios":"Calling start(history) (directly or via start_generation, speak_answer, start_listening, or animate_thinking) when self.model is None — i.e. set_model(model) was never called on the generator instance.","commonSituations":"Fresh install where the model name was never configured; config file loaded but the set_model call skipped or run on a different generator instance; model name key missing/renamed in user config; instantiating a second Generator and forgetting to re-set the model.","solutions":["Call generator.set_model(\"<model-name>\") with a valid model name before calling start(history).","Verify the config-loading path actually invokes set_model on the same generator instance used for start().","Guard the call site: check generator.model is not None (or wrap set_model+start in an init routine) before triggering any generation.","Log/inspect the generator instance to confirm you are not using a second, unconfigured instance."],"exampleFix":"// before\ngenerator = Generator(state)\ngenerator.start(history)  # Exception: Model not set\n// after\ngenerator = Generator(state)\ngenerator.set_model(\"llama3\")\ngenerator.start(history)","handlingStrategy":"validation","validationCode":"def ensure_model_ready(generator):\n    if getattr(generator, \"model\", None) is None:\n        raise RuntimeError(\"Call generator.set_model(...) before start()\")\n    return generator\n# usage\nensure_model_ready(generator).start(history)","typeGuard":"def is_model_set(generator) -> bool:\n    return getattr(generator, \"model\", None) is not None","tryCatchPattern":"try:\n    ok = generator.start(history)\nexcept Exception as e:\n    if \"Model not set\" in str(e):\n        generator.set_model(config[\"model\"])\n        ok = generator.start(history)\n    else:\n        raise","preventionTips":["Always call set_model() immediately after constructing the generator, ideally in a shared init function.","Centralize generator construction so every caller receives a configured instance.","Add a startup assertion: assert generator.model is not None before accepting user input.","Load and validate the model name from config at app boot, failing fast if missing."],"tags":["python","configuration","llm","missing-config"],"backgroundTag":"model-not-configured","analyzedSha":"ae57a2357745a9706cb12d0fd76d954c84d166fa","analyzedAt":"2026-08-30T02:49:05.834Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}