Compare commits
38 commits
v0.5.0.dev
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a505eef95b | ||
|
|
8cd3aab1ef | ||
|
|
8a96a351e2 | ||
|
|
39613997d6 | ||
|
|
a5fc6165c1 | ||
|
|
69fe35bdee | ||
|
|
be738df88a | ||
|
|
01a39dff22 | ||
|
|
53f96f3e29 | ||
|
|
b339529621 | ||
|
|
6a5ba70ced | ||
|
|
7ee36f883b | ||
|
|
5b42b21af5 | ||
|
|
1061258fde | ||
|
|
7019a91f7c | ||
|
|
e0644285d4 | ||
|
|
f1526a6660 | ||
|
|
d8d3844805 | ||
|
|
23d55a45d4 | ||
|
|
1724997683 | ||
|
|
eda9f26b2b | ||
|
|
cc41ef853c | ||
|
|
4caac4b8f0 | ||
|
|
b5949580de | ||
|
|
986b93fee4 | ||
|
|
31e491bc88 | ||
|
|
f2bc7ca992 | ||
|
|
dd9aad90cb | ||
|
|
c7e94e296e | ||
|
|
109b889b68 | ||
|
|
fdbee66985 | ||
|
|
077e0a4937 | ||
|
|
40e1b9bfed | ||
|
|
4424ebf3c9 | ||
|
|
96107b9f2f | ||
|
|
b42ea166a8 | ||
|
|
4936551a90 | ||
|
|
405c925b70 |
26 changed files with 4255 additions and 3881 deletions
26
.github/workflows/release.yml
vendored
26
.github/workflows/release.yml
vendored
|
|
@ -10,10 +10,6 @@ on:
|
||||||
- dev
|
- dev
|
||||||
- main
|
- main
|
||||||
description: Dev or Main release
|
description: Dev or Main release
|
||||||
test_mode:
|
|
||||||
required: true
|
|
||||||
type: boolean
|
|
||||||
description: Aka Dry Run. If true, it won't affect public indices or repositories
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release-github:
|
release-github:
|
||||||
|
|
@ -35,8 +31,6 @@ jobs:
|
||||||
|
|
||||||
- name: Create and push git tag
|
- name: Create and push git tag
|
||||||
id: create_tag
|
id: create_tag
|
||||||
env:
|
|
||||||
TEST_MODE: ${{ inputs.test_mode }}
|
|
||||||
run: |
|
run: |
|
||||||
VERSION="$(uv version --short)"
|
VERSION="$(uv version --short)"
|
||||||
TAG="v${VERSION}"
|
TAG="v${VERSION}"
|
||||||
|
|
@ -49,12 +43,9 @@ jobs:
|
||||||
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
|
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
|
||||||
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
if [ "$TEST_MODE" = "false" ]; then
|
git tag "${TAG}"
|
||||||
git tag "${TAG}"
|
git push origin "${TAG}"
|
||||||
git push origin "${TAG}"
|
|
||||||
else
|
|
||||||
echo "Test mode is enabled. Skipping tag creation and push."
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Create GitHub Release
|
- name: Create GitHub Release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
|
|
@ -89,14 +80,7 @@ jobs:
|
||||||
- name: Build distributions
|
- name: Build distributions
|
||||||
run: uv build
|
run: uv build
|
||||||
|
|
||||||
- name: Publish ${{ inputs.flavour }} release to TestPyPI
|
|
||||||
if: ${{ inputs.test_mode }}
|
|
||||||
env:
|
|
||||||
UV_PUBLISH_TOKEN: ${{ secrets.TEST_PYPI_TOKEN }}
|
|
||||||
run: uv publish --publish-url https://test.pypi.org/legacy/
|
|
||||||
|
|
||||||
- name: Publish ${{ inputs.flavour }} release to PyPI
|
- name: Publish ${{ inputs.flavour }} release to PyPI
|
||||||
if: ${{ !inputs.test_mode }}
|
|
||||||
env:
|
env:
|
||||||
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
||||||
run: uv publish
|
run: uv publish
|
||||||
|
|
@ -129,7 +113,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
push: ${{ !inputs.test_mode }}
|
push: true
|
||||||
tags: cognee/cognee:${{ needs.release-github.outputs.version }}
|
tags: cognee/cognee:${{ needs.release-github.outputs.version }}
|
||||||
labels: |
|
labels: |
|
||||||
version=${{ needs.release-github.outputs.version }}
|
version=${{ needs.release-github.outputs.version }}
|
||||||
|
|
@ -143,7 +127,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
push: ${{ !inputs.test_mode }}
|
push: true
|
||||||
tags: |
|
tags: |
|
||||||
cognee/cognee:${{ needs.release-github.outputs.version }}
|
cognee/cognee:${{ needs.release-github.outputs.version }}
|
||||||
cognee/cognee:latest
|
cognee/cognee:latest
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ git clone https://github.com/<your-github-username>/cognee.git
|
||||||
cd cognee
|
cd cognee
|
||||||
```
|
```
|
||||||
In case you are working on Vector and Graph Adapters
|
In case you are working on Vector and Graph Adapters
|
||||||
1. Fork the [**cognee**](https://github.com/topoteretes/cognee-community) repository
|
1. Fork the [**cognee-community**](https://github.com/topoteretes/cognee-community) repository
|
||||||
2. Clone your fork:
|
2. Clone your fork:
|
||||||
```shell
|
```shell
|
||||||
git clone https://github.com/<your-github-username>/cognee-community.git
|
git clone https://github.com/<your-github-username>/cognee-community.git
|
||||||
|
|
@ -97,6 +97,21 @@ git checkout -b feature/your-feature-name
|
||||||
python cognee/cognee/tests/test_library.py
|
python cognee/cognee/tests/test_library.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Running Simple Example
|
||||||
|
|
||||||
|
Change .env.example into .env and provide your OPENAI_API_KEY as LLM_API_KEY
|
||||||
|
|
||||||
|
Make sure to run ```shell uv sync ``` in the root cloned folder or set up a virtual environment to run cognee
|
||||||
|
|
||||||
|
```shell
|
||||||
|
python cognee/cognee/examples/python/simple_example.py
|
||||||
|
```
|
||||||
|
or
|
||||||
|
|
||||||
|
```shell
|
||||||
|
uv run python cognee/cognee/examples/python/simple_example.py
|
||||||
|
```
|
||||||
|
|
||||||
## 4. 📤 Submitting Changes
|
## 4. 📤 Submitting Changes
|
||||||
|
|
||||||
1. Install ruff on your system
|
1. Install ruff on your system
|
||||||
|
|
|
||||||
15
README.md
15
README.md
|
|
@ -66,13 +66,10 @@ Use your data to build personalized and dynamic memory for AI Agents. Cognee let
|
||||||
## About Cognee
|
## About Cognee
|
||||||
|
|
||||||
Cognee is an open-source tool and platform that transforms your raw data into persistent and dynamic AI memory for Agents. It combines vector search with graph databases to make your documents both searchable by meaning and connected by relationships.
|
Cognee is an open-source tool and platform that transforms your raw data into persistent and dynamic AI memory for Agents. It combines vector search with graph databases to make your documents both searchable by meaning and connected by relationships.
|
||||||
|
Cognee offers default memory creation and search which we describe bellow. But with Cognee you can build your own!
|
||||||
|
|
||||||
You can use Cognee in two ways:
|
|
||||||
|
|
||||||
1. [Self-host Cognee Open Source](https://docs.cognee.ai/getting-started/installation), which stores all data locally by default.
|
### Cognee Open Source:
|
||||||
2. [Connect to Cognee Cloud](https://platform.cognee.ai/), and get the same OSS stack on managed infrastructure for easier development and productionization.
|
|
||||||
|
|
||||||
### Cognee Open Source (self-hosted):
|
|
||||||
|
|
||||||
- Interconnects any type of data — including past conversations, files, images, and audio transcriptions
|
- Interconnects any type of data — including past conversations, files, images, and audio transcriptions
|
||||||
- Replaces traditional RAG systems with a unified memory layer built on graphs and vectors
|
- Replaces traditional RAG systems with a unified memory layer built on graphs and vectors
|
||||||
|
|
@ -80,11 +77,6 @@ You can use Cognee in two ways:
|
||||||
- Provides Pythonic data pipelines for ingestion from 30+ data sources
|
- Provides Pythonic data pipelines for ingestion from 30+ data sources
|
||||||
- Offers high customizability through user-defined tasks, modular pipelines, and built-in search endpoints
|
- Offers high customizability through user-defined tasks, modular pipelines, and built-in search endpoints
|
||||||
|
|
||||||
### Cognee Cloud (managed):
|
|
||||||
- Hosted web UI dashboard
|
|
||||||
- Automatic version updates
|
|
||||||
- Resource usage analytics
|
|
||||||
- GDPR compliant, enterprise-grade security
|
|
||||||
|
|
||||||
## Basic Usage & Feature Guide
|
## Basic Usage & Feature Guide
|
||||||
|
|
||||||
|
|
@ -126,6 +118,7 @@ Now, run a minimal pipeline:
|
||||||
```python
|
```python
|
||||||
import cognee
|
import cognee
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
|
|
@ -143,7 +136,7 @@ async def main():
|
||||||
|
|
||||||
# Display the results
|
# Display the results
|
||||||
for result in results:
|
for result in results:
|
||||||
print(result)
|
pprint(result)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
||||||
161
cognee-frontend/package-lock.json
generated
161
cognee-frontend/package-lock.json
generated
|
|
@ -12,7 +12,7 @@
|
||||||
"classnames": "^2.5.1",
|
"classnames": "^2.5.1",
|
||||||
"culori": "^4.0.1",
|
"culori": "^4.0.1",
|
||||||
"d3-force-3d": "^3.0.6",
|
"d3-force-3d": "^3.0.6",
|
||||||
"next": "16.0.4",
|
"next": "16.1.1",
|
||||||
"react": "^19.2.0",
|
"react": "^19.2.0",
|
||||||
"react-dom": "^19.2.0",
|
"react-dom": "^19.2.0",
|
||||||
"react-force-graph-2d": "^1.27.1",
|
"react-force-graph-2d": "^1.27.1",
|
||||||
|
|
@ -96,7 +96,6 @@
|
||||||
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
|
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/code-frame": "^7.27.1",
|
"@babel/code-frame": "^7.27.1",
|
||||||
"@babel/generator": "^7.28.5",
|
"@babel/generator": "^7.28.5",
|
||||||
|
|
@ -1074,9 +1073,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/env": {
|
"node_modules/@next/env": {
|
||||||
"version": "16.0.4",
|
"version": "16.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@next/env/-/env-16.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@next/env/-/env-16.1.1.tgz",
|
||||||
"integrity": "sha512-FDPaVoB1kYhtOz6Le0Jn2QV7RZJ3Ngxzqri7YX4yu3Ini+l5lciR7nA9eNDpKTmDm7LWZtxSju+/CQnwRBn2pA==",
|
"integrity": "sha512-3oxyM97Sr2PqiVyMyrZUtrtM3jqqFxOQJVuKclDsgj/L728iZt/GyslkN4NwarledZATCenbk4Offjk1hQmaAA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@next/eslint-plugin-next": {
|
"node_modules/@next/eslint-plugin-next": {
|
||||||
|
|
@ -1090,9 +1089,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-darwin-arm64": {
|
"node_modules/@next/swc-darwin-arm64": {
|
||||||
"version": "16.0.4",
|
"version": "16.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.1.tgz",
|
||||||
"integrity": "sha512-TN0cfB4HT2YyEio9fLwZY33J+s+vMIgC84gQCOLZOYusW7ptgjIn8RwxQt0BUpoo9XRRVVWEHLld0uhyux1ZcA==",
|
"integrity": "sha512-JS3m42ifsVSJjSTzh27nW+Igfha3NdBOFScr9C80hHGrWx55pTrVL23RJbqir7k7/15SKlrLHhh/MQzqBBYrQA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -1106,9 +1105,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-darwin-x64": {
|
"node_modules/@next/swc-darwin-x64": {
|
||||||
"version": "16.0.4",
|
"version": "16.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.1.tgz",
|
||||||
"integrity": "sha512-XsfI23jvimCaA7e+9f3yMCoVjrny2D11G6H8NCcgv+Ina/TQhKPXB9P4q0WjTuEoyZmcNvPdrZ+XtTh3uPfH7Q==",
|
"integrity": "sha512-hbyKtrDGUkgkyQi1m1IyD3q4I/3m9ngr+V93z4oKHrPcmxwNL5iMWORvLSGAf2YujL+6HxgVvZuCYZfLfb4bGw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -1122,9 +1121,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-linux-arm64-gnu": {
|
"node_modules/@next/swc-linux-arm64-gnu": {
|
||||||
"version": "16.0.4",
|
"version": "16.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.1.tgz",
|
||||||
"integrity": "sha512-uo8X7qHDy4YdJUhaoJDMAbL8VT5Ed3lijip2DdBHIB4tfKAvB1XBih6INH2L4qIi4jA0Qq1J0ErxcOocBmUSwg==",
|
"integrity": "sha512-/fvHet+EYckFvRLQ0jPHJCUI5/B56+2DpI1xDSvi80r/3Ez+Eaa2Yq4tJcRTaB1kqj/HrYKn8Yplm9bNoMJpwQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -1138,9 +1137,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-linux-arm64-musl": {
|
"node_modules/@next/swc-linux-arm64-musl": {
|
||||||
"version": "16.0.4",
|
"version": "16.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.1.tgz",
|
||||||
"integrity": "sha512-pvR/AjNIAxsIz0PCNcZYpH+WmNIKNLcL4XYEfo+ArDi7GsxKWFO5BvVBLXbhti8Coyv3DE983NsitzUsGH5yTw==",
|
"integrity": "sha512-MFHrgL4TXNQbBPzkKKur4Fb5ICEJa87HM7fczFs2+HWblM7mMLdco3dvyTI+QmLBU9xgns/EeeINSZD6Ar+oLg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -1154,9 +1153,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-linux-x64-gnu": {
|
"node_modules/@next/swc-linux-x64-gnu": {
|
||||||
"version": "16.0.4",
|
"version": "16.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.1.tgz",
|
||||||
"integrity": "sha512-2hebpsd5MRRtgqmT7Jj/Wze+wG+ZEXUK2KFFL4IlZ0amEEFADo4ywsifJNeFTQGsamH3/aXkKWymDvgEi+pc2Q==",
|
"integrity": "sha512-20bYDfgOQAPUkkKBnyP9PTuHiJGM7HzNBbuqmD0jiFVZ0aOldz+VnJhbxzjcSabYsnNjMPsE0cyzEudpYxsrUQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -1170,9 +1169,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-linux-x64-musl": {
|
"node_modules/@next/swc-linux-x64-musl": {
|
||||||
"version": "16.0.4",
|
"version": "16.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.1.tgz",
|
||||||
"integrity": "sha512-pzRXf0LZZ8zMljH78j8SeLncg9ifIOp3ugAFka+Bq8qMzw6hPXOc7wydY7ardIELlczzzreahyTpwsim/WL3Sg==",
|
"integrity": "sha512-9pRbK3M4asAHQRkwaXwu601oPZHghuSC8IXNENgbBSyImHv/zY4K5udBusgdHkvJ/Tcr96jJwQYOll0qU8+fPA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -1186,9 +1185,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-win32-arm64-msvc": {
|
"node_modules/@next/swc-win32-arm64-msvc": {
|
||||||
"version": "16.0.4",
|
"version": "16.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.1.tgz",
|
||||||
"integrity": "sha512-7G/yJVzum52B5HOqqbQYX9bJHkN+c4YyZ2AIvEssMHQlbAWOn3iIJjD4sM6ihWsBxuljiTKJovEYlD1K8lCUHw==",
|
"integrity": "sha512-bdfQkggaLgnmYrFkSQfsHfOhk/mCYmjnrbRCGgkMcoOBZ4n+TRRSLmT/CU5SATzlBJ9TpioUyBW/vWFXTqQRiA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
|
@ -1202,9 +1201,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@next/swc-win32-x64-msvc": {
|
"node_modules/@next/swc-win32-x64-msvc": {
|
||||||
"version": "16.0.4",
|
"version": "16.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.1.tgz",
|
||||||
"integrity": "sha512-0Vy4g8SSeVkuU89g2OFHqGKM4rxsQtihGfenjx2tRckPrge5+gtFnRWGAAwvGXr0ty3twQvcnYjEyOrLHJ4JWA==",
|
"integrity": "sha512-Ncwbw2WJ57Al5OX0k4chM68DKhEPlrXBaSXDCi2kPi5f4d8b3ejr3RRJGfKBLrn2YJL5ezNS7w2TZLHSti8CMw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
|
@ -1513,6 +1512,66 @@
|
||||||
"node": ">=14.0.0"
|
"node": ">=14.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"dev": true,
|
||||||
|
"inBundle": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@emnapi/wasi-threads": "1.1.0",
|
||||||
|
"tslib": "^2.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"dev": true,
|
||||||
|
"inBundle": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "^2.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"dev": true,
|
||||||
|
"inBundle": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "^2.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": {
|
||||||
|
"version": "1.0.7",
|
||||||
|
"dev": true,
|
||||||
|
"inBundle": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@emnapi/core": "^1.5.0",
|
||||||
|
"@emnapi/runtime": "^1.5.0",
|
||||||
|
"@tybys/wasm-util": "^0.10.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": {
|
||||||
|
"version": "0.10.1",
|
||||||
|
"dev": true,
|
||||||
|
"inBundle": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "^2.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": {
|
||||||
|
"version": "2.8.1",
|
||||||
|
"dev": true,
|
||||||
|
"inBundle": true,
|
||||||
|
"license": "0BSD",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
|
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
|
||||||
"version": "4.1.17",
|
"version": "4.1.17",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.17.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.17.tgz",
|
||||||
|
|
@ -1622,7 +1681,6 @@
|
||||||
"integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
|
"integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"csstype": "^3.2.2"
|
"csstype": "^3.2.2"
|
||||||
}
|
}
|
||||||
|
|
@ -1690,7 +1748,6 @@
|
||||||
"integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==",
|
"integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/scope-manager": "8.48.0",
|
"@typescript-eslint/scope-manager": "8.48.0",
|
||||||
"@typescript-eslint/types": "8.48.0",
|
"@typescript-eslint/types": "8.48.0",
|
||||||
|
|
@ -2199,7 +2256,6 @@
|
||||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"bin": {
|
"bin": {
|
||||||
"acorn": "bin/acorn"
|
"acorn": "bin/acorn"
|
||||||
},
|
},
|
||||||
|
|
@ -2491,7 +2547,6 @@
|
||||||
"version": "2.8.31",
|
"version": "2.8.31",
|
||||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz",
|
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz",
|
||||||
"integrity": "sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==",
|
"integrity": "sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==",
|
||||||
"dev": true,
|
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"baseline-browser-mapping": "dist/cli.js"
|
"baseline-browser-mapping": "dist/cli.js"
|
||||||
|
|
@ -2551,7 +2606,6 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"baseline-browser-mapping": "^2.8.25",
|
"baseline-browser-mapping": "^2.8.25",
|
||||||
"caniuse-lite": "^1.0.30001754",
|
"caniuse-lite": "^1.0.30001754",
|
||||||
|
|
@ -2896,7 +2950,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
|
||||||
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
|
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
|
|
@ -3372,7 +3425,6 @@
|
||||||
"integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
|
"integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.8.0",
|
"@eslint-community/eslint-utils": "^4.8.0",
|
||||||
"@eslint-community/regexpp": "^4.12.1",
|
"@eslint-community/regexpp": "^4.12.1",
|
||||||
|
|
@ -5411,14 +5463,14 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/next": {
|
"node_modules/next": {
|
||||||
"version": "16.0.4",
|
"version": "16.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/next/-/next-16.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/next/-/next-16.1.1.tgz",
|
||||||
"integrity": "sha512-vICcxKusY8qW7QFOzTvnRL1ejz2ClTqDKtm1AcUjm2mPv/lVAdgpGNsftsPRIDJOXOjRQO68i1dM8Lp8GZnqoA==",
|
"integrity": "sha512-QI+T7xrxt1pF6SQ/JYFz95ro/mg/1Znk5vBebsWwbpejj1T0A23hO7GYEaVac9QUOT2BIMiuzm0L99ooq7k0/w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@next/env": "16.0.4",
|
"@next/env": "16.1.1",
|
||||||
"@swc/helpers": "0.5.15",
|
"@swc/helpers": "0.5.15",
|
||||||
|
"baseline-browser-mapping": "^2.8.3",
|
||||||
"caniuse-lite": "^1.0.30001579",
|
"caniuse-lite": "^1.0.30001579",
|
||||||
"postcss": "8.4.31",
|
"postcss": "8.4.31",
|
||||||
"styled-jsx": "5.1.6"
|
"styled-jsx": "5.1.6"
|
||||||
|
|
@ -5430,14 +5482,14 @@
|
||||||
"node": ">=20.9.0"
|
"node": ">=20.9.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@next/swc-darwin-arm64": "16.0.4",
|
"@next/swc-darwin-arm64": "16.1.1",
|
||||||
"@next/swc-darwin-x64": "16.0.4",
|
"@next/swc-darwin-x64": "16.1.1",
|
||||||
"@next/swc-linux-arm64-gnu": "16.0.4",
|
"@next/swc-linux-arm64-gnu": "16.1.1",
|
||||||
"@next/swc-linux-arm64-musl": "16.0.4",
|
"@next/swc-linux-arm64-musl": "16.1.1",
|
||||||
"@next/swc-linux-x64-gnu": "16.0.4",
|
"@next/swc-linux-x64-gnu": "16.1.1",
|
||||||
"@next/swc-linux-x64-musl": "16.0.4",
|
"@next/swc-linux-x64-musl": "16.1.1",
|
||||||
"@next/swc-win32-arm64-msvc": "16.0.4",
|
"@next/swc-win32-arm64-msvc": "16.1.1",
|
||||||
"@next/swc-win32-x64-msvc": "16.0.4",
|
"@next/swc-win32-x64-msvc": "16.1.1",
|
||||||
"sharp": "^0.34.4"
|
"sharp": "^0.34.4"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
|
@ -5809,9 +5861,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/preact": {
|
"node_modules/preact": {
|
||||||
"version": "10.27.2",
|
"version": "10.28.2",
|
||||||
"resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz",
|
"resolved": "https://registry.npmjs.org/preact/-/preact-10.28.2.tgz",
|
||||||
"integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==",
|
"integrity": "sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"funding": {
|
"funding": {
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
|
|
@ -5875,7 +5927,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
|
||||||
"integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
|
"integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
|
|
@ -5885,7 +5936,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
|
||||||
"integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
|
"integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"scheduler": "^0.27.0"
|
"scheduler": "^0.27.0"
|
||||||
},
|
},
|
||||||
|
|
@ -6624,7 +6674,6 @@
|
||||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
|
|
@ -6787,7 +6836,6 @@
|
||||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"peer": true,
|
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
"tsserver": "bin/tsserver"
|
"tsserver": "bin/tsserver"
|
||||||
|
|
@ -7085,7 +7133,6 @@
|
||||||
"integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==",
|
"integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/colinhacks"
|
"url": "https://github.com/sponsors/colinhacks"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
"classnames": "^2.5.1",
|
"classnames": "^2.5.1",
|
||||||
"culori": "^4.0.1",
|
"culori": "^4.0.1",
|
||||||
"d3-force-3d": "^3.0.6",
|
"d3-force-3d": "^3.0.6",
|
||||||
"next": "16.0.4",
|
"next": "16.1.1",
|
||||||
"react": "^19.2.0",
|
"react": "^19.2.0",
|
||||||
"react-dom": "^19.2.0",
|
"react-dom": "^19.2.0",
|
||||||
"react-force-graph-2d": "^1.27.1",
|
"react-force-graph-2d": "^1.27.1",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[project]
|
[project]
|
||||||
name = "cognee-mcp"
|
name = "cognee-mcp"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
description = "Cognee MCP server"
|
description = "Cognee MCP server"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.10"
|
requires-python = ">=3.10"
|
||||||
|
|
@ -9,7 +9,7 @@ dependencies = [
|
||||||
# For local cognee repo usage remove comment bellow and add absolute path to cognee. Then run `uv sync --reinstall` in the mcp folder on local cognee changes.
|
# For local cognee repo usage remove comment bellow and add absolute path to cognee. Then run `uv sync --reinstall` in the mcp folder on local cognee changes.
|
||||||
#"cognee[postgres,codegraph,gemini,huggingface,docs,neo4j] @ file:/Users/igorilic/Desktop/cognee",
|
#"cognee[postgres,codegraph,gemini,huggingface,docs,neo4j] @ file:/Users/igorilic/Desktop/cognee",
|
||||||
# TODO: Remove gemini from optional dependecnies for new Cognee version after 0.3.4
|
# TODO: Remove gemini from optional dependecnies for new Cognee version after 0.3.4
|
||||||
"cognee[postgres,docs,neo4j]==0.3.7",
|
"cognee[postgres,docs,neo4j]==0.5.0",
|
||||||
"fastmcp>=2.10.0,<3.0.0",
|
"fastmcp>=2.10.0,<3.0.0",
|
||||||
"mcp>=1.12.0,<2.0.0",
|
"mcp>=1.12.0,<2.0.0",
|
||||||
"uv>=0.6.3,<1.0.0",
|
"uv>=0.6.3,<1.0.0",
|
||||||
|
|
|
||||||
|
|
@ -151,7 +151,7 @@ class CogneeClient:
|
||||||
query_type: str,
|
query_type: str,
|
||||||
datasets: Optional[List[str]] = None,
|
datasets: Optional[List[str]] = None,
|
||||||
system_prompt: Optional[str] = None,
|
system_prompt: Optional[str] = None,
|
||||||
top_k: int = 10,
|
top_k: int = 5,
|
||||||
) -> Any:
|
) -> Any:
|
||||||
"""
|
"""
|
||||||
Search the knowledge graph.
|
Search the knowledge graph.
|
||||||
|
|
@ -192,7 +192,7 @@ class CogneeClient:
|
||||||
|
|
||||||
with redirect_stdout(sys.stderr):
|
with redirect_stdout(sys.stderr):
|
||||||
results = await self.cognee.search(
|
results = await self.cognee.search(
|
||||||
query_type=SearchType[query_type.upper()], query_text=query_text
|
query_type=SearchType[query_type.upper()], query_text=query_text, top_k=top_k
|
||||||
)
|
)
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -316,7 +316,7 @@ async def save_interaction(data: str) -> list:
|
||||||
|
|
||||||
|
|
||||||
@mcp.tool()
|
@mcp.tool()
|
||||||
async def search(search_query: str, search_type: str) -> list:
|
async def search(search_query: str, search_type: str, top_k: int = 10) -> list:
|
||||||
"""
|
"""
|
||||||
Search and query the knowledge graph for insights, information, and connections.
|
Search and query the knowledge graph for insights, information, and connections.
|
||||||
|
|
||||||
|
|
@ -389,6 +389,13 @@ async def search(search_query: str, search_type: str) -> list:
|
||||||
|
|
||||||
The search_type is case-insensitive and will be converted to uppercase.
|
The search_type is case-insensitive and will be converted to uppercase.
|
||||||
|
|
||||||
|
top_k : int, optional
|
||||||
|
Maximum number of results to return (default: 10).
|
||||||
|
Controls the amount of context retrieved from the knowledge graph.
|
||||||
|
- Lower values (3-5): Faster, more focused results
|
||||||
|
- Higher values (10-20): More comprehensive, but slower and more context-heavy
|
||||||
|
Helps manage response size and context window usage in MCP clients.
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
list
|
list
|
||||||
|
|
@ -425,13 +432,32 @@ async def search(search_query: str, search_type: str) -> list:
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
async def search_task(search_query: str, search_type: str) -> str:
|
async def search_task(search_query: str, search_type: str, top_k: int) -> str:
|
||||||
"""Search the knowledge graph"""
|
"""
|
||||||
|
Internal task to execute knowledge graph search with result formatting.
|
||||||
|
|
||||||
|
Handles the actual search execution and formats results appropriately
|
||||||
|
for MCP clients based on the search type and execution mode (API vs direct).
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
search_query : str
|
||||||
|
The search query in natural language
|
||||||
|
search_type : str
|
||||||
|
Type of search to perform (GRAPH_COMPLETION, CHUNKS, etc.)
|
||||||
|
top_k : int
|
||||||
|
Maximum number of results to return
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
str
|
||||||
|
Formatted search results as a string, with format depending on search_type
|
||||||
|
"""
|
||||||
# NOTE: MCP uses stdout to communicate, we must redirect all output
|
# NOTE: MCP uses stdout to communicate, we must redirect all output
|
||||||
# going to stdout ( like the print function ) to stderr.
|
# going to stdout ( like the print function ) to stderr.
|
||||||
with redirect_stdout(sys.stderr):
|
with redirect_stdout(sys.stderr):
|
||||||
search_results = await cognee_client.search(
|
search_results = await cognee_client.search(
|
||||||
query_text=search_query, query_type=search_type
|
query_text=search_query, query_type=search_type, top_k=top_k
|
||||||
)
|
)
|
||||||
|
|
||||||
# Handle different result formats based on API vs direct mode
|
# Handle different result formats based on API vs direct mode
|
||||||
|
|
@ -465,7 +491,7 @@ async def search(search_query: str, search_type: str) -> list:
|
||||||
else:
|
else:
|
||||||
return str(search_results)
|
return str(search_results)
|
||||||
|
|
||||||
search_results = await search_task(search_query, search_type)
|
search_results = await search_task(search_query, search_type, top_k)
|
||||||
return [types.TextContent(type="text", text=search_results)]
|
return [types.TextContent(type="text", text=search_results)]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
7633
cognee-mcp/uv.lock
generated
7633
cognee-mcp/uv.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -33,6 +33,7 @@ async def search(
|
||||||
session_id: Optional[str] = None,
|
session_id: Optional[str] = None,
|
||||||
wide_search_top_k: Optional[int] = 100,
|
wide_search_top_k: Optional[int] = 100,
|
||||||
triplet_distance_penalty: Optional[float] = 3.5,
|
triplet_distance_penalty: Optional[float] = 3.5,
|
||||||
|
verbose: bool = False,
|
||||||
) -> Union[List[SearchResult], CombinedSearchResult]:
|
) -> Union[List[SearchResult], CombinedSearchResult]:
|
||||||
"""
|
"""
|
||||||
Search and query the knowledge graph for insights, information, and connections.
|
Search and query the knowledge graph for insights, information, and connections.
|
||||||
|
|
@ -123,6 +124,8 @@ async def search(
|
||||||
|
|
||||||
session_id: Optional session identifier for caching Q&A interactions. Defaults to 'default_session' if None.
|
session_id: Optional session identifier for caching Q&A interactions. Defaults to 'default_session' if None.
|
||||||
|
|
||||||
|
verbose: If True, returns detailed result information including graph representation (when possible).
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
list: Search results in format determined by query_type:
|
list: Search results in format determined by query_type:
|
||||||
|
|
||||||
|
|
@ -204,6 +207,7 @@ async def search(
|
||||||
session_id=session_id,
|
session_id=session_id,
|
||||||
wide_search_top_k=wide_search_top_k,
|
wide_search_top_k=wide_search_top_k,
|
||||||
triplet_distance_penalty=triplet_distance_penalty,
|
triplet_distance_penalty=triplet_distance_penalty,
|
||||||
|
verbose=verbose,
|
||||||
)
|
)
|
||||||
|
|
||||||
return filtered_search_results
|
return filtered_search_results
|
||||||
|
|
|
||||||
|
|
@ -15,3 +15,9 @@ async def setup():
|
||||||
"""
|
"""
|
||||||
await create_relational_db_and_tables()
|
await create_relational_db_and_tables()
|
||||||
await create_pgvector_db_and_tables()
|
await create_pgvector_db_and_tables()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
asyncio.run(setup())
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ async def search(
|
||||||
session_id: Optional[str] = None,
|
session_id: Optional[str] = None,
|
||||||
wide_search_top_k: Optional[int] = 100,
|
wide_search_top_k: Optional[int] = 100,
|
||||||
triplet_distance_penalty: Optional[float] = 3.5,
|
triplet_distance_penalty: Optional[float] = 3.5,
|
||||||
|
verbose: bool = False,
|
||||||
) -> Union[CombinedSearchResult, List[SearchResult]]:
|
) -> Union[CombinedSearchResult, List[SearchResult]]:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
@ -140,6 +141,7 @@ async def search(
|
||||||
)
|
)
|
||||||
|
|
||||||
if use_combined_context:
|
if use_combined_context:
|
||||||
|
# Note: combined context search must always be verbose and return a CombinedSearchResult with graphs info
|
||||||
prepared_search_results = await prepare_search_result(
|
prepared_search_results = await prepare_search_result(
|
||||||
search_results[0] if isinstance(search_results, list) else search_results
|
search_results[0] if isinstance(search_results, list) else search_results
|
||||||
)
|
)
|
||||||
|
|
@ -173,25 +175,30 @@ async def search(
|
||||||
datasets = prepared_search_results["datasets"]
|
datasets = prepared_search_results["datasets"]
|
||||||
|
|
||||||
if only_context:
|
if only_context:
|
||||||
return_value.append(
|
search_result_dict = {
|
||||||
{
|
"search_result": [context] if context else None,
|
||||||
"search_result": [context] if context else None,
|
"dataset_id": datasets[0].id,
|
||||||
"dataset_id": datasets[0].id,
|
"dataset_name": datasets[0].name,
|
||||||
"dataset_name": datasets[0].name,
|
"dataset_tenant_id": datasets[0].tenant_id,
|
||||||
"dataset_tenant_id": datasets[0].tenant_id,
|
}
|
||||||
"graphs": graphs,
|
if verbose:
|
||||||
}
|
# Include graphs only in verbose mode
|
||||||
)
|
search_result_dict["graphs"] = graphs
|
||||||
|
|
||||||
|
return_value.append(search_result_dict)
|
||||||
else:
|
else:
|
||||||
return_value.append(
|
search_result_dict = {
|
||||||
{
|
"search_result": [result] if result else None,
|
||||||
"search_result": [result] if result else None,
|
"dataset_id": datasets[0].id,
|
||||||
"dataset_id": datasets[0].id,
|
"dataset_name": datasets[0].name,
|
||||||
"dataset_name": datasets[0].name,
|
"dataset_tenant_id": datasets[0].tenant_id,
|
||||||
"dataset_tenant_id": datasets[0].tenant_id,
|
}
|
||||||
"graphs": graphs,
|
if verbose:
|
||||||
}
|
# Include graphs only in verbose mode
|
||||||
)
|
search_result_dict["graphs"] = graphs
|
||||||
|
|
||||||
|
return_value.append(search_result_dict)
|
||||||
|
|
||||||
return return_value
|
return return_value
|
||||||
else:
|
else:
|
||||||
return_value = []
|
return_value = []
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ async def cognee_network_visualization(graph_data, destination_file_path: str =
|
||||||
}
|
}
|
||||||
links_list.append(link_data)
|
links_list.append(link_data)
|
||||||
|
|
||||||
html_template = """
|
html_template = r"""
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
|
|
||||||
100
cognee/tests/unit/modules/search/test_search.py
Normal file
100
cognee/tests/unit/modules/search/test_search.py
Normal file
|
|
@ -0,0 +1,100 @@
|
||||||
|
import types
|
||||||
|
from uuid import uuid4
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from cognee.modules.search.types import SearchType
|
||||||
|
|
||||||
|
|
||||||
|
def _make_user(user_id: str = "u1", tenant_id=None):
|
||||||
|
return types.SimpleNamespace(id=user_id, tenant_id=tenant_id)
|
||||||
|
|
||||||
|
|
||||||
|
def _make_dataset(*, name="ds", tenant_id="t1", dataset_id=None, owner_id=None):
|
||||||
|
return types.SimpleNamespace(
|
||||||
|
id=dataset_id or uuid4(),
|
||||||
|
name=name,
|
||||||
|
tenant_id=tenant_id,
|
||||||
|
owner_id=owner_id or uuid4(),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def search_mod():
|
||||||
|
import importlib
|
||||||
|
|
||||||
|
return importlib.import_module("cognee.modules.search.methods.search")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def _patch_side_effect_boundaries(monkeypatch, search_mod):
|
||||||
|
"""
|
||||||
|
Keep production logic; patch only unavoidable side-effect boundaries.
|
||||||
|
"""
|
||||||
|
|
||||||
|
async def dummy_log_query(_query_text, _query_type, _user_id):
|
||||||
|
return types.SimpleNamespace(id="qid-1")
|
||||||
|
|
||||||
|
async def dummy_log_result(*_args, **_kwargs):
|
||||||
|
return None
|
||||||
|
|
||||||
|
async def dummy_prepare_search_result(search_result):
|
||||||
|
if isinstance(search_result, tuple) and len(search_result) == 3:
|
||||||
|
result, context, datasets = search_result
|
||||||
|
return {"result": result, "context": context, "graphs": {}, "datasets": datasets}
|
||||||
|
return {"result": None, "context": None, "graphs": {}, "datasets": []}
|
||||||
|
|
||||||
|
monkeypatch.setattr(search_mod, "send_telemetry", lambda *a, **k: None)
|
||||||
|
monkeypatch.setattr(search_mod, "log_query", dummy_log_query)
|
||||||
|
monkeypatch.setattr(search_mod, "log_result", dummy_log_result)
|
||||||
|
monkeypatch.setattr(search_mod, "prepare_search_result", dummy_prepare_search_result)
|
||||||
|
|
||||||
|
yield
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_search_access_control_returns_dataset_shaped_dicts(monkeypatch, search_mod):
|
||||||
|
user = _make_user()
|
||||||
|
ds = _make_dataset(name="ds1", tenant_id="t1")
|
||||||
|
|
||||||
|
async def dummy_authorized_search(**kwargs):
|
||||||
|
assert kwargs["dataset_ids"] == [ds.id]
|
||||||
|
return [("r", ["ctx"], [ds])]
|
||||||
|
|
||||||
|
monkeypatch.setattr(search_mod, "backend_access_control_enabled", lambda: True)
|
||||||
|
monkeypatch.setattr(search_mod, "authorized_search", dummy_authorized_search)
|
||||||
|
|
||||||
|
out_non_verbose = await search_mod.search(
|
||||||
|
query_text="q",
|
||||||
|
query_type=SearchType.CHUNKS,
|
||||||
|
dataset_ids=[ds.id],
|
||||||
|
user=user,
|
||||||
|
verbose=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert out_non_verbose == [
|
||||||
|
{
|
||||||
|
"search_result": ["r"],
|
||||||
|
"dataset_id": ds.id,
|
||||||
|
"dataset_name": "ds1",
|
||||||
|
"dataset_tenant_id": "t1",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
out_verbose = await search_mod.search(
|
||||||
|
query_text="q",
|
||||||
|
query_type=SearchType.CHUNKS,
|
||||||
|
dataset_ids=[ds.id],
|
||||||
|
user=user,
|
||||||
|
verbose=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert out_verbose == [
|
||||||
|
{
|
||||||
|
"search_result": ["r"],
|
||||||
|
"dataset_id": ds.id,
|
||||||
|
"dataset_name": "ds1",
|
||||||
|
"dataset_tenant_id": "t1",
|
||||||
|
"graphs": {},
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -20,19 +20,29 @@ echo "HTTP port: $HTTP_PORT"
|
||||||
# smooth redeployments and container restarts while maintaining data integrity.
|
# smooth redeployments and container restarts while maintaining data integrity.
|
||||||
echo "Running database migrations..."
|
echo "Running database migrations..."
|
||||||
|
|
||||||
|
set +e # Disable exit on error to handle specific migration errors
|
||||||
MIGRATION_OUTPUT=$(alembic upgrade head)
|
MIGRATION_OUTPUT=$(alembic upgrade head)
|
||||||
MIGRATION_EXIT_CODE=$?
|
MIGRATION_EXIT_CODE=$?
|
||||||
|
set -e
|
||||||
|
|
||||||
if [[ $MIGRATION_EXIT_CODE -ne 0 ]]; then
|
if [[ $MIGRATION_EXIT_CODE -ne 0 ]]; then
|
||||||
if [[ "$MIGRATION_OUTPUT" == *"UserAlreadyExists"* ]] || [[ "$MIGRATION_OUTPUT" == *"User default_user@example.com already exists"* ]]; then
|
if [[ "$MIGRATION_OUTPUT" == *"UserAlreadyExists"* ]] || [[ "$MIGRATION_OUTPUT" == *"User default_user@example.com already exists"* ]]; then
|
||||||
echo "Warning: Default user already exists, continuing startup..."
|
echo "Warning: Default user already exists, continuing startup..."
|
||||||
else
|
else
|
||||||
echo "Migration failed with unexpected error."
|
echo "Migration failed with unexpected error. Trying to run Cognee without migrations."
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Database migrations done."
|
echo "Initializing database tables..."
|
||||||
|
python /app/cognee/modules/engine/operations/setup.py
|
||||||
|
INIT_EXIT_CODE=$?
|
||||||
|
|
||||||
|
if [[ $INIT_EXIT_CODE -ne 0 ]]; then
|
||||||
|
echo "Database initialization failed!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Database migrations done."
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Starting server..."
|
echo "Starting server..."
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import cognee
|
import cognee
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
# By default cognee uses OpenAI's gpt-5-mini LLM model
|
# By default cognee uses OpenAI's gpt-5-mini LLM model
|
||||||
# Provide your OpenAI LLM API KEY
|
# Provide your OpenAI LLM API KEY
|
||||||
os.environ["LLM_API_KEY"] = ""
|
os.environ["LLM_API_KEY"] = ""
|
||||||
|
|
@ -24,13 +25,13 @@ async def cognee_demo():
|
||||||
|
|
||||||
# Query Cognee for information from provided document
|
# Query Cognee for information from provided document
|
||||||
answer = await cognee.search("List me all the important characters in Alice in Wonderland.")
|
answer = await cognee.search("List me all the important characters in Alice in Wonderland.")
|
||||||
print(answer)
|
pprint(answer)
|
||||||
|
|
||||||
answer = await cognee.search("How did Alice end up in Wonderland?")
|
answer = await cognee.search("How did Alice end up in Wonderland?")
|
||||||
print(answer)
|
pprint(answer)
|
||||||
|
|
||||||
answer = await cognee.search("Tell me about Alice's personality.")
|
answer = await cognee.search("Tell me about Alice's personality.")
|
||||||
print(answer)
|
pprint(answer)
|
||||||
|
|
||||||
|
|
||||||
# Cognee is an async library, it has to be called in an async context
|
# Cognee is an async library, it has to be called in an async context
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
import cognee
|
import cognee
|
||||||
from cognee.api.v1.search import SearchType
|
from cognee.api.v1.search import SearchType
|
||||||
|
|
@ -187,7 +188,7 @@ async def main(enable_steps):
|
||||||
search_results = await cognee.search(
|
search_results = await cognee.search(
|
||||||
query_type=SearchType.GRAPH_COMPLETION, query_text="Who has experience in design tools?"
|
query_type=SearchType.GRAPH_COMPLETION, query_text="Who has experience in design tools?"
|
||||||
)
|
)
|
||||||
print(search_results)
|
pprint(search_results)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
import os
|
import os
|
||||||
import asyncio
|
import asyncio
|
||||||
import pathlib
|
import pathlib
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
from cognee.shared.logging_utils import setup_logging, ERROR
|
from cognee.shared.logging_utils import setup_logging, ERROR
|
||||||
|
|
||||||
import cognee
|
import cognee
|
||||||
|
|
@ -42,7 +44,7 @@ async def main():
|
||||||
|
|
||||||
# Display search results
|
# Display search results
|
||||||
for result_text in search_results:
|
for result_text in search_results:
|
||||||
print(result_text)
|
pprint(result_text)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import os
|
import os
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
import cognee
|
import cognee
|
||||||
from cognee.api.v1.search import SearchType
|
from cognee.api.v1.search import SearchType
|
||||||
|
|
@ -77,7 +78,7 @@ async def main():
|
||||||
query_type=SearchType.GRAPH_COMPLETION,
|
query_type=SearchType.GRAPH_COMPLETION,
|
||||||
query_text="What are the exact cars and their types produced by Audi?",
|
query_text="What are the exact cars and their types produced by Audi?",
|
||||||
)
|
)
|
||||||
print(search_results)
|
pprint(search_results)
|
||||||
|
|
||||||
await visualize_graph()
|
await visualize_graph()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import os
|
import os
|
||||||
import cognee
|
import cognee
|
||||||
import pathlib
|
import pathlib
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
from cognee.modules.users.exceptions import PermissionDeniedError
|
from cognee.modules.users.exceptions import PermissionDeniedError
|
||||||
from cognee.modules.users.tenants.methods import select_tenant
|
from cognee.modules.users.tenants.methods import select_tenant
|
||||||
|
|
@ -86,7 +87,7 @@ async def main():
|
||||||
)
|
)
|
||||||
print("\nSearch results as user_1 on dataset owned by user_1:")
|
print("\nSearch results as user_1 on dataset owned by user_1:")
|
||||||
for result in search_results:
|
for result in search_results:
|
||||||
print(f"{result}\n")
|
pprint(result)
|
||||||
|
|
||||||
# But user_1 cant read the dataset owned by user_2 (QUANTUM dataset)
|
# But user_1 cant read the dataset owned by user_2 (QUANTUM dataset)
|
||||||
print("\nSearch result as user_1 on the dataset owned by user_2:")
|
print("\nSearch result as user_1 on the dataset owned by user_2:")
|
||||||
|
|
@ -134,7 +135,7 @@ async def main():
|
||||||
dataset_ids=[quantum_dataset_id],
|
dataset_ids=[quantum_dataset_id],
|
||||||
)
|
)
|
||||||
for result in search_results:
|
for result in search_results:
|
||||||
print(f"{result}\n")
|
pprint(result)
|
||||||
|
|
||||||
# If we'd like for user_1 to add new documents to the QUANTUM dataset owned by user_2, user_1 would have to get
|
# If we'd like for user_1 to add new documents to the QUANTUM dataset owned by user_2, user_1 would have to get
|
||||||
# "write" access permission, which user_1 currently does not have
|
# "write" access permission, which user_1 currently does not have
|
||||||
|
|
@ -217,7 +218,7 @@ async def main():
|
||||||
dataset_ids=[quantum_cognee_lab_dataset_id],
|
dataset_ids=[quantum_cognee_lab_dataset_id],
|
||||||
)
|
)
|
||||||
for result in search_results:
|
for result in search_results:
|
||||||
print(f"{result}\n")
|
pprint(result)
|
||||||
|
|
||||||
# Note: All of these function calls and permission system is available through our backend endpoints as well
|
# Note: All of these function calls and permission system is available through our backend endpoints as well
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
import cognee
|
import cognee
|
||||||
from cognee.modules.engine.operations.setup import setup
|
from cognee.modules.engine.operations.setup import setup
|
||||||
from cognee.modules.users.methods import get_default_user
|
from cognee.modules.users.methods import get_default_user
|
||||||
|
|
@ -71,7 +73,7 @@ async def main():
|
||||||
print("Search results:")
|
print("Search results:")
|
||||||
# Display results
|
# Display results
|
||||||
for result_text in search_results:
|
for result_text in search_results:
|
||||||
print(result_text)
|
pprint(result_text)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
import cognee
|
import cognee
|
||||||
from cognee.shared.logging_utils import setup_logging, ERROR
|
from cognee.shared.logging_utils import setup_logging, ERROR
|
||||||
from cognee.api.v1.search import SearchType
|
from cognee.api.v1.search import SearchType
|
||||||
|
|
@ -54,7 +56,7 @@ async def main():
|
||||||
print("Search results:")
|
print("Search results:")
|
||||||
# Display results
|
# Display results
|
||||||
for result_text in search_results:
|
for result_text in search_results:
|
||||||
print(result_text)
|
pprint(result_text)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from pprint import pprint
|
||||||
import cognee
|
import cognee
|
||||||
from cognee.shared.logging_utils import setup_logging, INFO
|
from cognee.shared.logging_utils import setup_logging, INFO
|
||||||
from cognee.api.v1.search import SearchType
|
from cognee.api.v1.search import SearchType
|
||||||
|
|
@ -87,7 +88,8 @@ async def main():
|
||||||
top_k=15,
|
top_k=15,
|
||||||
)
|
)
|
||||||
print(f"Query: {query_text}")
|
print(f"Query: {query_text}")
|
||||||
print(f"Results: {search_results}\n")
|
print("Results:")
|
||||||
|
pprint(search_results)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
import cognee
|
import cognee
|
||||||
from cognee.memify_pipelines.create_triplet_embeddings import create_triplet_embeddings
|
from cognee.memify_pipelines.create_triplet_embeddings import create_triplet_embeddings
|
||||||
|
|
@ -65,7 +66,7 @@ async def main():
|
||||||
query_type=SearchType.TRIPLET_COMPLETION,
|
query_type=SearchType.TRIPLET_COMPLETION,
|
||||||
query_text="What are the models produced by Volkswagen based on the context?",
|
query_text="What are the models produced by Volkswagen based on the context?",
|
||||||
)
|
)
|
||||||
print(search_results)
|
pprint(search_results)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
[project]
|
[project]
|
||||||
name = "cognee"
|
name = "cognee"
|
||||||
|
|
||||||
version = "0.5.0.dev1"
|
version = "0.5.1"
|
||||||
description = "Cognee - is a library for enriching LLM context with a semantic layer for better understanding and reasoning."
|
description = "Cognee - is a library for enriching LLM context with a semantic layer for better understanding and reasoning."
|
||||||
authors = [
|
authors = [
|
||||||
{ name = "Vasilije Markovic" },
|
{ name = "Vasilije Markovic" },
|
||||||
|
|
|
||||||
2
uv.lock
generated
2
uv.lock
generated
|
|
@ -946,7 +946,7 @@ wheels = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cognee"
|
name = "cognee"
|
||||||
version = "0.5.0.dev1"
|
version = "0.5.1"
|
||||||
source = { editable = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "aiofiles" },
|
{ name = "aiofiles" },
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue