GithubHelp home page GithubHelp logo

neo4j-partners / neo4j-generative-ai-google-cloud Goto Github PK

View Code? Open in Web Editor NEW
107.0 107.0 42.0 15.92 MB

Demonstration application showing how Neo4j works with Google Vertex AI Generative AI

License: Apache License 2.0

Jupyter Notebook 91.77% Python 8.23%

neo4j-generative-ai-google-cloud's People

Contributors

benofben avatar ezhilvendhan avatar gogitguhan avatar zach-blumenfeld avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

neo4j-generative-ai-google-cloud's Issues

GraphCypherQAChain chain generates invalid Cypher statement.

Issue Description:

When running a Cypher query using GraphCypherQAChain, a syntax error is encountered due to the cypher_prompt parameter setting. The generated Cypher statement incorrectly starts with the prefix "Answer:", which seems to cause a CypherSyntaxError.

Environment:

  • Python Version: 3.8 (created via conda create env)
  • langchain Version: 0.0.215, 0.0.254

Source Code:

from langchain.chains import GraphCypherQAChain
from langchain.graphs import Neo4jGraph
from langchain.llms import VertexAI
from langchain.prompts.prompt import PromptTemplate

CYPHER_GENERATION_TEMPLATE = """[...as given above...]"""
CYPHER_GENERATION_PROMPT = PromptTemplate(
    input_variables=["schema", "question"], template=CYPHER_GENERATION_TEMPLATE
)

graph = Neo4jGraph(
    url=connectionUrl, 
    username='neo4j', 
    password=password
)
chain = GraphCypherQAChain.from_llm(
    VertexAI(model_name='code-bison',
            max_output_tokens=2048,
            temperature=0,
            top_p=0.95,
            top_k=0.40), 
    graph=graph, 
    verbose=True,
    cypher_prompt=CYPHER_GENERATION_PROMPT,
    return_intermediate_steps=True
)

result = chain("""How many pythonistas are there?""")

Error and Traceback:

CypherSyntaxError at ~/.local/lib/python3.8/site-packages/langchain/graphs/neo4j_graph.py:81
...
Generated Cypher Statement:
Answer: MATCH (p:Person)-[:HAS_SKILL]->(s:Skill) WHERE toLower(s.name) CONTAINS 'python' RETURN COUNT(p)

---------------------------------------------------------------------------
CypherSyntaxError                         Traceback (most recent call last)
File ~/.local/lib/python3.8/site-packages/langchain/graphs/neo4j_graph.py:81, in Neo4jGraph.query(self, query, params)
     80 try:
---> 81     data = session.run(query, params)
     82     return [r.data() for r in data]

File ~/.local/lib/python3.8/site-packages/neo4j/_sync/work/session.py:311, in Session.run(self, query, parameters, **kwargs)
    310 parameters = dict(parameters or {}, **kwargs)
--> 311 self._auto_result._run(
    312     query, parameters, self._config.database,
    313     self._config.impersonated_user, self._config.default_access_mode,
    314     bookmarks, self._config.notifications_min_severity,
    315     self._config.notifications_disabled_categories,
    316 )
    318 return self._auto_result

File ~/.local/lib/python3.8/site-packages/neo4j/_sync/work/result.py:166, in Result._run(self, query, parameters, db, imp_user, access_mode, bookmarks, notifications_min_severity, notifications_disabled_categories)
    165 self._connection.send_all()
--> 166 self._attach()

File ~/.local/lib/python3.8/site-packages/neo4j/_sync/work/result.py:274, in Result._attach(self)
    273 while self._attached is False:
--> 274     self._connection.fetch_message()

File ~/.local/lib/python3.8/site-packages/neo4j/_sync/io/_common.py:180, in ConnectionErrorHandler.__getattr__.<locals>.outer.<locals>.inner(*args, **kwargs)
    179 try:
--> 180     func(*args, **kwargs)
    181 except (Neo4jError, ServiceUnavailable, SessionExpired) as exc:

File ~/.local/lib/python3.8/site-packages/neo4j/_sync/io/_bolt.py:808, in Bolt.fetch_message(self)
    805 tag, fields = self.inbox.pop(
    806     hydration_hooks=self.responses[0].hydration_hooks
    807 )
--> 808 res = self._process_message(tag, fields)
    809 self.idle_since = perf_counter()

File ~/.local/lib/python3.8/site-packages/neo4j/_sync/io/_bolt4.py:352, in Bolt4x0._process_message(self, tag, fields)
    351 try:
--> 352     response.on_failure(summary_metadata or {})
    353 except (ServiceUnavailable, DatabaseUnavailable):

File ~/.local/lib/python3.8/site-packages/neo4j/_sync/io/_common.py:247, in Response.on_failure(self, metadata)
    246 Util.callback(handler)
--> 247 raise Neo4jError.hydrate(**metadata)

CypherSyntaxError: {code: Neo.ClientError.Statement.SyntaxError} {message: Invalid input 'n': expected 'l/L' (line 1, column 2 (offset: 1))
"Answer: MATCH (p:Person)-[:HAS_SKILL]->(s:Skill) WHERE toLower(s.name) CONTAINS 'python' RETURN COUNT(p)"
  ^}

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
Cell In[10], line 1
----> 1 r = chain("""How many pythonistas are there?""")

File ~/.local/lib/python3.8/site-packages/langchain/chains/base.py:166, in Chain.__call__(self, inputs, return_only_outputs, callbacks, tags, include_run_info)
    164 except (KeyboardInterrupt, Exception) as e:
    165     run_manager.on_chain_error(e)
--> 166     raise e
    167 run_manager.on_chain_end(outputs)
    168 final_outputs: Dict[str, Any] = self.prep_outputs(
    169     inputs, outputs, return_only_outputs
    170 )

File ~/.local/lib/python3.8/site-packages/langchain/chains/base.py:160, in Chain.__call__(self, inputs, return_only_outputs, callbacks, tags, include_run_info)
    154 run_manager = callback_manager.on_chain_start(
    155     dumpd(self),
    156     inputs,
    157 )
    158 try:
    159     outputs = (
--> 160         self._call(inputs, run_manager=run_manager)
    161         if new_arg_supported
    162         else self._call(inputs)
    163     )
    164 except (KeyboardInterrupt, Exception) as e:
    165     run_manager.on_chain_error(e)

File ~/.local/lib/python3.8/site-packages/langchain/chains/graph_qa/cypher.py:120, in GraphCypherQAChain._call(self, inputs, run_manager)
    117 intermediate_steps.append({"query": generated_cypher})
    119 # Retrieve and limit the number of results
--> 120 context = self.graph.query(generated_cypher)[: self.top_k]
    122 if self.return_direct:
    123     final_result = context

File ~/.local/lib/python3.8/site-packages/langchain/graphs/neo4j_graph.py:84, in Neo4jGraph.query(self, query, params)
     82     return [r.data() for r in data]
     83 except CypherSyntaxError as e:
---> 84     raise ValueError("Generated Cypher Statement is not valid\n" f"{e}")

ValueError: Generated Cypher Statement is not valid
{code: Neo.ClientError.Statement.SyntaxError} {message: Invalid input 'n': expected 'l/L' (line 1, column 2 (offset: 1))
"Answer: MATCH (p:Person)-[:HAS_SKILL]->(s:Skill) WHERE toLower(s.name) CONTAINS 'python' RETURN COUNT(p)"
  ^}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.