{"record":{"id":"8ec9f91a844b81c0","repo":"bytedance/deer-flow","slug":"the-openviking-memory-backend-requires-langchain-o","errorCode":null,"errorMessage":"The OpenViking memory backend requires langchain-openviking==0.1.0. Install DeerFlow backend dependencies and retry.","messagePattern":"The OpenViking memory backend requires langchain-openviking==0\\.1\\.0\\. Install DeerFlow backend dependencies and retry\\.","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"backend/packages/harness/deerflow/agents/memory/backends/openviking/openviking_manager.py","lineNumber":555,"sourceCode":"    ) -> None:\n        detail = f\"{message} (session={session_id})\"\n        if self._config.write_failure_policy == \"raise\":\n            raise MemoryManagerError(detail) from exc\n        logger.error(detail, exc_info=True)\n\n\ndef _load_official_integration() -> dict[str, Any]:\n    try:\n        from langchain_openviking import (\n            OpenVikingCommitPolicy,\n            OpenVikingPartialWriteError,\n            OpenVikingRetriever,\n            OpenVikingSessionRecorder,\n            has_request_actor_peer_support,\n        )\n        from langchain_openviking.actor_peer import use_actor_peer\n    except ImportError as exc:\n        raise ImportError(\"The OpenViking memory backend requires langchain-openviking==0.1.0. Install DeerFlow backend dependencies and retry.\") from exc\n    if not has_request_actor_peer_support():\n        raise ImportError(\"The installed OpenViking SDK lacks request-scoped actor-peer support. Install openviking-sdk>=0.1.6,<0.2 and retry.\")\n    return {\n        \"OpenVikingCommitPolicy\": OpenVikingCommitPolicy,\n        \"OpenVikingPartialWriteError\": OpenVikingPartialWriteError,\n        \"OpenVikingRetriever\": OpenVikingRetriever,\n        \"OpenVikingSessionRecorder\": OpenVikingSessionRecorder,\n        \"use_actor_peer\": use_actor_peer,\n    }\n\n\ndef _format_documents(documents: list[Any], *, max_chars: int) -> str:\n    lines: list[str] = []\n    seen: set[str] = set()\n    for document in documents:\n        content = \" \".join(str(getattr(document, \"page_content\", \"\") or \"\").split())\n        key = content.casefold()\n        if not content or key in seen:","sourceCodeStart":537,"sourceCodeEnd":573,"githubUrl":"https://github.com/bytedance/deer-flow/blob/1dd6ba1acb03700589994b0366c5d1c7d05e2eff/backend/packages/harness/deerflow/agents/memory/backends/openviking/openviking_manager.py#L537-L573","documentation":"_load_official_integration() raises ImportError when langchain_openviking (the langchain-openviking package) cannot be imported. The OpenViking memory backend delegates all SDK transport, message conversion, and session commit to this maintained adapter, so its absence is fatal for the backend. The message pins the expected version, langchain-openviking==0.1.0.","triggerScenarios":"memory.manager_class: openviking is configured but langchain-openviking is not installed in the backend environment (it is an optional dependency). Raised from OpenVikingMemoryManager.model_post_init -> _load_official_integration(), i.e. at first manager construction — Gateway startup or agent rebuild.","commonSituations":"Enabling the OpenViking backend without installing backend optional extras; a fresh virtualenv/uv sync that skipped the openviking extra; CI environments that only install core dependencies.","solutions":["Install the pinned adapter: uv pip install 'langchain-openviking==0.1.0' (or add it to the backend dependency extra you use)","Verify with: uv run python -c \"import langchain_openviking\" from backend/","Restart the Gateway after installation"],"exampleFix":"# before: backend missing the adapter\n# uv run python -c \"import langchain_openviking\" -> ModuleNotFoundError\n\n# after\ncd backend && uv pip install 'langchain-openviking==0.1.0'","handlingStrategy":"validation","validationCode":"try:\n    import langchain_openviking  # noqa: F401\nexcept ImportError:\n    raise SystemExit(\"Install 'langchain-openviking==0.1.0' before enabling the openviking memory backend\")","typeGuard":"def openviking_adapter_available() -> bool:\n    try:\n        import langchain_openviking  # noqa: F401\n        return True\n    except ImportError:\n        return False","tryCatchPattern":"try:\n    manager = OpenVikingMemoryManager.from_config(cfg)\nexcept ImportError as exc:\n    install_missing_dependency(str(exc));  # then reconstruct the manager\n    raise","preventionTips":["Install backend optional extras before flipping manager_class to openviking","Add an import smoke test for langchain_openviking to CI for any job that exercises the openviking backend"],"tags":["openviking","import","dependencies","installation"],"backgroundTag":null,"analyzedSha":"1dd6ba1acb03700589994b0366c5d1c7d05e2eff","analyzedAt":"2026-08-14T21:20:34.804Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}