test2 / scratch /time_test.py
joedown11's picture
chore: update all internal API and asset links to point to new joedown11-chatrag main space
967ce7b
Raw
History Blame Contribute Delete
3.35 kB
import asyncio
import time
import os
from dotenv import load_dotenv
# Load local environment if present
load_dotenv()
from app.core.config import get_settings
from app.services.embeddings import EmbeddingService
from app.services.llm import LLMService
from app.services.vector_store import FaissVectorStore
from app.services.reranker import RerankerService
from app.services.rag_pipeline import RAGPipeline
async def run_timing_test():
print("Initializing services...")
settings = get_settings()
# Check key
if not settings.openai_api_key:
print("Warning: OPENAI_API_KEY is not set. Please set it in your environment or .env file.")
# Try to read from env var just in case
settings.openai_api_key = os.getenv("OPENAI_API_KEY", "")
t0 = time.time()
embedding_service = EmbeddingService(settings.embedding_model)
print(f"Embedding service loaded in {time.time() - t0:.2f}s")
t0 = time.time()
vector_store = FaissVectorStore(
embedding_service=embedding_service,
docs_dir=settings.docs_dir,
index_dir=settings.index_dir,
chunk_size_tokens=settings.chunk_size_tokens,
chunk_overlap_tokens=settings.chunk_overlap_tokens,
)
vector_store.build_or_load()
print(f"FAISS index loaded in {time.time() - t0:.2f}s")
t0 = time.time()
reranker_service = RerankerService(settings.reranker_model)
print(f"Reranker service loaded in {time.time() - t0:.2f}s")
llm_service = LLMService(
provider=settings.llm_provider,
openai_api_key=settings.openai_api_key,
openai_model=settings.openai_model,
openai_rewrite_model=settings.openai_rewrite_model,
)
pipeline = RAGPipeline(
vector_store=vector_store,
llm_service=llm_service,
reranker=reranker_service,
top_k=settings.top_k,
max_context_chunks=settings.max_context_chunks
)
# Run test chat
print("\n--- Running pipeline.chat Timing Test ---")
question = "How many casual leaves do I have?"
history = []
# Time rewrite query
t_start = time.time()
rewritten = await llm_service.rewrite_query(question, history)
t_rewrite = time.time() - t_start
print(f"1. Query Rewritten: '{question}' -> '{rewritten}' in {t_rewrite:.2f}s")
# Time vector search
t_start = time.time()
queries = [rewritten, question]
all_retrieved = vector_store.multi_search(queries, top_k=settings.top_k)
t_search = time.time() - t_start
print(f"2. Multi-search (FAISS) completed in {t_search:.2f}s (found {len(all_retrieved)} chunks)")
# Time reranking
t_start = time.time()
reranked = reranker_service.rerank(rewritten, all_retrieved, top_n=settings.max_context_chunks)
t_rerank = time.time() - t_start
print(f"3. Reranking completed in {t_rerank:.2f}s")
# Time answer generation
t_start = time.time()
answer = await llm_service.answer(question, reranked, history)
t_answer = time.time() - t_start
print(f"4. LLM Answer generated in {t_answer:.2f}s")
print(f"Response: '{answer[:60]}...'")
print(f"\nTotal Pipeline time: {t_rewrite + t_search + t_rerank + t_answer:.2f}s")
await llm_service.close()
if __name__ == "__main__":
asyncio.run(run_timing_test())