Merge pull request #449 from topoteretes/feature/cog-186-run-cognee-on-windows
Feature/cog 186 run cognee on windows
This commit is contained in:
commit
ffa3c2daa0
7 changed files with 62 additions and 27 deletions
38
README.md
38
README.md
|
|
@ -85,7 +85,7 @@ import os
|
||||||
os.environ["LLM_API_KEY"] = "YOUR OPENAI_API_KEY"
|
os.environ["LLM_API_KEY"] = "YOUR OPENAI_API_KEY"
|
||||||
|
|
||||||
```
|
```
|
||||||
or
|
or
|
||||||
```
|
```
|
||||||
import cognee
|
import cognee
|
||||||
cognee.config.set_llm_api_key("YOUR_OPENAI_API_KEY")
|
cognee.config.set_llm_api_key("YOUR_OPENAI_API_KEY")
|
||||||
|
|
@ -115,7 +115,7 @@ DB_PORT=5432
|
||||||
DB_NAME=cognee_db
|
DB_NAME=cognee_db
|
||||||
DB_USERNAME=cognee
|
DB_USERNAME=cognee
|
||||||
DB_PASSWORD=cognee
|
DB_PASSWORD=cognee
|
||||||
```
|
```
|
||||||
|
|
||||||
### Simple example
|
### Simple example
|
||||||
|
|
||||||
|
|
@ -140,14 +140,14 @@ async def main():
|
||||||
Natural language processing (NLP) is an interdisciplinary
|
Natural language processing (NLP) is an interdisciplinary
|
||||||
subfield of computer science and information retrieval.
|
subfield of computer science and information retrieval.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
print("Adding text to cognee:")
|
print("Adding text to cognee:")
|
||||||
print(text.strip())
|
print(text.strip())
|
||||||
# Add the text, and make it available for cognify
|
# Add the text, and make it available for cognify
|
||||||
await cognee.add(text)
|
await cognee.add(text)
|
||||||
print("Text added successfully.\n")
|
print("Text added successfully.\n")
|
||||||
|
|
||||||
|
|
||||||
print("Running cognify to create knowledge graph...\n")
|
print("Running cognify to create knowledge graph...\n")
|
||||||
print("Cognify process steps:")
|
print("Cognify process steps:")
|
||||||
print("1. Classifying the document: Determining the type and category of the input text.")
|
print("1. Classifying the document: Determining the type and category of the input text.")
|
||||||
|
|
@ -156,19 +156,19 @@ async def main():
|
||||||
print("4. Adding data points: Storing the extracted chunks for processing.")
|
print("4. Adding data points: Storing the extracted chunks for processing.")
|
||||||
print("5. Generating knowledge graph: Extracting entities and relationships to form a knowledge graph.")
|
print("5. Generating knowledge graph: Extracting entities and relationships to form a knowledge graph.")
|
||||||
print("6. Summarizing text: Creating concise summaries of the content for quick insights.\n")
|
print("6. Summarizing text: Creating concise summaries of the content for quick insights.\n")
|
||||||
|
|
||||||
# Use LLMs and cognee to create knowledge graph
|
# Use LLMs and cognee to create knowledge graph
|
||||||
await cognee.cognify()
|
await cognee.cognify()
|
||||||
print("Cognify process complete.\n")
|
print("Cognify process complete.\n")
|
||||||
|
|
||||||
|
|
||||||
query_text = 'Tell me about NLP'
|
query_text = 'Tell me about NLP'
|
||||||
print(f"Searching cognee for insights with query: '{query_text}'")
|
print(f"Searching cognee for insights with query: '{query_text}'")
|
||||||
# Query cognee for insights on the added text
|
# Query cognee for insights on the added text
|
||||||
search_results = await cognee.search(
|
search_results = await cognee.search(
|
||||||
SearchType.INSIGHTS, query_text=query_text
|
SearchType.INSIGHTS, query_text=query_text
|
||||||
)
|
)
|
||||||
|
|
||||||
print("Search results:")
|
print("Search results:")
|
||||||
# Display results
|
# Display results
|
||||||
for result_text in search_results:
|
for result_text in search_results:
|
||||||
|
|
@ -212,7 +212,7 @@ Cognee supports a variety of tools and services for different operations:
|
||||||
- **Language Models (LLMs)**: You can use either Anyscale or Ollama as your LLM provider.
|
- **Language Models (LLMs)**: You can use either Anyscale or Ollama as your LLM provider.
|
||||||
|
|
||||||
- **Graph Stores**: In addition to NetworkX, Neo4j is also supported for graph storage.
|
- **Graph Stores**: In addition to NetworkX, Neo4j is also supported for graph storage.
|
||||||
|
|
||||||
- **User management**: Create individual user graphs and manage permissions
|
- **User management**: Create individual user graphs and manage permissions
|
||||||
|
|
||||||
## Demo
|
## Demo
|
||||||
|
|
@ -258,13 +258,13 @@ pip install cognee
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
| Name | Type | Current state | Known Issues |
|
| Name | Type | Current state (Mac/Linux) | Known Issues | Current state (Windows) | Known Issues |
|
||||||
|----------|--------------------|-------------------|--------------|
|
|----------|--------------------|---------------------------|--------------|-------------------------|--------------|
|
||||||
| Qdrant | Vector | Stable ✅ | |
|
| Qdrant | Vector | Stable ✅ | | Unstable ❌ | |
|
||||||
| Weaviate | Vector | Stable ✅ | |
|
| Weaviate | Vector | Stable ✅ | | Unstable ❌ | |
|
||||||
| LanceDB | Vector | Stable ✅ | |
|
| LanceDB | Vector | Stable ✅ | | Stable ✅ | |
|
||||||
| Neo4j | Graph | Stable ✅ | |
|
| Neo4j | Graph | Stable ✅ | | Stable ✅ | |
|
||||||
| NetworkX | Graph | Stable ✅ | |
|
| NetworkX | Graph | Stable ✅ | | Stable ✅ | |
|
||||||
| FalkorDB | Vector/Graph | Unstable ❌ | |
|
| FalkorDB | Vector/Graph | Stable ✅ | | Unstable ❌ | |
|
||||||
| PGVector | Vector | Stable ✅ | |
|
| PGVector | Vector | Stable ✅ | | Unstable ❌ | |
|
||||||
| Milvus | Vector | Stable ✅ | |
|
| Milvus | Vector | Stable ✅ | | Unstable ❌ | |
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,9 @@ class LanceDBAdapter(VectorDBInterface):
|
||||||
connection = await self.get_connection()
|
connection = await self.get_connection()
|
||||||
collection = await connection.open_table(collection_name)
|
collection = await connection.open_table(collection_name)
|
||||||
|
|
||||||
results = await collection.vector_search(query_vector).to_pandas()
|
collection_size = await collection.count_rows()
|
||||||
|
|
||||||
|
results = await collection.vector_search(query_vector).limit(collection_size).to_pandas()
|
||||||
|
|
||||||
result_values = list(results.to_dict("index").values())
|
result_values = list(results.to_dict("index").values())
|
||||||
|
|
||||||
|
|
@ -250,9 +252,16 @@ class LanceDBAdapter(VectorDBInterface):
|
||||||
)
|
)
|
||||||
|
|
||||||
async def prune(self):
|
async def prune(self):
|
||||||
# Clean up the database if it was set up as temporary
|
connection = await self.get_connection()
|
||||||
|
collection_names = await connection.table_names()
|
||||||
|
|
||||||
|
for collection_name in collection_names:
|
||||||
|
collection = await connection.open_table(collection_name)
|
||||||
|
await collection.delete("id IS NOT NULL")
|
||||||
|
await connection.drop_table(collection_name)
|
||||||
|
|
||||||
if self.url.startswith("/"):
|
if self.url.startswith("/"):
|
||||||
LocalStorage.remove_all(self.url) # Remove the temporary directory and files inside
|
LocalStorage.remove_all(self.url)
|
||||||
|
|
||||||
def get_data_point_schema(self, model_type):
|
def get_data_point_schema(self, model_type):
|
||||||
return copy_model(
|
return copy_model(
|
||||||
|
|
|
||||||
|
|
@ -30,4 +30,4 @@ if [ "$ENVIRONMENT" = "dev" ]; then
|
||||||
else
|
else
|
||||||
gunicorn -w 3 -k uvicorn.workers.UvicornWorker -t 30000 --bind=0.0.0.0:8000 --log-level error cognee.api.client:app
|
gunicorn -w 3 -k uvicorn.workers.UvicornWorker -t 30000 --bind=0.0.0.0:8000 --log-level error cognee.api.client:app
|
||||||
# python ./cognee/api/client.py
|
# python ./cognee/api/client.py
|
||||||
fi
|
fi
|
||||||
|
|
@ -204,4 +204,9 @@ if __name__ == "__main__":
|
||||||
"retriever": retrieve,
|
"retriever": retrieve,
|
||||||
}
|
}
|
||||||
|
|
||||||
asyncio.run(main(steps_to_enable))
|
loop = asyncio.new_event_loop()
|
||||||
|
asyncio.set_event_loop(loop)
|
||||||
|
try:
|
||||||
|
loop.run_until_complete(main(steps_to_enable))
|
||||||
|
finally:
|
||||||
|
loop.run_until_complete(loop.shutdown_asyncgens())
|
||||||
|
|
|
||||||
|
|
@ -69,4 +69,9 @@ async def main():
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
setup_logging(logging.ERROR)
|
setup_logging(logging.ERROR)
|
||||||
asyncio.run(main())
|
loop = asyncio.new_event_loop()
|
||||||
|
asyncio.set_event_loop(loop)
|
||||||
|
try:
|
||||||
|
loop.run_until_complete(main())
|
||||||
|
finally:
|
||||||
|
loop.run_until_complete(loop.shutdown_asyncgens())
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
import os
|
import os
|
||||||
import asyncio
|
import asyncio
|
||||||
import pathlib
|
import pathlib
|
||||||
|
import logging
|
||||||
|
|
||||||
import cognee
|
import cognee
|
||||||
from cognee.api.v1.search import SearchType
|
from cognee.api.v1.search import SearchType
|
||||||
|
from cognee.shared.utils import setup_logging
|
||||||
|
|
||||||
# Prerequisites:
|
# Prerequisites:
|
||||||
# 1. Copy `.env.template` and rename it to `.env`.
|
# 1. Copy `.env.template` and rename it to `.env`.
|
||||||
|
|
@ -45,4 +47,10 @@ async def main():
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
asyncio.run(main())
|
setup_logging(logging.ERROR)
|
||||||
|
loop = asyncio.new_event_loop()
|
||||||
|
asyncio.set_event_loop(loop)
|
||||||
|
try:
|
||||||
|
loop.run_until_complete(main())
|
||||||
|
finally:
|
||||||
|
loop.run_until_complete(loop.shutdown_asyncgens())
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import cognee
|
import cognee
|
||||||
|
import logging
|
||||||
from cognee.api.v1.search import SearchType
|
from cognee.api.v1.search import SearchType
|
||||||
|
from cognee.shared.utils import setup_logging
|
||||||
|
|
||||||
# Prerequisites:
|
# Prerequisites:
|
||||||
# 1. Copy `.env.template` and rename it to `.env`.
|
# 1. Copy `.env.template` and rename it to `.env`.
|
||||||
|
|
@ -66,4 +68,10 @@ async def main():
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
asyncio.run(main())
|
setup_logging(logging.ERROR)
|
||||||
|
loop = asyncio.new_event_loop()
|
||||||
|
asyncio.set_event_loop(loop)
|
||||||
|
try:
|
||||||
|
loop.run_until_complete(main())
|
||||||
|
finally:
|
||||||
|
loop.run_until_complete(loop.shutdown_asyncgens())
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue