2026-02-17 02:44:00 - INFO - validate_rag.py:264 - === RAG Validation Suite Started === 2026-02-17 02:44:00 - INFO - validate_rag.py:268 - Loading config from .env 2026-02-17 02:44:00 - INFO - validate_rag.py:273 - Initializing Cohere and Qdrant clients 2026-02-17 02:44:00 - DEBUG - _trace.py:47 - connect_tcp.started host='d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io' port=6333 local_address=None timeout=5.0 socket_options=None 2026-02-17 02:44:00 - DEBUG - _trace.py:47 - connect_tcp.complete return_value= 2026-02-17 02:44:00 - DEBUG - _trace.py:47 - start_tls.started ssl_context= server_hostname='d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io' timeout=5.0 2026-02-17 02:44:00 - DEBUG - _trace.py:47 - start_tls.complete return_value= 2026-02-17 02:44:00 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:00 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:00 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:00 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:00 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:43:59 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:01 - INFO - _client.py:1025 - HTTP Request: GET https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333 "HTTP/1.1 200 OK" 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - close.started 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - close.complete 2026-02-17 02:44:01 - INFO - validate_rag.py:280 - Checking collection 'book_embeddings' 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - connect_tcp.started host='d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io' port=6333 local_address=None timeout=5.0 socket_options=None 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - connect_tcp.complete return_value= 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - start_tls.started ssl_context= server_hostname='d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io' timeout=5.0 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - start_tls.complete return_value= 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:44:00 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:01 - INFO - _client.py:1025 - HTTP Request: GET https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings "HTTP/1.1 200 OK" 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:44:00 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:01 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/scroll "HTTP/1.1 200 OK" 2026-02-17 02:44:01 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:44:00 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:02 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/scroll "HTTP/1.1 200 OK" 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:44:00 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:02 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/scroll "HTTP/1.1 200 OK" 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:02 - INFO - validate_rag.py:285 - Collection stats: 277 points, 43 unique URLs, vector_size=1024 2026-02-17 02:44:02 - INFO - validate_rag.py:297 - Using 5 default test queries 2026-02-17 02:44:02 - INFO - validate_rag.py:300 - Running validation queries... 2026-02-17 02:44:02 - INFO - validate_rag.py:118 - Query 1/5: 'What is ROS 2?...' 2026-02-17 02:44:02 - INFO - retrieve.py:200 - Embedding query: 'What is ROS 2?...' (top_k=5) 2026-02-17 02:44:02 - DEBUG - _trace.py:47 - connect_tcp.started host='api.cohere.com' port=443 local_address=None timeout=300 socket_options=None 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - connect_tcp.complete return_value= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - start_tls.started ssl_context= server_hostname='api.cohere.com' timeout=300 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - start_tls.complete return_value= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'access-control-expose-headers', b'X-Debug-Trace-ID'), (b'cache-control', b'no-cache, no-store, no-transform, must-revalidate, private, max-age=0'), (b'content-encoding', b'gzip'), (b'content-type', b'application/json'), (b'expires', b'Thu, 01 Jan 1970 00:00:00 GMT'), (b'num_chars', b'14'), (b'num_tokens', b'6'), (b'pragma', b'no-cache'), (b'vary', b'Origin,Accept-Encoding'), (b'x-accel-expires', b'0'), (b'x-debug-trace-id', b'0e6446324ed548141f5a0d69b80ee241'), (b'x-endpoint-monthly-call-limit', b'1000'), (b'x-trial-endpoint-call-limit', b'100'), (b'x-trial-endpoint-call-remaining', b'99'), (b'date', b'Mon, 16 Feb 2026 21:44:02 GMT'), (b'x-envoy-upstream-service-time', b'42'), (b'server', b'envoy'), (b'Via', b'1.1 google'), (b'Alt-Svc', b'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:03 - INFO - _client.py:1025 - HTTP Request: POST https://api.cohere.com/v2/embed "HTTP/1.1 200 OK" 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:03 - DEBUG - retrieve.py:212 - Generated embedding in 0.42s, dimension: 1024 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:44:02 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:03 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/query "HTTP/1.1 200 OK" 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:03 - INFO - retrieve.py:234 - Search completed in 0.32s, returned 5 results 2026-02-17 02:44:03 - INFO - retrieve.py:249 - Total query time: 0.74s 2026-02-17 02:44:03 - DEBUG - retrieve.py:127 - Metadata completeness: 5/5 = 100.0% 2026-02-17 02:44:03 - INFO - validate_rag.py:151 - → 5 results, avg_score=0.5969, passed=True 2026-02-17 02:44:03 - INFO - validate_rag.py:118 - Query 2/5: 'How do humanoid robots walk?...' 2026-02-17 02:44:03 - INFO - retrieve.py:200 - Embedding query: 'How do humanoid robots walk?...' (top_k=5) 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:03 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'access-control-expose-headers', b'X-Debug-Trace-ID'), (b'cache-control', b'no-cache, no-store, no-transform, must-revalidate, private, max-age=0'), (b'content-encoding', b'gzip'), (b'content-type', b'application/json'), (b'expires', b'Thu, 01 Jan 1970 00:00:00 GMT'), (b'num_chars', b'28'), (b'num_tokens', b'6'), (b'pragma', b'no-cache'), (b'vary', b'Origin,Accept-Encoding'), (b'x-accel-expires', b'0'), (b'x-debug-trace-id', b'a181bc69f6a3a9a91ae30053961d08b1'), (b'x-endpoint-monthly-call-limit', b'1000'), (b'x-trial-endpoint-call-limit', b'100'), (b'x-trial-endpoint-call-remaining', b'98'), (b'date', b'Mon, 16 Feb 2026 21:44:02 GMT'), (b'x-envoy-upstream-service-time', b'40'), (b'server', b'envoy'), (b'Via', b'1.1 google'), (b'Alt-Svc', b'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:04 - INFO - _client.py:1025 - HTTP Request: POST https://api.cohere.com/v2/embed "HTTP/1.1 200 OK" 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:04 - DEBUG - retrieve.py:212 - Generated embedding in 0.37s, dimension: 1024 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:44:02 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:04 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/query "HTTP/1.1 200 OK" 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:04 - INFO - retrieve.py:234 - Search completed in 0.33s, returned 5 results 2026-02-17 02:44:04 - INFO - retrieve.py:249 - Total query time: 0.70s 2026-02-17 02:44:04 - DEBUG - retrieve.py:127 - Metadata completeness: 5/5 = 100.0% 2026-02-17 02:44:04 - INFO - validate_rag.py:151 - → 5 results, avg_score=0.5882, passed=True 2026-02-17 02:44:04 - INFO - validate_rag.py:118 - Query 3/5: 'Explain navigation intelligence in robots...' 2026-02-17 02:44:04 - INFO - retrieve.py:200 - Embedding query: 'Explain navigation intelligence in robots...' (top_k=5) 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'access-control-expose-headers', b'X-Debug-Trace-ID'), (b'cache-control', b'no-cache, no-store, no-transform, must-revalidate, private, max-age=0'), (b'content-encoding', b'gzip'), (b'content-type', b'application/json'), (b'expires', b'Thu, 01 Jan 1970 00:00:00 GMT'), (b'num_chars', b'41'), (b'num_tokens', b'5'), (b'pragma', b'no-cache'), (b'vary', b'Origin,Accept-Encoding'), (b'x-accel-expires', b'0'), (b'x-debug-trace-id', b'232ec4a0442fe5d1eaeff6a4d03d2f17'), (b'x-endpoint-monthly-call-limit', b'1000'), (b'x-trial-endpoint-call-limit', b'100'), (b'x-trial-endpoint-call-remaining', b'97'), (b'date', b'Mon, 16 Feb 2026 21:44:03 GMT'), (b'x-envoy-upstream-service-time', b'60'), (b'server', b'envoy'), (b'Via', b'1.1 google'), (b'Alt-Svc', b'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:04 - INFO - _client.py:1025 - HTTP Request: POST https://api.cohere.com/v2/embed "HTTP/1.1 200 OK" 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:04 - DEBUG - retrieve.py:212 - Generated embedding in 0.36s, dimension: 1024 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:04 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:44:03 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:05 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/query "HTTP/1.1 200 OK" 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:05 - INFO - retrieve.py:234 - Search completed in 0.32s, returned 5 results 2026-02-17 02:44:05 - INFO - retrieve.py:249 - Total query time: 0.68s 2026-02-17 02:44:05 - DEBUG - retrieve.py:127 - Metadata completeness: 5/5 = 100.0% 2026-02-17 02:44:05 - INFO - validate_rag.py:151 - → 5 results, avg_score=0.5947, passed=True 2026-02-17 02:44:05 - INFO - validate_rag.py:118 - Query 4/5: 'What is a digital twin?...' 2026-02-17 02:44:05 - INFO - retrieve.py:200 - Embedding query: 'What is a digital twin?...' (top_k=5) 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'access-control-expose-headers', b'X-Debug-Trace-ID'), (b'cache-control', b'no-cache, no-store, no-transform, must-revalidate, private, max-age=0'), (b'content-encoding', b'gzip'), (b'content-type', b'application/json'), (b'expires', b'Thu, 01 Jan 1970 00:00:00 GMT'), (b'num_chars', b'23'), (b'num_tokens', b'6'), (b'pragma', b'no-cache'), (b'vary', b'Origin,Accept-Encoding'), (b'x-accel-expires', b'0'), (b'x-debug-trace-id', b'b54b0d04a183972fbaaf5c6de8507c0b'), (b'x-endpoint-monthly-call-limit', b'1000'), (b'x-trial-endpoint-call-limit', b'100'), (b'x-trial-endpoint-call-remaining', b'96'), (b'date', b'Mon, 16 Feb 2026 21:44:03 GMT'), (b'x-envoy-upstream-service-time', b'42'), (b'server', b'envoy'), (b'Via', b'1.1 google'), (b'Alt-Svc', b'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:05 - INFO - _client.py:1025 - HTTP Request: POST https://api.cohere.com/v2/embed "HTTP/1.1 200 OK" 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:05 - DEBUG - retrieve.py:212 - Generated embedding in 0.34s, dimension: 1024 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:44:04 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:05 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/query "HTTP/1.1 200 OK" 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:05 - INFO - retrieve.py:234 - Search completed in 0.32s, returned 5 results 2026-02-17 02:44:05 - INFO - retrieve.py:249 - Total query time: 0.66s 2026-02-17 02:44:05 - DEBUG - retrieve.py:127 - Metadata completeness: 5/5 = 100.0% 2026-02-17 02:44:05 - INFO - validate_rag.py:151 - → 5 results, avg_score=0.6145, passed=True 2026-02-17 02:44:05 - INFO - validate_rag.py:118 - Query 5/5: 'How to use LLMs for robot planning?...' 2026-02-17 02:44:05 - INFO - retrieve.py:200 - Embedding query: 'How to use LLMs for robot planning?...' (top_k=5) 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:05 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'access-control-expose-headers', b'X-Debug-Trace-ID'), (b'cache-control', b'no-cache, no-store, no-transform, must-revalidate, private, max-age=0'), (b'content-encoding', b'gzip'), (b'content-type', b'application/json'), (b'expires', b'Thu, 01 Jan 1970 00:00:00 GMT'), (b'num_chars', b'35'), (b'num_tokens', b'9'), (b'pragma', b'no-cache'), (b'vary', b'Origin,Accept-Encoding'), (b'x-accel-expires', b'0'), (b'x-debug-trace-id', b'005889d737c82462c0d9230bde491aaa'), (b'x-endpoint-monthly-call-limit', b'1000'), (b'x-trial-endpoint-call-limit', b'100'), (b'x-trial-endpoint-call-remaining', b'95'), (b'date', b'Mon, 16 Feb 2026 21:44:04 GMT'), (b'x-envoy-upstream-service-time', b'37'), (b'server', b'envoy'), (b'Via', b'1.1 google'), (b'Alt-Svc', b'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:06 - INFO - _client.py:1025 - HTTP Request: POST https://api.cohere.com/v2/embed "HTTP/1.1 200 OK" 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:06 - DEBUG - retrieve.py:212 - Generated embedding in 0.34s, dimension: 1024 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:44:04 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:44:06 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/query "HTTP/1.1 200 OK" 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:44:06 - INFO - retrieve.py:234 - Search completed in 0.32s, returned 5 results 2026-02-17 02:44:06 - INFO - retrieve.py:249 - Total query time: 0.66s 2026-02-17 02:44:06 - DEBUG - retrieve.py:127 - Metadata completeness: 5/5 = 100.0% 2026-02-17 02:44:06 - INFO - validate_rag.py:151 - → 5 results, avg_score=0.6683, passed=True 2026-02-17 02:44:06 - DEBUG - retrieve.py:127 - Metadata completeness: 25/25 = 100.0% 2026-02-17 02:44:06 - INFO - validate_rag.py:328 - ================================================== 2026-02-17 02:44:06 - INFO - validate_rag.py:329 - Validation Summary: 2026-02-17 02:44:06 - INFO - validate_rag.py:330 - Collection: 277 points, 43 URLs 2026-02-17 02:44:06 - INFO - validate_rag.py:331 - Queries: 5 tested, 5 passed 2026-02-17 02:44:06 - INFO - validate_rag.py:332 - Metadata completeness: 100.0% 2026-02-17 02:44:06 - INFO - validate_rag.py:333 - Avg results per query: 5.0 2026-02-17 02:44:06 - INFO - validate_rag.py:334 - Avg top score: 0.6125 2026-02-17 02:44:06 - INFO - validate_rag.py:335 - Overall Status: PASS 2026-02-17 02:44:06 - INFO - validate_rag.py:338 - ✅ RAG Validation PASSED 2026-02-17 02:44:06 - INFO - validate_rag.py:343 - ================================================== 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - close.started 2026-02-17 02:44:06 - DEBUG - _trace.py:47 - close.complete 2026-02-17 02:48:39 - INFO - validate_rag.py:264 - === RAG Validation Suite Started === 2026-02-17 02:48:39 - INFO - validate_rag.py:268 - Loading config from .env 2026-02-17 02:48:39 - INFO - validate_rag.py:273 - Initializing Cohere and Qdrant clients 2026-02-17 02:48:39 - DEBUG - _trace.py:47 - connect_tcp.started host='d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io' port=6333 local_address=None timeout=5.0 socket_options=None 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - connect_tcp.complete return_value= 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - start_tls.started ssl_context= server_hostname='d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io' timeout=5.0 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - start_tls.complete return_value= 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:48:40 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:40 - INFO - _client.py:1025 - HTTP Request: GET https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333 "HTTP/1.1 200 OK" 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - close.started 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - close.complete 2026-02-17 02:48:40 - INFO - validate_rag.py:280 - Checking collection 'book_embeddings' 2026-02-17 02:48:40 - DEBUG - _trace.py:47 - connect_tcp.started host='d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io' port=6333 local_address=None timeout=5.0 socket_options=None 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - connect_tcp.complete return_value= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - start_tls.started ssl_context= server_hostname='d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io' timeout=5.0 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - start_tls.complete return_value= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:48:41 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:41 - INFO - _client.py:1025 - HTTP Request: GET https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings "HTTP/1.1 200 OK" 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:48:41 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:41 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/scroll "HTTP/1.1 200 OK" 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:41 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:48:41 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:42 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/scroll "HTTP/1.1 200 OK" 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:48:42 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:42 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/scroll "HTTP/1.1 200 OK" 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:42 - INFO - validate_rag.py:285 - Collection stats: 277 points, 43 unique URLs, vector_size=1024 2026-02-17 02:48:42 - INFO - validate_rag.py:297 - Using 5 default test queries 2026-02-17 02:48:42 - INFO - validate_rag.py:300 - Running validation queries... 2026-02-17 02:48:42 - INFO - validate_rag.py:118 - Query 1/5: 'What is ROS 2?...' 2026-02-17 02:48:42 - INFO - retrieve.py:200 - Embedding query: 'What is ROS 2?...' (top_k=5) 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - connect_tcp.started host='api.cohere.com' port=443 local_address=None timeout=300 socket_options=None 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - connect_tcp.complete return_value= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - start_tls.started ssl_context= server_hostname='api.cohere.com' timeout=300 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - start_tls.complete return_value= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'access-control-expose-headers', b'X-Debug-Trace-ID'), (b'cache-control', b'no-cache, no-store, no-transform, must-revalidate, private, max-age=0'), (b'content-encoding', b'gzip'), (b'content-type', b'application/json'), (b'expires', b'Thu, 01 Jan 1970 00:00:00 GMT'), (b'num_chars', b'14'), (b'num_tokens', b'6'), (b'pragma', b'no-cache'), (b'vary', b'Origin,Accept-Encoding'), (b'x-accel-expires', b'0'), (b'x-debug-trace-id', b'8707b3a794a01af5424e2c041acf8797'), (b'x-endpoint-monthly-call-limit', b'1000'), (b'x-trial-endpoint-call-limit', b'100'), (b'x-trial-endpoint-call-remaining', b'99'), (b'date', b'Mon, 16 Feb 2026 21:48:42 GMT'), (b'x-envoy-upstream-service-time', b'40'), (b'server', b'envoy'), (b'Via', b'1.1 google'), (b'Alt-Svc', b'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:42 - INFO - _client.py:1025 - HTTP Request: POST https://api.cohere.com/v2/embed "HTTP/1.1 200 OK" 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:42 - DEBUG - retrieve.py:212 - Generated embedding in 0.45s, dimension: 1024 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:42 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:48:42 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:43 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/query "HTTP/1.1 200 OK" 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:43 - INFO - retrieve.py:234 - Search completed in 0.31s, returned 5 results 2026-02-17 02:48:43 - INFO - retrieve.py:249 - Total query time: 0.76s 2026-02-17 02:48:43 - DEBUG - retrieve.py:127 - Metadata completeness: 5/5 = 100.0% 2026-02-17 02:48:43 - INFO - validate_rag.py:151 - → 5 results, avg_score=0.5969, passed=True 2026-02-17 02:48:43 - INFO - validate_rag.py:118 - Query 2/5: 'How do humanoid robots walk?...' 2026-02-17 02:48:43 - INFO - retrieve.py:200 - Embedding query: 'How do humanoid robots walk?...' (top_k=5) 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'access-control-expose-headers', b'X-Debug-Trace-ID'), (b'cache-control', b'no-cache, no-store, no-transform, must-revalidate, private, max-age=0'), (b'content-encoding', b'gzip'), (b'content-type', b'application/json'), (b'expires', b'Thu, 01 Jan 1970 00:00:00 GMT'), (b'num_chars', b'28'), (b'num_tokens', b'6'), (b'pragma', b'no-cache'), (b'vary', b'Origin,Accept-Encoding'), (b'x-accel-expires', b'0'), (b'x-debug-trace-id', b'9d9b525c2f33f8fbe8885ef667598f56'), (b'x-endpoint-monthly-call-limit', b'1000'), (b'x-trial-endpoint-call-limit', b'100'), (b'x-trial-endpoint-call-remaining', b'98'), (b'date', b'Mon, 16 Feb 2026 21:48:43 GMT'), (b'x-envoy-upstream-service-time', b'46'), (b'server', b'envoy'), (b'Via', b'1.1 google'), (b'Alt-Svc', b'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:43 - INFO - _client.py:1025 - HTTP Request: POST https://api.cohere.com/v2/embed "HTTP/1.1 200 OK" 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:43 - DEBUG - retrieve.py:212 - Generated embedding in 0.35s, dimension: 1024 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:48:43 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:43 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/query "HTTP/1.1 200 OK" 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:43 - INFO - retrieve.py:234 - Search completed in 0.33s, returned 5 results 2026-02-17 02:48:43 - INFO - retrieve.py:249 - Total query time: 0.68s 2026-02-17 02:48:43 - DEBUG - retrieve.py:127 - Metadata completeness: 5/5 = 100.0% 2026-02-17 02:48:43 - INFO - validate_rag.py:151 - → 5 results, avg_score=0.5883, passed=True 2026-02-17 02:48:43 - INFO - validate_rag.py:118 - Query 3/5: 'Explain navigation intelligence in robots...' 2026-02-17 02:48:43 - INFO - retrieve.py:200 - Embedding query: 'Explain navigation intelligence in robots...' (top_k=5) 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:43 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'access-control-expose-headers', b'X-Debug-Trace-ID'), (b'cache-control', b'no-cache, no-store, no-transform, must-revalidate, private, max-age=0'), (b'content-encoding', b'gzip'), (b'content-type', b'application/json'), (b'expires', b'Thu, 01 Jan 1970 00:00:00 GMT'), (b'num_chars', b'41'), (b'num_tokens', b'5'), (b'pragma', b'no-cache'), (b'vary', b'Origin,Accept-Encoding'), (b'x-accel-expires', b'0'), (b'x-debug-trace-id', b'd6683ad44dc8b30f6a4e4ccd51f4878d'), (b'x-endpoint-monthly-call-limit', b'1000'), (b'x-trial-endpoint-call-limit', b'100'), (b'x-trial-endpoint-call-remaining', b'97'), (b'date', b'Mon, 16 Feb 2026 21:48:44 GMT'), (b'x-envoy-upstream-service-time', b'33'), (b'server', b'envoy'), (b'Via', b'1.1 google'), (b'Alt-Svc', b'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:44 - INFO - _client.py:1025 - HTTP Request: POST https://api.cohere.com/v2/embed "HTTP/1.1 200 OK" 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:44 - DEBUG - retrieve.py:212 - Generated embedding in 0.33s, dimension: 1024 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:48:44 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:44 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/query "HTTP/1.1 200 OK" 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:44 - INFO - retrieve.py:234 - Search completed in 0.32s, returned 5 results 2026-02-17 02:48:44 - INFO - retrieve.py:249 - Total query time: 0.65s 2026-02-17 02:48:44 - DEBUG - retrieve.py:127 - Metadata completeness: 5/5 = 100.0% 2026-02-17 02:48:44 - INFO - validate_rag.py:151 - → 5 results, avg_score=0.5949, passed=True 2026-02-17 02:48:44 - INFO - validate_rag.py:118 - Query 4/5: 'What is a digital twin?...' 2026-02-17 02:48:44 - INFO - retrieve.py:200 - Embedding query: 'What is a digital twin?...' (top_k=5) 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'access-control-expose-headers', b'X-Debug-Trace-ID'), (b'cache-control', b'no-cache, no-store, no-transform, must-revalidate, private, max-age=0'), (b'content-encoding', b'gzip'), (b'content-type', b'application/json'), (b'expires', b'Thu, 01 Jan 1970 00:00:00 GMT'), (b'num_chars', b'23'), (b'num_tokens', b'6'), (b'pragma', b'no-cache'), (b'vary', b'Origin,Accept-Encoding'), (b'x-accel-expires', b'0'), (b'x-debug-trace-id', b'418caee48872f3a94d6db2ac8ceabd27'), (b'x-endpoint-monthly-call-limit', b'1000'), (b'x-trial-endpoint-call-limit', b'100'), (b'x-trial-endpoint-call-remaining', b'96'), (b'date', b'Mon, 16 Feb 2026 21:48:44 GMT'), (b'x-envoy-upstream-service-time', b'41'), (b'server', b'envoy'), (b'Via', b'1.1 google'), (b'Alt-Svc', b'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:44 - INFO - _client.py:1025 - HTTP Request: POST https://api.cohere.com/v2/embed "HTTP/1.1 200 OK" 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:44 - DEBUG - retrieve.py:212 - Generated embedding in 0.34s, dimension: 1024 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:44 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:48:44 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:45 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/query "HTTP/1.1 200 OK" 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:45 - INFO - retrieve.py:234 - Search completed in 0.32s, returned 5 results 2026-02-17 02:48:45 - INFO - retrieve.py:249 - Total query time: 0.66s 2026-02-17 02:48:45 - DEBUG - retrieve.py:127 - Metadata completeness: 5/5 = 100.0% 2026-02-17 02:48:45 - INFO - validate_rag.py:151 - → 5 results, avg_score=0.6145, passed=True 2026-02-17 02:48:45 - INFO - validate_rag.py:118 - Query 5/5: 'How to use LLMs for robot planning?...' 2026-02-17 02:48:45 - INFO - retrieve.py:200 - Embedding query: 'How to use LLMs for robot planning?...' (top_k=5) 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'access-control-expose-headers', b'X-Debug-Trace-ID'), (b'cache-control', b'no-cache, no-store, no-transform, must-revalidate, private, max-age=0'), (b'content-encoding', b'gzip'), (b'content-type', b'application/json'), (b'expires', b'Thu, 01 Jan 1970 00:00:00 GMT'), (b'num_chars', b'35'), (b'num_tokens', b'9'), (b'pragma', b'no-cache'), (b'vary', b'Origin,Accept-Encoding'), (b'x-accel-expires', b'0'), (b'x-debug-trace-id', b'6230a37f0829a2a876b028b65fa46ee6'), (b'x-endpoint-monthly-call-limit', b'1000'), (b'x-trial-endpoint-call-limit', b'100'), (b'x-trial-endpoint-call-remaining', b'95'), (b'date', b'Mon, 16 Feb 2026 21:48:45 GMT'), (b'x-envoy-upstream-service-time', b'40'), (b'server', b'envoy'), (b'Via', b'1.1 google'), (b'Alt-Svc', b'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:45 - INFO - _client.py:1025 - HTTP Request: POST https://api.cohere.com/v2/embed "HTTP/1.1 200 OK" 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:45 - DEBUG - retrieve.py:212 - Generated embedding in 0.34s, dimension: 1024 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - send_request_headers.started request= 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - send_request_headers.complete 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - send_request_body.started request= 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - send_request_body.complete 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - receive_response_headers.started request= 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Encoding', b'gzip'), (b'Content-Type', b'application/json'), (b'Date', b'Mon, 16 Feb 2026 21:48:45 GMT'), (b'Vary', b'accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers'), (b'Transfer-Encoding', b'chunked')]) 2026-02-17 02:48:45 - INFO - _client.py:1025 - HTTP Request: POST https://d27e55fe-c28d-4275-81d7-7eff807c14a5.europe-west3-0.gcp.cloud.qdrant.io:6333/collections/book_embeddings/points/query "HTTP/1.1 200 OK" 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - receive_response_body.started request= 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - receive_response_body.complete 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - response_closed.started 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - response_closed.complete 2026-02-17 02:48:45 - INFO - retrieve.py:234 - Search completed in 0.32s, returned 5 results 2026-02-17 02:48:45 - INFO - retrieve.py:249 - Total query time: 0.66s 2026-02-17 02:48:45 - DEBUG - retrieve.py:127 - Metadata completeness: 5/5 = 100.0% 2026-02-17 02:48:45 - INFO - validate_rag.py:151 - → 5 results, avg_score=0.6683, passed=True 2026-02-17 02:48:45 - DEBUG - retrieve.py:127 - Metadata completeness: 25/25 = 100.0% 2026-02-17 02:48:45 - INFO - validate_rag.py:328 - ================================================== 2026-02-17 02:48:45 - INFO - validate_rag.py:329 - Validation Summary: 2026-02-17 02:48:45 - INFO - validate_rag.py:330 - Collection: 277 points, 43 URLs 2026-02-17 02:48:45 - INFO - validate_rag.py:331 - Queries: 5 tested, 5 passed 2026-02-17 02:48:45 - INFO - validate_rag.py:332 - Metadata completeness: 100.0% 2026-02-17 02:48:45 - INFO - validate_rag.py:333 - Avg results per query: 5.0 2026-02-17 02:48:45 - INFO - validate_rag.py:334 - Avg top score: 0.6126 2026-02-17 02:48:45 - INFO - validate_rag.py:335 - Overall Status: PASS 2026-02-17 02:48:45 - INFO - validate_rag.py:338 - ✅ RAG Validation PASSED 2026-02-17 02:48:45 - INFO - validate_rag.py:343 - ================================================== 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - close.started 2026-02-17 02:48:45 - DEBUG - _trace.py:47 - close.complete