Spaces:
Running
Running
| import argparse | |
| import sys | |
| from pathlib import Path | |
| PROJECT_ROOT = Path(__file__).resolve().parents[1] | |
| if str(PROJECT_ROOT) not in sys.path: | |
| sys.path.insert(0, str(PROJECT_ROOT)) | |
| from app.config.settings import settings | |
| from app.ingestion.ingest import get_pipeline | |
| from app.retrieval.aggregator import get_aggregator | |
| from app.retrieval.chat import get_document_chat | |
| from app.retrieval.search import get_searcher | |
| def main() -> None: | |
| parser = argparse.ArgumentParser(description="Run an end-to-end smoke test.") | |
| parser.add_argument("--source-url", required=True, help="Public Drive/GitHub source URL to index.") | |
| parser.add_argument("--query", default="machine learning", help="Query to test retrieval.") | |
| parser.add_argument("--user-id", default="e2e_test_user_codex", help="Synthetic user ID for isolation testing.") | |
| parser.add_argument("--source-id", default="e2e_test_source_codex", help="Synthetic source ID for metadata.") | |
| args = parser.parse_args() | |
| print("CONFIG") | |
| print(f"vector={settings.VECTOR_DB_BACKEND} collection={settings.COLLECTION_NAME}") | |
| print(f"embedding={settings.EMBEDDING_PROVIDER} model={settings.EMBEDDING_MODEL} dim={settings.EMBEDDING_DIMENSION}") | |
| print(f"chat={settings.CHAT_PROVIDER} model={settings.CHAT_MODEL}") | |
| print(f"supabase_configured={bool(settings.SUPABASE_URL)} {bool(settings.SUPABASE_ANON_KEY)}") | |
| pipeline = get_pipeline() | |
| print(f"status_before={pipeline.get_status()}") | |
| print("\nINGEST") | |
| results = pipeline.ingest_source_url(args.source_url, user_id=args.user_id, source_id=args.source_id) | |
| print(f"files_indexed={len(results)}") | |
| print(f"chunk_counts={results}") | |
| print(f"total_indexed_this_run={sum(results.values())}") | |
| print(f"status_after={pipeline.get_status()}") | |
| print("\nSEARCH") | |
| searcher = get_searcher() | |
| search_results = searcher.search(args.query, top_k=5, user_id=args.user_id) | |
| print(f"search_count={len(search_results)}") | |
| for result in search_results[:3]: | |
| metadata = result.get("metadata", {}) | |
| preview = result.get("text", "").replace("\n", " ")[:180] | |
| print( | |
| "hit=" | |
| f"{result.get('rank')} file={metadata.get('filename')} " | |
| f"user_id={metadata.get('user_id')} similarity={result.get('similarity')}" | |
| ) | |
| print(f"preview={preview}") | |
| wrong_user_results = searcher.search(args.query, top_k=5, user_id="e2e_wrong_user_codex") | |
| print(f"wrong_user_search_count={len(wrong_user_results)}") | |
| print("\nCHAT") | |
| aggregated = get_aggregator().aggregate_by_document(search_results, max_chunks_per_doc=3) | |
| chunks = [chunk for doc in aggregated for chunk in doc["chunks"]] | |
| answer = get_document_chat().answer( | |
| "Summarize the most relevant retrieved context in two sentences.", | |
| chunks, | |
| max_context_chars=2500, | |
| ) | |
| print(f"chat_answer={answer[:500].replace(chr(10), ' ')}") | |
| if __name__ == "__main__": | |
| main() | |