Spaces:
Paused
Paused
import os | |
from typing import Optional | |
import pytest | |
from _pytest.monkeypatch import MonkeyPatch | |
from upstash_vector import Index | |
# Mocking the Index class from upstash_vector | |
class MockIndex: | |
def __init__(self, url="", token=""): | |
self.url = url | |
self.token = token | |
self.vectors = [] | |
def upsert(self, vectors): | |
for vector in vectors: | |
vector.score = 0.5 | |
self.vectors.append(vector) | |
return {"code": 0, "msg": "operation success", "affectedCount": len(vectors)} | |
def fetch(self, ids): | |
return [vector for vector in self.vectors if vector.id in ids] | |
def delete(self, ids): | |
self.vectors = [vector for vector in self.vectors if vector.id not in ids] | |
return {"code": 0, "msg": "Success"} | |
def query( | |
self, | |
vector: None, | |
top_k: int = 10, | |
include_vectors: bool = False, | |
include_metadata: bool = False, | |
filter: str = "", | |
data: Optional[str] = None, | |
namespace: str = "", | |
include_data: bool = False, | |
): | |
# Simple mock query, in real scenario you would calculate similarity | |
mock_result = [] | |
for vector_data in self.vectors: | |
mock_result.append(vector_data) | |
return mock_result[:top_k] | |
def reset(self): | |
self.vectors = [] | |
def info(self): | |
return AttrDict({"dimension": 1024}) | |
class AttrDict(dict): | |
def __getattr__(self, item): | |
return self.get(item) | |
MOCK = os.getenv("MOCK_SWITCH", "false").lower() == "true" | |
def setup_upstashvector_mock(request, monkeypatch: MonkeyPatch): | |
if MOCK: | |
monkeypatch.setattr(Index, "__init__", MockIndex.__init__) | |
monkeypatch.setattr(Index, "upsert", MockIndex.upsert) | |
monkeypatch.setattr(Index, "fetch", MockIndex.fetch) | |
monkeypatch.setattr(Index, "delete", MockIndex.delete) | |
monkeypatch.setattr(Index, "query", MockIndex.query) | |
monkeypatch.setattr(Index, "reset", MockIndex.reset) | |
monkeypatch.setattr(Index, "info", MockIndex.info) | |
yield | |
if MOCK: | |
monkeypatch.undo() | |