Skip to content

Commit 7d24673

Browse files
committed
Refactor core logic and policy abstraction
1 parent fca83c4 commit 7d24673

File tree

22 files changed

+445
-321
lines changed

22 files changed

+445
-321
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ benchmarks/results/*
1212
temp/*
1313
*.log
1414
bin/*
15-
.venv/
15+
.venv/
16+
.env

benchmarks/benchmark.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,9 +291,9 @@ def get_vectorQ_answer(
291291
vectorQ_prompt = f"{task} {review_text}"
292292
latency_vectorq_logic: float = time.time()
293293
try:
294-
is_cache_hit, cache_response, nn_response = self.vectorq.create(
294+
is_cache_hit, cache_response, nn_response = self.vectorq.infer(
295295
prompt=vectorQ_prompt,
296-
output_format=output_format,
296+
system_prompt=output_format,
297297
benchmark=vectorQ_benchmark,
298298
)
299299
except Exception as e:

poetry.lock

Lines changed: 75 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ dependencies = [
2222
"accelerate (>=1.6.0,<2.0.0)",
2323
"typing-extensions (>=4.13.2,<5.0.0)",
2424
"torchvision (>=0.22.0,<0.23.0)",
25+
"statsmodels (>=0.14.4,<0.15.0)",
2526
]
2627

2728

@@ -44,6 +45,7 @@ ruff = "^0.11.6"
4445
mypy = "^1.15.0"
4546
pre-commit = "^4.2.0"
4647
pytest = "^8.0.0"
48+
python-dotenv = "^1.1.0"
4749

4850

4951
[tool.ruff]

vectorq/__init__.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
LangChainInferenceEngine,
1313
OpenAIInferenceEngine,
1414
)
15-
from vectorq.main import VectorQ, VectorQBenchmark
15+
from vectorq.main import VectorQ
1616

1717
# Embedding engines
1818
from vectorq.vectorq_core.cache.embedding_engine import (
@@ -48,10 +48,17 @@
4848
StringComparisonSimilarityEvaluator,
4949
)
5050

51+
# VectorQ Policies
52+
from vectorq.vectorq_policy import (
53+
DynamicThresholdPolicy,
54+
NoCachePolicy,
55+
StaticThresholdPolicy,
56+
VectorQPolicy,
57+
)
58+
5159
__all__ = [
5260
# Main classes
5361
"VectorQ",
54-
"VectorQBenchmark",
5562
"VectorQConfig",
5663
# Inference engines
5764
"InferenceEngine",
@@ -74,8 +81,12 @@
7481
# Eviction policies
7582
"EvictionPolicy",
7683
"LRUEvictionPolicy",
77-
"NoEvictionPolicy",
7884
# Embedding metadata storage
7985
"EmbeddingMetadataStorage",
8086
"InMemoryEmbeddingMetadataStorage",
87+
# VectorQ Policies
88+
"VectorQPolicy",
89+
"DynamicThresholdPolicy",
90+
"StaticThresholdPolicy",
91+
"NoCachePolicy",
8192
]

vectorq/config.py

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
from typing import Optional
22

33
from vectorq.inference_engine.inference_engine import InferenceEngine
4+
from vectorq.inference_engine.strategies.open_ai import OpenAIInferenceEngine
5+
from vectorq.vectorq_core.cache.embedding_engine import OpenAIEmbeddingEngine
46
from vectorq.vectorq_core.cache.embedding_engine.embedding_engine import EmbeddingEngine
57
from vectorq.vectorq_core.cache.embedding_store.embedding_metadata_storage.embedding_metadata_storage import (
68
EmbeddingMetadataStorage,
79
)
8-
from vectorq.vectorq_core.cache.embedding_store.vector_db import VectorDB
9-
from vectorq.vectorq_core.cache.eviction_policy.eviction_policy import EvictionPolicy
10-
from vectorq.vectorq_core.similarity_evaluator.similarity_evaluator import (
11-
SimilarityEvaluator,
10+
from vectorq.vectorq_core.cache.embedding_store.embedding_metadata_storage.strategies.in_memory import (
11+
InMemoryEmbeddingMetadataStorage,
1212
)
13-
from vectorq.vectorq_core.similarity_evaluator.strategies.string_comparison import (
14-
StringComparisonSimilarityEvaluator,
13+
from vectorq.vectorq_core.cache.embedding_store.vector_db import VectorDB
14+
from vectorq.vectorq_core.cache.embedding_store.vector_db.strategies.hnsw_lib import (
15+
HNSWLibVectorDB,
1516
)
16-
from vectorq.vectorq_core.vectorq_policy.vectorq_policy import VectorQPolicy
17+
from vectorq.vectorq_core.cache.eviction_policy.eviction_policy import EvictionPolicy
18+
from vectorq.vectorq_core.cache.eviction_policy.strategies.lru import LRUEvictionPolicy
1719

1820

1921
class VectorQConfig:
@@ -24,29 +26,16 @@ class VectorQConfig:
2426

2527
def __init__(
2628
self,
27-
accuracy_target: float = 0.8,
28-
enable_cache: bool = True,
29-
rnd_num_ub: float = 1.0,
30-
is_static_threshold: bool = False,
31-
static_threshold: float = 0.0,
32-
inference_engine: Optional[InferenceEngine] = None,
33-
embedding_engine: Optional[EmbeddingEngine] = None,
34-
vector_db: Optional[VectorDB] = None,
35-
similarity_evaluator: SimilarityEvaluator = StringComparisonSimilarityEvaluator(),
36-
eviction_policy: Optional[EvictionPolicy] = None,
37-
embedding_metadata_storage: Optional[EmbeddingMetadataStorage] = None,
38-
vectorq_policy: Optional[VectorQPolicy] = None,
29+
inference_engine: InferenceEngine = OpenAIInferenceEngine(),
30+
embedding_engine: EmbeddingEngine = OpenAIEmbeddingEngine(),
31+
vector_db: VectorDB = HNSWLibVectorDB(),
32+
embedding_metadata_storage: EmbeddingMetadataStorage = InMemoryEmbeddingMetadataStorage(),
33+
eviction_policy: EvictionPolicy = LRUEvictionPolicy(),
34+
system_prompt: Optional[str] = None,
3935
):
40-
self.accuracy_target: float = accuracy_target
41-
self.enable_cache: bool = enable_cache
42-
self.rnd_num_ub: float = rnd_num_ub
43-
self.is_static_threshold: bool = is_static_threshold
44-
self.static_threshold: float = static_threshold
45-
4636
self.inference_engine = inference_engine
4737
self.embedding_engine = embedding_engine
4838
self.vector_db = vector_db
49-
self.similarity_evaluator = similarity_evaluator
5039
self.eviction_policy = eviction_policy
5140
self.embedding_metadata_storage = embedding_metadata_storage
52-
self.vectorq_policy = vectorq_policy
41+
self.system_prompt = system_prompt

vectorq/inference_engine/inference_engine.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class InferenceEngine(ABC):
77
"""
88

99
@abstractmethod
10-
def create(self, prompt: str, output_format: str = None) -> str:
10+
def create(self, prompt: str, system_prompt: str = None) -> str:
1111
"""
1212
prompt: str - The prompt to create an answer for
1313
output_format: str - The optional output format to use for the response
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from typing import override
2+
3+
from vectorq.inference_engine.inference_engine import InferenceEngine
4+
5+
6+
class BenchmarkInferenceEngine(InferenceEngine):
7+
"""
8+
An inference engine implementation that returns pre-computed responses for given prompts.
9+
It is used for benchmarking purposes.
10+
"""
11+
12+
def set_next_response(self, response: str):
13+
self.next_response = response
14+
15+
@override
16+
def create(self, prompt: str, system_prompt: str = None) -> str:
17+
if self.next_response is None:
18+
raise ValueError("No next response set")
19+
return self.next_response

vectorq/inference_engine/strategies/lang_chain.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ def __init__(self, provider: str, model_name: str, temperature: float = 1):
4949
except Exception as e:
5050
raise Exception(f"Error initializing LangChain model: {e}")
5151

52-
def create(self, prompt: str, output_format: str = None) -> str:
52+
def create(self, prompt: str, system_prompt: str = None) -> str:
5353
try:
5454
messages = []
55-
if output_format:
56-
messages.append(SystemMessage(content=output_format))
55+
if system_prompt:
56+
messages.append(SystemMessage(content=system_prompt))
5757
messages.append(HumanMessage(content=prompt))
5858

5959
response = self.chat_model(messages)

vectorq/inference_engine/strategies/open_ai.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ def __init__(self, model_name: str, temperature: float = 1):
1010
self.temperature = temperature
1111
self.client = OpenAIClient()
1212

13-
def create(self, prompt: str, output_format: str = None) -> str:
13+
def create(self, prompt: str, system_prompt: str = None) -> str:
1414
try:
1515
messages = []
16-
if output_format:
17-
messages.append({"role": "system", "content": output_format})
16+
if system_prompt:
17+
messages.append({"role": "system", "content": system_prompt})
1818
messages.append({"role": "user", "content": prompt})
1919
completion = self.client.chat.completions.create(
2020
model=self.model_name,

0 commit comments

Comments
 (0)