Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 501c224540 |
@@ -5,9 +5,6 @@ LLM-driven automated knowledge graph construction from text using DSPy and Neo4j
|
||||
```sh
|
||||
text-to-cypher/
|
||||
├── README.md
|
||||
├── examples/
|
||||
│ └── wikipedia-abstracts-v0_0_1.ndjson
|
||||
├── img/
|
||||
├── main.py
|
||||
├── pyproject.toml
|
||||
├── uv.lock
|
||||
|
||||
17
main.py
17
main.py
@@ -14,7 +14,7 @@ neo4j = Neo4j(
|
||||
)
|
||||
|
||||
|
||||
class CypherFromText(dspy.Signature):
|
||||
class CypherFromQuestion(dspy.Signature):
|
||||
"""Task: Generate Cypher statement to query a graph database.
|
||||
Instructions: Use only the provided relationship types and properties in the schema.
|
||||
Do not use any other relationship types or properties that are not provided in the schema.
|
||||
@@ -22,15 +22,14 @@ class CypherFromText(dspy.Signature):
|
||||
Do not respond to any questions that might ask anything else than for you to construct a Cypher statement.
|
||||
Do not include any text except the generated Cypher statement.
|
||||
"""
|
||||
|
||||
question = dspy.InputField(
|
||||
desc="Question to model using a cypher statement."
|
||||
desc="Question to model using a cypher statement. Use only the provided relationship types and properties in the schema."
|
||||
)
|
||||
neo4j_schema = dspy.InputField(
|
||||
desc="Current graph schema in Neo4j as a list of NODES and RELATIONSHIPS."
|
||||
)
|
||||
statement = dspy.OutputField(
|
||||
desc="Cypher statement to merge nodes and relationships found in the text."
|
||||
)
|
||||
statement = dspy.OutputField(desc="Cypher statement to query the graph database.")
|
||||
|
||||
|
||||
class GenerateCypherConfig(PrecompiledConfig):
|
||||
@@ -47,11 +46,11 @@ class GenerateCypher(PrecompiledProgram):
|
||||
model=config.model,
|
||||
max_tokens=config.max_tokens,
|
||||
)
|
||||
self.generate_cypher = dspy.ChainOfThought(CypherFromText)
|
||||
self.generate_cypher = dspy.ChainOfThought(CypherFromQuestion)
|
||||
self.generate_cypher.set_lm(self.lm)
|
||||
|
||||
def forward(self, text: str, neo4j_schema: list[str]):
|
||||
return self.generate_cypher(text=text, neo4j_schema=neo4j_schema)
|
||||
def forward(self, question: str, neo4j_schema: list[str]):
|
||||
return self.generate_cypher(question=question, neo4j_schema=neo4j_schema)
|
||||
|
||||
|
||||
generate_cypher = GenerateCypher(GenerateCypherConfig())
|
||||
@@ -77,6 +76,6 @@ if __name__ == "__main__":
|
||||
generate_cypher.push_to_hub(
|
||||
"farouk1/text-to-cypher",
|
||||
with_code=True,
|
||||
tag="v0.0.8",
|
||||
tag="v0.0.9",
|
||||
commit_message="Update README.md",
|
||||
)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"fields": [
|
||||
{
|
||||
"prefix": "Question:",
|
||||
"description": "Question to model using a cypher statement."
|
||||
"description": "Question to model using a cypher statement. Use only the provided relationship types and properties in the schema."
|
||||
},
|
||||
{
|
||||
"prefix": "Neo 4 J Schema:",
|
||||
@@ -20,7 +20,7 @@
|
||||
},
|
||||
{
|
||||
"prefix": "Statement:",
|
||||
"description": "Cypher statement to merge nodes and relationships found in the text."
|
||||
"description": "Cypher statement to query the graph database."
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -4,4 +4,4 @@ version = "0.1.0"
|
||||
description = "Add your description here"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.13"
|
||||
dependencies = ["datasets>=4.4.2", "dspy>=3.0.4", "modaic>=0.8.2", "neo4j~=5.18.0", "python-dotenv~=1.0.1"]
|
||||
dependencies = ["datasets>=4.4.2", "dspy>=3.0.4", "modaic>=0.8.2", "neo4j~=5.18.0", "python-dotenv~=1.0.1", "sacrebleu>=2.5.1"]
|
||||
|
||||
Reference in New Issue
Block a user