From 9a1e03e40332c91b81c6e95b3a87a23557fddad9 Mon Sep 17 00:00:00 2001 From: Boris Date: Mon, 24 Feb 2025 20:36:22 +0100 Subject: [PATCH] fix: simplify installation in readme (#577) ## Description ## DCO Affirmation I affirm that all code in every commit of this pull request conforms to the terms of the Topoteretes Developer Certificate of Origin ## Summary by CodeRabbit - **Documentation** - Enhanced overall clarity and layout of the guide. - Updated text alignment and visual elements, including an updated logo. - Revised header hierarchy for a more intuitive reading experience. - Added detailed installation instructions with specific database support. - Reorganized contributing guidelines and the code of conduct for improved structure. --- README.md | 170 ++++++++++++++--------------- assets/cognee-logo-transparent.png | Bin 0 -> 3922 bytes assets/cognee_logo_transparent.png | Bin 34191 -> 0 bytes 3 files changed, 80 insertions(+), 90 deletions(-) create mode 100644 assets/cognee-logo-transparent.png delete mode 100644 assets/cognee_logo_transparent.png diff --git a/README.md b/README.md index 912366901..3cf3d37fc 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,24 @@ - -
-
+
- Logo + Cognee Logo
+ cognee - memory layer for AI apps and Agents + [![GitHub forks](https://img.shields.io/github/forks/topoteretes/cognee.svg?style=social&label=Fork&maxAge=2592000)](https://GitHub.com/topoteretes/cognee/network/) + [![GitHub stars](https://img.shields.io/github/stars/topoteretes/cognee.svg?style=social&label=Star&maxAge=2592000)](https://GitHub.com/topoteretes/cognee/stargazers/) + [![GitHub commits](https://badgen.net/github/commits/topoteretes/cognee)](https://GitHub.com/topoteretes/cognee/commit/) + [![Github tag](https://badgen.net/github/tag/topoteretes/cognee)](https://github.com/topoteretes/cognee/tags/) + [![Downloads](https://static.pepy.tech/badge/cognee)](https://pepy.tech/project/cognee) + [![License](https://img.shields.io/github/license/topoteretes/cognee?colorA=00C586&colorB=000000)](https://github.com/topoteretes/cognee/blob/main/LICENSE) + [![Contributors](https://img.shields.io/github/contributors/topoteretes/cognee?colorA=00C586&colorB=000000)](https://github.com/topoteretes/cognee/graphs/contributors) -cognee - memory layer for AI apps and Agents - -[![GitHub forks](https://img.shields.io/github/forks/topoteretes/cognee.svg?style=social&label=Fork&maxAge=2592000)](https://GitHub.com/topoteretes/cognee/network/) -[![GitHub stars](https://img.shields.io/github/stars/topoteretes/cognee.svg?style=social&label=Star&maxAge=2592000)](https://GitHub.com/topoteretes/cognee/stargazers/) -[![GitHub commits](https://badgen.net/github/commits/topoteretes/cognee)](https://GitHub.com/topoteretes/cognee/commit/) -[![Github tag](https://badgen.net/github/tag/topoteretes/cognee)](https://github.com/topoteretes/cognee/tags/) -[![Downloads](https://static.pepy.tech/badge/cognee)](https://pepy.tech/project/cognee) -[![License](https://img.shields.io/github/license/topoteretes/cognee?colorA=00C586&colorB=000000)](https://github.com/topoteretes/cognee/blob/main/LICENSE) -[![Contributors](https://img.shields.io/github/contributors/topoteretes/cognee?colorA=00C586&colorB=000000)](https://github.com/topoteretes/cognee/graphs/contributors) - - -We build for developers who need a reliable, production-ready data layer for AI applications - + We build for developers who need a reliable, production-ready data layer for AI applications
-## What is cognee? +# What is cognee? Cognee implements scalable, modular ECL (Extract, Cognify, Load) pipelines that allow you to interconnect and retrieve past conversations, documents, and audio transcriptions while reducing hallucinations, developer effort, and cost. @@ -37,22 +31,14 @@ If you have questions, join our Discord Have you seen cognee's starter repo? Check it out! -
-why cognee +
+ Why cognee?
-## Contributing - -Your contributions are at the core of making this a true open source project. Any contributions you make are **greatly appreciated**. See [`CONTRIBUTING.md`](CONTRIBUTING.md) for more information. - -## Code of Conduct - -We are committed to making open source an enjoyable and respectful experience for our community. See CODE_OF_CONDUCT for more information. ## 📦 Installation -You can install Cognee using either **pip** or **poetry**. -Support for various databases and vector stores is available through extras. +You can install Cognee using either **pip**, **poetry**, **uv** or any other python package manager. ### With pip @@ -62,55 +48,13 @@ pip install cognee ### With poetry -If adding to you project -``` +```bash poetry add cognee ``` -If installing inside cloned repository - +### With uv ```bash -poetry config virtualenvs.in-project true -poetry self add poetry-plugin-shell -poetry install -poetry shell -``` - -### With pip with specific database support - -To install Cognee with support for specific databases use the appropriate command below. Replace \ with the name of the database you need. -```bash -pip install 'cognee[]' -``` - -Replace \ with any of the following databases: -- postgres -- weaviate -- qdrant -- neo4j -- milvus - -Installing Cognee with PostgreSQL and Neo4j support example: -```bash -pip install 'cognee[postgres, neo4j]' -``` - -### With poetry with specific database support - -To install Cognee with support for specific databases use the appropriate command below. Replace \ with the name of the database you need. -```bash -poetry add cognee -E -``` -Replace \ with any of the following databases: -- postgres -- weaviate -- qdrant -- neo4j -- milvus - -Installing Cognee with PostgreSQL and Neo4j support example: -```bash -poetry add cognee -E postgres -E neo4j +uv add cognee ``` ## 💻 Basic Usage @@ -119,7 +63,6 @@ poetry add cognee -E postgres -E neo4j ``` import os - os.environ["LLM_API_KEY"] = "YOUR OPENAI_API_KEY" ``` @@ -177,7 +120,7 @@ async def main(): 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}'") # Query cognee for insights on the added text search_results = await cognee.search( @@ -206,13 +149,13 @@ When you run this script, you will see step-by-step messages in the console that A version of this example is here: `examples/python/simple_example.py` -### Understand our architecture +## Understand our architecture -cognee framework consists of tasks that can be grouped into pipelines. +Cognee consists of tasks that can be grouped into pipelines. Each task can be an independent part of business logic, that can be tied to other tasks to form a pipeline. These tasks persist data into your memory store enabling you to search for relevant context of past conversations, documents, or any other data you have stored. -
-cognee concept diagram +
+ cognee concept diagram
@@ -239,27 +182,74 @@ Check out our demo notebook [here](https://github.com/topoteretes/cognee/blob/ma [](https://www.youtube.com/watch?v=fI4hDzguN5k "Learn about cognee: 55") +## Install Cognee with specific database support +Support for various databases and vector stores is available through extras. +Please see the [Cognee Quickstart Guide](https://docs.cognee.ai/quickstart/) for important configuration information. -## Get Started +### With pip -### Install Server +To install Cognee with support for specific databases use the appropriate command below. Replace \ with the name of the database you need. +```bash +pip install 'cognee[]' +``` -Please see the [cognee Quick Start Guide](https://docs.cognee.ai/quickstart/) for important configuration information. +Replace \ with any of the following databases: +- postgres +- weaviate +- qdrant +- neo4j +- milvus + +Installing Cognee with PostgreSQL and Neo4j support example: +```bash +pip install 'cognee[postgres, neo4j]' +``` + +### With poetry + +To install Cognee with support for specific databases use the appropriate command below. Replace \ with the name of the database you need. +```bash +poetry add cognee -E +``` +Replace \ with any of the following databases: +- postgres +- weaviate +- qdrant +- neo4j +- milvus + +Installing Cognee with PostgreSQL and Neo4j support example: +```bash +poetry add cognee -E postgres -E neo4j +``` + +## Working with local Cognee + +Install dependencies inside the cloned repository: + +```bash +poetry config virtualenvs.in-project true +poetry self add poetry-plugin-shell +poetry install +poetry shell +``` + + +## Run Cognee API server + +Please see the [Cognee Quickstart Guide](https://docs.cognee.ai/quickstart/) for important configuration information. ```bash docker compose up ``` +## Contributing -### Install SDK - -Please see the cognee [Development Guide](https://docs.cognee.ai/quickstart/) for important beta information and usage instructions. - -```bash -pip install cognee -``` +Your contributions are at the core of making this a true open source project. Any contributions you make are **greatly appreciated**. See [`CONTRIBUTING.md`](CONTRIBUTING.md) for more information. +## Code of Conduct +We are committed to making open source an enjoyable and respectful experience for our community. See CODE_OF_CONDUCT for more information. ## 💫 Contributors diff --git a/assets/cognee-logo-transparent.png b/assets/cognee-logo-transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..348ff1fe641d3c5f81d0229dede2d7fc6548c59a GIT binary patch literal 3922 zcmV-Y53TTtP)%stX=n=)G1~a=G5?+LpQAcyu+b(cdZflD&fA!- zG12sGM8q`RADXW7OMKQ%DcYH4&qgDD*5_58BNSbA;g|SBdqS68(1*FibL0Dn=Q5?~ zA3U?8@96&UU<_L8N6zP0Bswc39;HNaK4zGYDbXJ-rpb4_gslSxVoFn<_~~BG)Q%Xg zP`V#t0woQTr#uNgPZ|a+aQk%%90X%R;u-(hb^J*}+1OmC>q-1!C#A_?zW*g%ZVbi` zycjJcU7-PHeoyb8G6VPczir2#4f%8Qa=bpE8i4VF5%J)$ggnMeD`@#(ln}6afSBDf zlP77oc*a^~kE$WKz?ER+B7CMxBV-wPl74+LUO#ZT;Lq_nJdNL~(8c#V_(YfczQS!o zAf8HAiMIbWULR2aNQ*joMS~c9Vz5^1H+PbIfz;4vwKjXDsS}$h<{TsGUHPQeLz4@|&He}kM{d%-O2zJ3=jPLhNed?l1&`R&c_}e3@ z09gMkqT?FobHr}-W*N)-Q+)A^$F)y^p;G|S?0;$&GNAJ$J~z67(0n!0fNP#A_sSc~ z5i&|5Y7I<%cue6c_NWHHoqZDjwM8X?v1S*$uKDb&(&}k1{?qH)bqN{3yxV`m*Ps9X zv!H>&$xrJfBwZf$Nu9I`U;mM=Eq5PaP8wVlSBT@oKOWwAv3#gpsU0hHu34q zQP5Y4KfI7DP4YuRet@w3=GwWWkR?8yrLcXeoLc!G%-~?8w&? zr$AlSYEM(gHHwRng`kW7={Ss6%=bCwf30r+EZmf4I_7&n=YA)%EDDiq zm&bypeDAKlGyPh2lMn;R!tr2@)*c|*$kKgM)Xzo(qHbkqz;8gmp-VR(2m^NXbWy^S zv+0|)087P_U~*fTX;ynwfi7l(ZQsy5`ln`h+J!FSH51k+ZG8_>D)I|{O4+5;wWlPW z8WchBdBk`@*vOzXC+zy--{^`arijw$(9u;e!S(7wC%rc8>a??& zuJrep6|*L;=<2{gSI6W&s(6{<97%*N0UBa*hz^;CrYID_F2^pZac#bFJw%4e^a8+8|Sw+~^ z^tCEWY*VoH>Q~8Z!EvOe3z`YS7y|ddR!VmUZO!+=#>)(o0)Q3Ps}3FDRq)!dWU3a< zB1Rlsnm#`axZIIj0@DLg;(79o_;p%8K%nJD3tEG(2Z%hE5Hdtaf6tkj!o!x4QiP$} zh#$^=*$A2eyolzB6zzhhY#k8BO%tZ|&Vnq|@?my4uc45cYe3tr+n3g>s7E7c2Jqnh zp=(ncx2CYJ6D(UB3kgWw1n_?5P^ExrU}xsgU|~M8WKB5>d_*@GsbSH*h->k0P7G}> z8@EQ-Hc~@HHW!JKL8ojBMzi0E?>CWQgv^jd2^paF6X)gt0-w>jfwVAJs|t$-!i$(N z7?Ydukv@(&N~CLUQy{Rm{6}h_q3C-a=n>PV8=o%94^%l6sZJ~CFbrKvU=c6{og$hT zc?yEW%4aa8tKO6aR(DDyAljxzHU1kv#(!h_PqdbJyCck@USfQ3_9fm!?Q{O|8*qbpO zK14=LUDclI2F`Hl+CsS7Wx&=^$Kzzm_z#I_N|Bb)SUXvdk%RzGfHn<@cjBE-&*~6S zq`ihP+#7&~H6{Nta8~MF(ed?pKp@#d9^21p(LUW$D2t@c-wdHR{gE1Y+?eqn4AB)` z4h-!bRga=Hz+4zyq_ODw*lD;ZE%2%YL0i`z(Tde2K=QA!WT_xk2nP#MR|Ln{@yvMk zf5zvXzteY+5G%IGjKOWSW;s%WVq(SlY7vY*3rnsmj{a0KDA?F$9zDiKoqM~6NcpEj z-9?bsRff?aSkT^JF64(HZ%ua{I}ODJPi#Q2!crf?shTn9vzU%G6|%(Jt+i%3TIOOx?J@;*sv88NFZFyvAr6%}LPeF2m<5WQN)o2%U^LEjCCG#Reoh<o&vsxFFcDU|SMe~s2oio*D=)t2Y$(R>y(NFYo) z8IM2|5(Np4U764%XrO`p3++C|T&jafy<>I+u7%BczG(k3;D@_2VjDV4yrQ`=vpVCBU|Y!SAyfZuM5sMSk@EaT=X zWNHo3qhQFYKV>OJs1kOUg)E0GsFT(a;3>6U&I4O@@i<8juQ8_7h7I_y*#?1Lnbsw!ZP7VB@#5{KGEpq`2L8#LO|Hq zvXP@@bAqUlIRhTxWy%JM=z6%34$#*fZRrT%e|qd=4~0WjR@=?jXuV&ilo$W=(5>L8 z@%~xX_gaap?}*aJx}zJsPTAGHIizkFQi>7^1eNEhX^p%U#@~62)s?4OBRVN<9n_Z6 zHUcC*6{L%i9Xw@zSl9A{)51nAY7zNy43tRb#(qkOaJ39bT=pZ19=i{Sv^YqiDocY3 z-*yX{#_R$=pe4Z&sMrm;*cQM|B>^lT3z^V%hy;nh75>^NsL2Rvd5PhaXkV{N}xz zL8@_|b*0T01>|qC;(?`y@*65_)*Gur?xv0eXEBxjj zttE>*Th(B>XavmwmzRH3#E>%gcCjzEZ?JeYf@XnXofZ-afA(*CGI0YvZgeSwn}C}3 zfacLAO)_eOyMac~EHKov2#&I+6dK%oG_Io~91~K5!1V=*4Q>w_i{=RRqP~Zg;~zmV z37A3A;AWt)XeA*dlDd~r*dUOVZrmJQ_C8&MuxJEriTH^(#C7?k!sC6>4Q@Uf*Kvus zqRF1FO&DIy)Zq4^5ws;jCAKC-ZBv>qEtj%Ecr=2xd;~vK+TiA)5ws-&g;Yr|XbCmA zGicr>vjm{P%LRSdF%?q9i}k3%ok0_ITp(O4D1|ul)!=5Kv1khbYFY9o^v*e*XK%H% z7ZOTq-xP1KSTq)`MkoP8mPgn1H;pyBn`kUrV9dIQ6VEbrdA&($aOcnnT3}qzMOK7X zcsdK*d&EMv-K1UJO*DcQ5UPlgV*#TavcStrhswVVZZ8@^3kX3|)QNZPKE!+B)@gmv z)DF4(Xap@Frm}Xt4cS4`!{)r%SA{0(7!dk5sK^?Vz9q^U+#NK678pv{j!CZ761HAP g>m{lrH@I8)Ka{NlZlol3%m4rY07*qoM6N<$g602g+yDRo literal 0 HcmV?d00001 diff --git a/assets/cognee_logo_transparent.png b/assets/cognee_logo_transparent.png deleted file mode 100644 index dcb8f67a2739a479a215d94b4587fc93bfc11338..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34191 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