Files
patchy631--ai-engineering-hub/pixeltable-mcp/doc-index/test.py
T
2026-07-13 12:37:47 +08:00

87 lines
2.2 KiB
Python

import pixeltable as pxt
from pixeltable.iterators import DocumentSplitter
from pixeltable.functions.huggingface import sentence_transformer
# Initialize app structure
pxt.drop_dir("pdf_search", force=True)
pxt.create_dir("pdf_search")
# Create documents table
documents_t = pxt.create_table(
"pdf_search.documents",
{"pdf": pxt.Document}
)
# Create chunked view for efficient processing
documents_chunks = pxt.create_view(
"pdf_search.document_chunks",
documents_t,
iterator=DocumentSplitter.create(
document=documents_t.pdf,
separators="token_limit",
limit=300 # Tokens per chunk
)
)
# Configure embedding model
embed_model = sentence_transformer.using(
model_id="intfloat/e5-large-v2"
)
# Add search capability
documents_chunks.add_embedding_index(
column="text",
string_embed=embed_model
)
# Define search query
@pxt.query
def search_documents(query_text: str, limit: int = 5):
sim = documents_chunks.text.similarity(query_text)
return (
documents_chunks.order_by(sim, asc=False)
.select(
documents_chunks.text,
similarity=sim
)
.limit(limit)
)
# Sample document URLs
DOCUMENT_URL = (
"https://github.com/pixeltable/pixeltable/raw/release/docs/resources/rag-demo/"
)
document_urls = [
DOCUMENT_URL + doc for doc in [
"Argus-Market-Digest-June-2024.pdf",
"Company-Research-Alphabet.pdf",
"Zacks-Nvidia-Report.pdf",
]
]
# Add documents to database
documents_t.insert({"pdf": url} for url in document_urls)
# Search documents
@pxt.query
def find_relevant_text(query: str, top_k: int = 5):
sim = documents_chunks.text.similarity(query)
return (
documents_chunks.order_by(sim, asc=False)
.select(
documents_chunks.text,
similarity=sim
)
.limit(top_k)
)
# Example search
results = find_relevant_text(
"What are the growth projections for tech companies?"
).collect()
# Print results
for r in results:
print(f"Similarity: {r['similarity']:.3f}")
print(f"Text: {r['text']}\n")