feat: make embedding model configurable for semantic search
- Add SemanticSearchConfig to settings.py with embedding model options - Update WorldMapper to accept embedding_model parameter - Update main.py to pass model from config to WorldMapper - Add documentation for available embedding models: - sentence-transformers/all-MiniLM-L6-v2 (default, fast) - sentence-transformers/all-mpnet-base-v2 (better quality) - google/embeddinggemma-300m (state-of-the-art) - Update config.yaml and config.example.yaml with new options Users can now choose the best embedding model for their needs.
This commit is contained in:
1 parent
b9f21c7199
commit
9a113002d4
5 files changed
+44
-26
No files matched your search
@@ -71,7 +71,12 @@ mapper:
|
||||
codec: "h264"
|
||||
|
||||
semantic_search:
|
||||
model: "all-MiniLM-L6-v2" # Sentence transformer model
|
||||
# Embedding model for semantic room search
|
||||
# Available models:
|
||||
# - "sentence-transformers/all-MiniLM-L6-v2" (default, fast, 22MB)
|
||||
# - "sentence-transformers/all-mpnet-base-v2" (better quality, 418MB)
|
||||
# - "google/embeddinggemma-300m" (state-of-the-art, requires transformers>=4.40)
|
||||
model: "sentence-transformers/all-MiniLM-L6-v2"
|
||||
top_k: 5 # Number of search results
|
||||
similarity_threshold: 0.7 # Minimum similarity score
|
||||
```
|
||||
|
||||
@@ -35,10 +35,15 @@ mapper:
|
||||
fps: 30
|
||||
codec: "h264"
|
||||
|
||||
semantic_search:
|
||||
model: "all-MiniLM-L6-v2"
|
||||
top_k: 5
|
||||
similarity_threshold: 0.7
|
||||
semantic_search:
|
||||
# Embedding model for semantic room search
|
||||
# Options:
|
||||
# - "sentence-transformers/all-MiniLM-L6-v2" (default, fast, 22MB)
|
||||
# - "sentence-transformers/all-mpnet-base-v2" (better quality, 418MB)
|
||||
# - "google/embeddinggemma-300m" (state-of-the-art, requires transformers>=4.40)
|
||||
model: "sentence-transformers/all-MiniLM-L6-v2"
|
||||
top_k: 5
|
||||
similarity_threshold: 0.7
|
||||
|
||||
behavior:
|
||||
reaction_time_min_ms: 200
|
||||
|
||||
+24
-18
@@ -51,24 +51,30 @@ class AIConfig(BaseModel):
|
||||
llm: LLMProviderConfig = Field(default_factory=LLMProviderConfig)
|
||||
|
||||
|
||||
class MapperConfig(BaseModel):
|
||||
"""Mapper configuration"""
|
||||
class ActiveStorageConfig(BaseModel):
|
||||
db_path: str = "data/maps/active/world.db"
|
||||
graph_cache_size: int = 10000
|
||||
|
||||
class HistoricalStorageConfig(BaseModel):
|
||||
archive_dir: str = "data/maps/archive"
|
||||
|
||||
class SnapshotTriggers(BaseModel):
|
||||
room_count: int = 500
|
||||
session_end: bool = True
|
||||
time_interval_hours: int = 24
|
||||
|
||||
snapshot_triggers: SnapshotTriggers = Field(default_factory=SnapshotTriggers)
|
||||
|
||||
active_storage: ActiveStorageConfig = Field(default_factory=ActiveStorageConfig)
|
||||
historical_storage: HistoricalStorageConfig = Field(default_factory=HistoricalStorageConfig)
|
||||
class MapperConfig(BaseModel):
|
||||
"""Mapper configuration"""
|
||||
class ActiveStorageConfig(BaseModel):
|
||||
db_path: str = "data/maps/active/world.db"
|
||||
graph_cache_size: int = 10000
|
||||
|
||||
class HistoricalStorageConfig(BaseModel):
|
||||
archive_dir: str = "data/maps/archive"
|
||||
|
||||
class SnapshotTriggers(BaseModel):
|
||||
room_count: int = 500
|
||||
session_end: bool = True
|
||||
time_interval_hours: int = 24
|
||||
|
||||
snapshot_triggers: SnapshotTriggers = Field(default_factory=SnapshotTriggers)
|
||||
|
||||
class SemanticSearchConfig(BaseModel):
|
||||
model: str = "sentence-transformers/all-MiniLM-L6-v2"
|
||||
top_k: int = 5
|
||||
similarity_threshold: float = 0.7
|
||||
|
||||
active_storage: ActiveStorageConfig = Field(default_factory=ActiveStorageConfig)
|
||||
historical_storage: HistoricalStorageConfig = Field(default_factory=HistoricalStorageConfig)
|
||||
semantic_search: SemanticSearchConfig = Field(default_factory=SemanticSearchConfig)
|
||||
|
||||
|
||||
class BehaviorConfig(BaseModel):
|
||||
|
||||
@@ -60,6 +60,7 @@ async def main_loop(config):
|
||||
enable_sync=True,
|
||||
room_count_trigger=config.mapper.historical_storage.snapshot_triggers.room_count,
|
||||
time_interval_hours=config.mapper.historical_storage.snapshot_triggers.time_interval_hours,
|
||||
embedding_model=config.mapper.semantic_search.model,
|
||||
)
|
||||
|
||||
# Initialize Character Creator (Phase 2)
|
||||
|
||||
@@ -39,6 +39,7 @@ class WorldMapper:
|
||||
enable_sync: bool = True,
|
||||
room_count_trigger: int = 500,
|
||||
time_interval_hours: float = 24.0,
|
||||
embedding_model: str = "sentence-transformers/all-MiniLM-L6-v2",
|
||||
) -> None:
|
||||
self.storage = ActiveStorage(db_path=db_path)
|
||||
self.pathfinder = Pathfinder(self.storage.graph)
|
||||
@@ -53,7 +54,7 @@ class WorldMapper:
|
||||
self._sync_manager: Optional[SyncManager] = None
|
||||
if enable_sync:
|
||||
historical = HistoricalStorage(archive_dir=archive_dir)
|
||||
semantic = SemanticSearch()
|
||||
semantic = SemanticSearch(model_name=embedding_model)
|
||||
self._sync_manager = SyncManager(
|
||||
active=self.storage,
|
||||
historical=historical,
|
||||
@@ -62,8 +63,8 @@ class WorldMapper:
|
||||
time_interval_hours=time_interval_hours,
|
||||
)
|
||||
logger.info(
|
||||
"SyncManager enabled: trigger=%d rooms, interval=%.1fh",
|
||||
room_count_trigger, time_interval_hours,
|
||||
"SyncManager enabled: trigger=%d rooms, interval=%.1fh, model=%s",
|
||||
room_count_trigger, time_interval_hours, embedding_model,
|
||||
)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
Reference in new issue
Block a user