blogs
blogs copied to clipboard
Final Query Throws Error - https://github.com/tomasonjo/blogs/blob/master/llm/neo4jvector_langchain_deepdive.ipynb?ref=blog.langchain.dev
When working through your note book. The final query:
existing_index_return.similarity_search("What do you know about LangChain?", k=1)
Throws an error;
ClientError: {code: Neo.ClientError.Procedure.ProcedureCallFailed} {message: Failed to invoke procedure db.index.vector.queryNodes: Caused by: java.lang.IllegalArgumentException: 'numberOfNearestNeighbours' must be positive}
I'm not sure if this is due to a change in Neo4j's implementation. Full stack trace is below:
[0;31m---------------------------------------------------------------------------[0m
[0;31mClientError[0m Traceback (most recent call last)
Cell [0;32mIn[29], line 1[0m
[0;32m----> 1[0m existing_index_return[38;5;241m.[39msimilarity_search([38;5;124m"[39m[38;5;124mWhat do you know about LangChain?[39m[38;5;124m"[39m, k[38;5;241m=[39m[38;5;241m1[39m)
File [0;32m~/anaconda3/lib/python3.11/site-packages/langchain/vectorstores/neo4j_vector.py:530[0m, in [0;36mNeo4jVector.similarity_search[0;34m(self, query, k, **kwargs)[0m
[1;32m 520[0m [38;5;250m[39m[38;5;124;03m"""Run similarity search with Neo4jVector.[39;00m
[1;32m 521[0m
[1;32m 522[0m [38;5;124;03mArgs:[39;00m
[0;32m (...)[0m
[1;32m 527[0m [38;5;124;03m List of Documents most similar to the query.[39;00m
[1;32m 528[0m [38;5;124;03m"""[39;00m
[1;32m 529[0m embedding [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39membedding[38;5;241m.[39membed_query(text[38;5;241m=[39mquery)
[0;32m--> 530[0m [38;5;28;01mreturn[39;00m [38;5;28mself[39m[38;5;241m.[39msimilarity_search_by_vector(
[1;32m 531[0m embedding[38;5;241m=[39membedding,
[1;32m 532[0m k[38;5;241m=[39mk,
[1;32m 533[0m query[38;5;241m=[39mquery,
[1;32m 534[0m )
File [0;32m~/anaconda3/lib/python3.11/site-packages/langchain/vectorstores/neo4j_vector.py:625[0m, in [0;36mNeo4jVector.similarity_search_by_vector[0;34m(self, embedding, k, **kwargs)[0m
[1;32m 610[0m [38;5;28;01mdef[39;00m [38;5;21msimilarity_search_by_vector[39m(
[1;32m 611[0m [38;5;28mself[39m,
[1;32m 612[0m embedding: List[[38;5;28mfloat[39m],
[1;32m 613[0m k: [38;5;28mint[39m [38;5;241m=[39m [38;5;241m4[39m,
[1;32m 614[0m [38;5;241m*[39m[38;5;241m*[39mkwargs: Any,
[1;32m 615[0m ) [38;5;241m-[39m[38;5;241m>[39m List[Document]:
[1;32m 616[0m [38;5;250m [39m[38;5;124;03m"""Return docs most similar to embedding vector.[39;00m
[1;32m 617[0m
[1;32m 618[0m [38;5;124;03m Args:[39;00m
[0;32m (...)[0m
[1;32m 623[0m [38;5;124;03m List of Documents most similar to the query vector.[39;00m
[1;32m 624[0m [38;5;124;03m """[39;00m
[0;32m--> 625[0m docs_and_scores [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39msimilarity_search_with_score_by_vector(
[1;32m 626[0m embedding[38;5;241m=[39membedding, k[38;5;241m=[39mk, [38;5;241m*[39m[38;5;241m*[39mkwargs
[1;32m 627[0m )
[1;32m 628[0m [38;5;28;01mreturn[39;00m [doc [38;5;28;01mfor[39;00m doc, _ [38;5;129;01min[39;00m docs_and_scores]
File [0;32m~/anaconda3/lib/python3.11/site-packages/langchain/vectorstores/neo4j_vector.py:594[0m, in [0;36mNeo4jVector.similarity_search_with_score_by_vector[0;34m(self, embedding, k, **kwargs)[0m
[1;32m 585[0m read_query [38;5;241m=[39m _get_search_index_query([38;5;28mself[39m[38;5;241m.[39msearch_type) [38;5;241m+[39m retrieval_query
[1;32m 586[0m parameters [38;5;241m=[39m {
[1;32m 587[0m [38;5;124m"[39m[38;5;124mindex[39m[38;5;124m"[39m: [38;5;28mself[39m[38;5;241m.[39mindex_name,
[1;32m 588[0m [38;5;124m"[39m[38;5;124mk[39m[38;5;124m"[39m: k,
[0;32m (...)[0m
[1;32m 591[0m [38;5;124m"[39m[38;5;124mquery[39m[38;5;124m"[39m: kwargs[[38;5;124m"[39m[38;5;124mquery[39m[38;5;124m"[39m],
[1;32m 592[0m }
[0;32m--> 594[0m results [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39mquery(read_query, params[38;5;241m=[39mparameters)
[1;32m 596[0m docs [38;5;241m=[39m [
[1;32m 597[0m (
[1;32m 598[0m Document(
[0;32m (...)[0m
[1;32m 606[0m [38;5;28;01mfor[39;00m result [38;5;129;01min[39;00m results
[1;32m 607[0m ]
[1;32m 608[0m [38;5;28;01mreturn[39;00m docs
File [0;32m~/anaconda3/lib/python3.11/site-packages/langchain/vectorstores/neo4j_vector.py:241[0m, in [0;36mNeo4jVector.query[0;34m(self, query, params)[0m
[1;32m 239[0m [38;5;28;01mtry[39;00m:
[1;32m 240[0m data [38;5;241m=[39m session[38;5;241m.[39mrun(query, params)
[0;32m--> 241[0m [38;5;28;01mreturn[39;00m [r[38;5;241m.[39mdata() [38;5;28;01mfor[39;00m r [38;5;129;01min[39;00m data]
[1;32m 242[0m [38;5;28;01mexcept[39;00m CypherSyntaxError [38;5;28;01mas[39;00m e:
[1;32m 243[0m [38;5;28;01mraise[39;00m [38;5;167;01mValueError[39;00m([38;5;124mf[39m[38;5;124m"[39m[38;5;124mCypher Statement is not valid[39m[38;5;130;01m\n[39;00m[38;5;132;01m{[39;00me[38;5;132;01m}[39;00m[38;5;124m"[39m)
File [0;32m~/anaconda3/lib/python3.11/site-packages/langchain/vectorstores/neo4j_vector.py:241[0m, in [0;36m<listcomp>[0;34m(.0)[0m
[1;32m 239[0m [38;5;28;01mtry[39;00m:
[1;32m 240[0m data [38;5;241m=[39m session[38;5;241m.[39mrun(query, params)
[0;32m--> 241[0m [38;5;28;01mreturn[39;00m [r[38;5;241m.[39mdata() [38;5;28;01mfor[39;00m r [38;5;129;01min[39;00m data]
[1;32m 242[0m [38;5;28;01mexcept[39;00m CypherSyntaxError [38;5;28;01mas[39;00m e:
[1;32m 243[0m [38;5;28;01mraise[39;00m [38;5;167;01mValueError[39;00m([38;5;124mf[39m[38;5;124m"[39m[38;5;124mCypher Statement is not valid[39m[38;5;130;01m\n[39;00m[38;5;132;01m{[39;00me[38;5;132;01m}[39;00m[38;5;124m"[39m)
File [0;32m~/anaconda3/lib/python3.11/site-packages/neo4j/_sync/work/result.py:266[0m, in [0;36mResult.__iter__[0;34m(self)[0m
[1;32m 264[0m [38;5;28;01myield[39;00m [38;5;28mself[39m[38;5;241m.[39m_record_buffer[38;5;241m.[39mpopleft()
[1;32m 265[0m [38;5;28;01melif[39;00m [38;5;28mself[39m[38;5;241m.[39m_streaming:
[0;32m--> 266[0m [38;5;28mself[39m[38;5;241m.[39m_connection[38;5;241m.[39mfetch_message()
[1;32m 267[0m [38;5;28;01melif[39;00m [38;5;28mself[39m[38;5;241m.[39m_discarding:
[1;32m 268[0m [38;5;28mself[39m[38;5;241m.[39m_discard()
File [0;32m~/anaconda3/lib/python3.11/site-packages/neo4j/_sync/io/_common.py:180[0m, in [0;36mConnectionErrorHandler.__getattr__.<locals>.outer.<locals>.inner[0;34m(*args, **kwargs)[0m
[1;32m 178[0m [38;5;28;01mdef[39;00m [38;5;21minner[39m([38;5;241m*[39margs, [38;5;241m*[39m[38;5;241m*[39mkwargs):
[1;32m 179[0m [38;5;28;01mtry[39;00m:
[0;32m--> 180[0m func([38;5;241m*[39margs, [38;5;241m*[39m[38;5;241m*[39mkwargs)
[1;32m 181[0m [38;5;28;01mexcept[39;00m (Neo4jError, ServiceUnavailable, SessionExpired) [38;5;28;01mas[39;00m exc:
[1;32m 182[0m [38;5;28;01massert[39;00m [38;5;129;01mnot[39;00m asyncio[38;5;241m.[39miscoroutinefunction([38;5;28mself[39m[38;5;241m.[39m__on_error)
File [0;32m~/anaconda3/lib/python3.11/site-packages/neo4j/_sync/io/_bolt.py:851[0m, in [0;36mBolt.fetch_message[0;34m(self)[0m
[1;32m 847[0m [38;5;66;03m# Receive exactly one message[39;00m
[1;32m 848[0m tag, fields [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39minbox[38;5;241m.[39mpop(
[1;32m 849[0m hydration_hooks[38;5;241m=[39m[38;5;28mself[39m[38;5;241m.[39mresponses[[38;5;241m0[39m][38;5;241m.[39mhydration_hooks
[1;32m 850[0m )
[0;32m--> 851[0m res [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39m_process_message(tag, fields)
[1;32m 852[0m [38;5;28mself[39m[38;5;241m.[39midle_since [38;5;241m=[39m perf_counter()
[1;32m 853[0m [38;5;28;01mreturn[39;00m res
File [0;32m~/anaconda3/lib/python3.11/site-packages/neo4j/_sync/io/_bolt5.py:376[0m, in [0;36mBolt5x0._process_message[0;34m(self, tag, fields)[0m
[1;32m 374[0m [38;5;28mself[39m[38;5;241m.[39m_server_state_manager[38;5;241m.[39mstate [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39mbolt_states[38;5;241m.[39mFAILED
[1;32m 375[0m [38;5;28;01mtry[39;00m:
[0;32m--> 376[0m response[38;5;241m.[39mon_failure(summary_metadata [38;5;129;01mor[39;00m {})
[1;32m 377[0m [38;5;28;01mexcept[39;00m (ServiceUnavailable, DatabaseUnavailable):
[1;32m 378[0m [38;5;28;01mif[39;00m [38;5;28mself[39m[38;5;241m.[39mpool:
File [0;32m~/anaconda3/lib/python3.11/site-packages/neo4j/_sync/io/_common.py:247[0m, in [0;36mResponse.on_failure[0;34m(self, metadata)[0m
[1;32m 245[0m handler [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39mhandlers[38;5;241m.[39mget([38;5;124m"[39m[38;5;124mon_summary[39m[38;5;124m"[39m)
[1;32m 246[0m Util[38;5;241m.[39mcallback(handler)
[0;32m--> 247[0m [38;5;28;01mraise[39;00m Neo4jError[38;5;241m.[39mhydrate([38;5;241m*[39m[38;5;241m*[39mmetadata)
[0;31mClientError[0m: {code: Neo.ClientError.Procedure.ProcedureCallFailed} {message: Failed to invoke procedure `db.index.vector.queryNodes`: Caused by: java.lang.IllegalArgumentException: 'numberOfNearestNeighbours' must be positive}
Yeah, there's a bug in 5.12. You should use the k value greater than 1