feat: add git-consistent memory gateway architecture
This commit is contained in:
98
gateway/app/query_service.py
Normal file
98
gateway/app/query_service.py
Normal file
@@ -0,0 +1,98 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from .locks import WorkspaceLockManager
|
||||
from .models import QueryRequest, QueryResponse, SyncRequest, SyncResponse
|
||||
from .qmd_client import QMDClient
|
||||
from .sync_service import SyncService
|
||||
|
||||
|
||||
class QueryService:
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
sync_service: SyncService,
|
||||
qmd_client: QMDClient,
|
||||
lock_manager: WorkspaceLockManager,
|
||||
) -> None:
|
||||
self.sync_service = sync_service
|
||||
self.qmd_client = qmd_client
|
||||
self.lock_manager = lock_manager
|
||||
|
||||
def handle_query(self, request: QueryRequest) -> QueryResponse:
|
||||
resolved = self.sync_service.workspace_manager.resolve_workspace(
|
||||
branch=request.branch,
|
||||
memory_profile=request.memory_profile,
|
||||
)
|
||||
|
||||
with self.lock_manager.acquire(resolved.workspace_name) as lock_stats:
|
||||
sync_meta = self.sync_service.sync_for_query(
|
||||
branch=resolved.branch,
|
||||
memory_profile=None,
|
||||
require_latest=request.require_latest,
|
||||
)
|
||||
|
||||
results, qmd_command = self.qmd_client.run_query(
|
||||
index_name=sync_meta.qmd_index,
|
||||
collection_name=sync_meta.qmd_collection,
|
||||
query_type=request.query_type,
|
||||
query=request.query,
|
||||
n=request.n,
|
||||
)
|
||||
|
||||
debug: dict[str, Any] | None = None
|
||||
if request.debug:
|
||||
debug = {
|
||||
"lock_wait_ms": lock_stats.wait_ms,
|
||||
"workspace_changed": sync_meta.changed,
|
||||
"previous_commit": sync_meta.previous_commit,
|
||||
"qmd_index": sync_meta.qmd_index,
|
||||
"qmd_command": qmd_command,
|
||||
"update_ran": sync_meta.update_ran,
|
||||
"embed_ran": sync_meta.embed_ran,
|
||||
"embed_error": sync_meta.embed_error,
|
||||
}
|
||||
|
||||
return QueryResponse(
|
||||
ok=True,
|
||||
branch=sync_meta.branch,
|
||||
resolved_workspace=str(sync_meta.workspace_path),
|
||||
commit_hash=sync_meta.commit_hash,
|
||||
synced_at=sync_meta.synced_at,
|
||||
query_type=request.query_type,
|
||||
results=results,
|
||||
qmd_collection=sync_meta.qmd_collection,
|
||||
debug=debug,
|
||||
)
|
||||
|
||||
def handle_sync(self, request: SyncRequest) -> SyncResponse:
|
||||
resolved = self.sync_service.workspace_manager.resolve_workspace(
|
||||
branch=request.branch,
|
||||
memory_profile=request.memory_profile,
|
||||
)
|
||||
|
||||
with self.lock_manager.acquire(resolved.workspace_name) as lock_stats:
|
||||
sync_meta = self.sync_service.sync_explicit(
|
||||
branch=resolved.branch,
|
||||
memory_profile=None,
|
||||
require_latest=request.require_latest,
|
||||
)
|
||||
debug = {
|
||||
"lock_wait_ms": lock_stats.wait_ms,
|
||||
"workspace_changed": sync_meta.changed,
|
||||
"previous_commit": sync_meta.previous_commit,
|
||||
"qmd_index": sync_meta.qmd_index,
|
||||
"update_ran": sync_meta.update_ran,
|
||||
"embed_ran": sync_meta.embed_ran,
|
||||
"embed_error": sync_meta.embed_error,
|
||||
}
|
||||
return SyncResponse(
|
||||
ok=True,
|
||||
branch=sync_meta.branch,
|
||||
resolved_workspace=str(sync_meta.workspace_path),
|
||||
commit_hash=sync_meta.commit_hash,
|
||||
synced_at=sync_meta.synced_at,
|
||||
qmd_collection=sync_meta.qmd_collection,
|
||||
debug=debug,
|
||||
)
|
||||
Reference in New Issue
Block a user