Merge pull request #333 from smartwatermelon/fix/proxy-numpy-import

fix(memory): make numpy import optional for proxy boot path
This commit is contained in:
Tejas Chopra 2026-04-30 14:31:20 -07:00 committed by GitHub
commit 276e92e05c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 6 deletions

View file

@ -14,13 +14,14 @@ import re
import sqlite3
from datetime import datetime, timezone
from pathlib import Path
from typing import Any
import numpy as np
from typing import TYPE_CHECKING, Any
from ..models import Memory, ScopeLevel
from ..ports import MemoryFilter
if TYPE_CHECKING:
import numpy as np
# Regex pattern for safe metadata keys: alphanumeric, underscores, hyphens only
# This prevents JSON path injection attacks via malicious key names
_SAFE_METADATA_KEY_PATTERN = re.compile(r"^[a-zA-Z_][a-zA-Z0-9_\-]*$")
@ -165,6 +166,8 @@ class SQLiteMemoryStore:
"""Serialize numpy array to bytes for BLOB storage."""
if embedding is None:
return None
import numpy as np
return bytes(embedding.astype(np.float32).tobytes())
def _deserialize_embedding(
@ -173,6 +176,8 @@ class SQLiteMemoryStore:
"""Deserialize bytes back to numpy array."""
if data is None:
return None
import numpy as np
arr = np.frombuffer(data, dtype=np.float32)
return arr

View file

@ -5,12 +5,13 @@ from __future__ import annotations
import uuid
from dataclasses import dataclass, field
from datetime import datetime
from typing import Any, Protocol, runtime_checkable
import numpy as np
from typing import TYPE_CHECKING, Any, Protocol, runtime_checkable
from headroom.memory.models import Memory, ScopeLevel
if TYPE_CHECKING:
import numpy as np
# =============================================================================
# Filter Dataclasses
# =============================================================================