ai-textbook-backend / debug_qdrant.py
Naveedtechlab's picture
Add full AI Native Textbook project source code
db7c1e8
import os
import sys
from dotenv import load_dotenv
from qdrant_client import QdrantClient
# Load environment variables from parent directory
load_dotenv(os.path.join(os.path.dirname(__file__), '..', '.env'))
def debug_qdrant():
# Get environment variables
qdrant_url = os.getenv("QDRANT_URL")
qdrant_api_key = os.getenv("QDRANT_API_KEY")
collection_name = os.getenv("QDRANT_COLLECTION", "project_documents")
print(f"QDRANT_URL: {qdrant_url}")
print(f"Collection: {collection_name}")
# Initialize Qdrant client for cloud
if qdrant_url and qdrant_api_key and "qdrant.io" in qdrant_url:
qdrant_client = QdrantClient(
url=qdrant_url.replace(":6333", ""), # Remove port from URL for cloud
api_key=qdrant_api_key,
prefer_grpc=False
)
else:
# Use local Qdrant if cloud not configured
qdrant_client = QdrantClient(
host=os.getenv("QDRANT_HOST", "localhost"),
port=int(os.getenv("QDRANT_PORT", 6333))
)
# 1. Check collections
print("\n1. Available collections:")
try:
collections = qdrant_client.get_collections()
for collection in collections.collections:
print(f" - {collection.name}")
except Exception as e:
print(f" Error getting collections: {e}")
# 2. Try to search for content to verify it exists
print(f"\n2. Testing search functionality:")
try:
# Try to create a simple embedding to test if connection works
from openai import OpenAI
openrouter_api_key = os.getenv("OPENAI_API_KEY")
client = OpenAI(
api_key=openrouter_api_key,
base_url="https://openrouter.ai/api/v1"
)
response = client.embeddings.create(
model="text-embedding-3-small",
input="Artificial Intelligence"
)
vector = response.data[0].embedding
# Now search in Qdrant
hits = qdrant_client.search(
collection_name=collection_name,
query_vector=vector,
limit=2
)
print(f" Search successful! Found {len(hits)} results")
if hits:
for i, hit in enumerate(hits):
print(f" Result {i+1}:")
print(f" ID: {hit.id}")
print(f" Payload keys: {list(hit.payload.keys()) if hit.payload else 'None'}")
if hit.payload and 'content' in hit.payload:
print(f" Content preview: {hit.payload['content'][:100]}...")
else:
print(f" Payload content: {hit.payload}")
except Exception as e:
print(f" Error during search test: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
debug_qdrant()