neural-thinker's picture
feat: clean HuggingFace deployment with essential files only
824bf31
raw
history blame
2.29 kB
"""Semantic memory for knowledge and patterns."""
from typing import Any, Dict, List, Optional
from .base import BaseMemory
class SemanticMemory(BaseMemory):
"""Memory for semantic knowledge and patterns."""
def __init__(self):
super().__init__()
self._knowledge_base: Dict[str, Dict] = {}
self._patterns: List[Dict] = []
async def store(self, key: str, value: Any, metadata: Optional[Dict] = None) -> bool:
"""Store semantic knowledge."""
knowledge_item = {
"key": key,
"value": value,
"metadata": metadata or {},
"type": metadata.get("type", "knowledge") if metadata else "knowledge"
}
self._knowledge_base[key] = knowledge_item
self._storage[key] = knowledge_item
# Store patterns separately
if knowledge_item["type"] == "pattern":
self._patterns.append(knowledge_item)
return True
async def retrieve(self, key: str) -> Optional[Any]:
"""Retrieve knowledge by key."""
knowledge = self._storage.get(key)
return knowledge["value"] if knowledge else None
async def search(self, query: str, limit: int = 10) -> List[Dict]:
"""Search knowledge base by query (stub implementation)."""
# TODO: Implement vector-based semantic search
matching_items = []
query_lower = query.lower()
for item in list(self._knowledge_base.values())[:limit]:
item_text = str(item.get("value", "")).lower()
if query_lower in item_text:
matching_items.append(item)
return matching_items
async def clear(self) -> bool:
"""Clear all semantic memories."""
self._knowledge_base.clear()
self._patterns.clear()
self._storage.clear()
return True
def get_patterns(self) -> List[Dict]:
"""Get stored patterns."""
return self._patterns
async def store_pattern(self, pattern_name: str, pattern_data: Dict) -> bool:
"""Store a detected pattern."""
return await self.store(
f"pattern:{pattern_name}",
pattern_data,
{"type": "pattern"}
)