blogs icon indicating copy to clipboard operation
blogs copied to clipboard

Final Query Throws Error - https://github.com/tomasonjo/blogs/blob/master/llm/neo4jvector_langchain_deepdive.ipynb?ref=blog.langchain.dev

Open MuddyBootsCode opened this issue 2 years ago • 1 comments

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}

MuddyBootsCode avatar Nov 02 '23 11:11 MuddyBootsCode

Yeah, there's a bug in 5.12. You should use the k value greater than 1

tomasonjo avatar Nov 02 '23 11:11 tomasonjo