diff --git a/.env.template b/.env.template index ee62f1d3d..28980de74 100644 --- a/.env.template +++ b/.env.template @@ -16,7 +16,7 @@ STRUCTURED_OUTPUT_FRAMEWORK="instructor" LLM_API_KEY="your_api_key" -LLM_MODEL="openai/gpt-5-mini" +LLM_MODEL="openai/gpt-4o-mini" LLM_PROVIDER="openai" LLM_ENDPOINT="" LLM_API_VERSION="" @@ -33,7 +33,7 @@ EMBEDDING_MAX_TOKENS=8191 # If using BAML structured output these env variables will be used BAML_LLM_PROVIDER=openai -BAML_LLM_MODEL="gpt-5-mini" +BAML_LLM_MODEL="gpt-4o-mini" BAML_LLM_ENDPOINT="" BAML_LLM_API_KEY="your_api_key" BAML_LLM_API_VERSION="" diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..7705a51eb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,97 @@ +name: 🐛 Bug Report +description: Report a bug or unexpected behavior +title: "[Bug]: " +labels: ["bug", "needs-triage"] +assignees: [] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! Please provide a clear and detailed description. + + - type: textarea + id: description + attributes: + label: Bug Description + description: Please provide a clear and concise description of the bug. What happened vs what you expected? + placeholder: Describe the bug in detail... + validations: + required: true + + - type: textarea + id: reproduction + attributes: + label: Steps to Reproduce + description: Please provide detailed steps to reproduce the issue + placeholder: | + 1. Go to... + 2. Click on... + 3. See error... + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected Behavior + description: What did you expect to happen? + placeholder: Describe what you expected... + validations: + required: true + + - type: textarea + id: actual + attributes: + label: Actual Behavior + description: What actually happened? + placeholder: Describe what actually happened... + validations: + required: true + + - type: textarea + id: environment + attributes: + label: Environment + description: Please provide your environment details + placeholder: | + - OS: [e.g. macOS 13.0, Ubuntu 20.04] + - Python version: [e.g. 3.9.0] + - Cognee version: [e.g. 0.1.0] + - LLM Provider: [e.g. OpenAI, Ollama] + - Database: [e.g. Neo4j, FalkorDB] + validations: + required: true + + - type: textarea + id: logs + attributes: + label: Logs/Error Messages + description: Please include any relevant logs or error messages + placeholder: Paste logs here... + render: shell + validations: + required: false + + - type: textarea + id: additional + attributes: + label: Additional Context + description: Add any other context about the problem here + placeholder: Any additional information... + validations: + required: false + + - type: checkboxes + id: checklist + attributes: + label: Pre-submission Checklist + description: Please confirm the following before submitting + options: + - label: I have searched existing issues to ensure this bug hasn't been reported already + required: true + - label: I have provided a clear and detailed description of the bug + required: true + - label: I have included steps to reproduce the issue + required: true + - label: I have included my environment details + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..2d6a38e3e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: 💬 Discord Community + url: https://discord.gg/NQtRemgQVD + about: Join our Discord community for questions, discussions, and support + - name: 📖 Documentation + url: https://docs.cognee.ai + about: Check our documentation for guides and API references diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml new file mode 100644 index 000000000..417289f5b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -0,0 +1,73 @@ +name: 📚 Documentation Issue +description: Report an issue with documentation or suggest documentation improvements +title: "[Docs]: " +labels: ["documentation", "needs-triage"] +assignees: [] +body: + - type: markdown + attributes: + value: | + Thanks for helping improve our documentation! Please provide details about the documentation issue or improvement. + + - type: dropdown + id: doc-type + attributes: + label: Documentation Type + description: What type of documentation issue is this? + options: + - Missing documentation + - Incorrect documentation + - Unclear documentation + - Documentation improvement + - New documentation request + validations: + required: true + + - type: textarea + id: location + attributes: + label: Documentation Location + description: Where is the documentation issue located? (URL, file path, section, etc.) + placeholder: https://cognee.ai/docs/... or specific file/section + validations: + required: true + + - type: textarea + id: issue + attributes: + label: Issue Description + description: Please describe the documentation issue or improvement needed + placeholder: The documentation is unclear about... + validations: + required: true + + - type: textarea + id: suggestion + attributes: + label: Suggested Improvement + description: How would you improve this documentation? + placeholder: I suggest changing this to... + validations: + required: false + + - type: textarea + id: additional + attributes: + label: Additional Context + description: Add any other context about the documentation issue + placeholder: Additional context... + validations: + required: false + + - type: checkboxes + id: checklist + attributes: + label: Pre-submission Checklist + description: Please confirm the following before submitting + options: + - label: I have searched existing issues to ensure this documentation issue hasn't been reported already + required: true + - label: I have provided a clear description of the documentation issue + required: true + - label: I have specified the location of the documentation issue + required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 000000000..cf743e6e4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,78 @@ +name: 🚀 Feature Request +description: Suggest a new feature or enhancement +title: "[Feature]: " +labels: ["enhancement", "needs-triage"] +assignees: [] +body: + - type: markdown + attributes: + value: | + Thanks for suggesting a new feature! Please provide a clear and detailed description of your idea. + + - type: textarea + id: problem + attributes: + label: Problem Statement + description: Is your feature request related to a problem? Please describe the problem you're trying to solve. + placeholder: I'm always frustrated when... + validations: + required: true + + - type: textarea + id: solution + attributes: + label: Proposed Solution + description: Describe the solution you'd like to see implemented + placeholder: I would like to see... + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives Considered + description: Describe any alternative solutions or features you've considered + placeholder: I have also considered... + validations: + required: false + + - type: textarea + id: use-case + attributes: + label: Use Case + description: Describe your specific use case and how this feature would help + placeholder: This feature would help me... + validations: + required: true + + - type: textarea + id: implementation + attributes: + label: Implementation Ideas + description: If you have ideas about how this could be implemented, please share them + placeholder: This could be implemented by... + validations: + required: false + + - type: textarea + id: additional + attributes: + label: Additional Context + description: Add any other context, screenshots, or examples about the feature request + placeholder: Additional context... + validations: + required: false + + - type: checkboxes + id: checklist + attributes: + label: Pre-submission Checklist + description: Please confirm the following before submitting + options: + - label: I have searched existing issues to ensure this feature hasn't been requested already + required: true + - label: I have provided a clear problem statement and proposed solution + required: true + - label: I have described my specific use case + required: true + diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 06d4c05da..76ff5965c 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,7 +1,50 @@ ## Description - + + +## Type of Change + +- [ ] Bug fix (non-breaking change that fixes an issue) +- [ ] New feature (non-breaking change that adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to change) +- [ ] Documentation update +- [ ] Code refactoring +- [ ] Performance improvement +- [ ] Other (please specify): + +## Changes Made + +- +- +- + +## Testing + + +## Screenshots/Videos (if applicable) + + +## Pre-submission Checklist + +- [ ] **I have tested my changes thoroughly before submitting this PR** +- [ ] **This PR contains minimal changes necessary to address the issue/feature** +- [ ] My code follows the project's coding standards and style guidelines +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] I have added necessary documentation (if applicable) +- [ ] All new and existing tests pass +- [ ] I have searched existing PRs to ensure this change hasn't been submitted already +- [ ] I have linked any relevant issues in the description +- [ ] My commits have clear and descriptive messages + +## Related Issues + + +## Additional Notes + ## 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. diff --git a/cognee-frontend/public/videos/background-video-blur.mp4 b/cognee-frontend/public/videos/background-video-blur.mp4 new file mode 100644 index 000000000..23d7ecdba Binary files /dev/null and b/cognee-frontend/public/videos/background-video-blur.mp4 differ diff --git a/cognee-frontend/src/app/account/Account.tsx b/cognee-frontend/src/app/account/Account.tsx index 8161a4d26..c5cca42b7 100644 --- a/cognee-frontend/src/app/account/Account.tsx +++ b/cognee-frontend/src/app/account/Account.tsx @@ -1,22 +1,29 @@ +"use client"; + import Link from "next/link"; import { BackIcon } from "@/ui/Icons"; import { CTAButton } from "@/ui/elements"; import Header from "@/ui/Layout/Header"; +import { useAuthenticatedUser } from "@/modules/auth"; export default function Account() { + const { user } = useAuthenticatedUser(); const account = { - name: "John Doe", + name: user ? user.name || user.email : "NN", }; return ( - <> -
-
-
-
-
-
-
+
+
@@ -46,6 +53,6 @@ export default function Account() {
- + ); } diff --git a/cognee-frontend/src/app/dashboard/AddDataToCognee.tsx b/cognee-frontend/src/app/dashboard/AddDataToCognee.tsx index e5f4bb932..cc729473d 100644 --- a/cognee-frontend/src/app/dashboard/AddDataToCognee.tsx +++ b/cognee-frontend/src/app/dashboard/AddDataToCognee.tsx @@ -1,10 +1,11 @@ import { FormEvent, useCallback, useState } from "react"; import { CloseIcon, PlusIcon } from "@/ui/Icons"; import { useModal } from "@/ui/elements/Modal"; -import { CTAButton, GhostButton, IconButton, Modal, Select } from "@/ui/elements"; +import { CTAButton, GhostButton, IconButton, Modal, NeutralButton, Select } from "@/ui/elements"; import addData from "@/modules/ingestion/addData"; import { Dataset } from "@/modules/ingestion/useDatasets"; +import cognifyDataset from "@/modules/datasets/cognifyDataset"; interface AddDataToCogneeProps { datasets: Dataset[]; @@ -39,9 +40,16 @@ export default function AddDataToCognee({ datasets, refreshDatasets }: AddDataTo }, Array.from(filesForUpload) ) - .then(() => { + .then(({ dataset_id, dataset_name }) => { refreshDatasets(); setFilesForUpload(null); + + return cognifyDataset({ + id: dataset_id, + name: dataset_name, + data: [], // not important, just to mimick Dataset + status: "", // not important, just to mimick Dataset + }); }); }, [filesForUpload, refreshDatasets]); @@ -64,20 +72,22 @@ export default function AddDataToCognee({ datasets, refreshDatasets }: AddDataTo
Add new data to a dataset? - +
Please select a dataset to add data in.
If you don't have any, don't worry, we will create one for you.
- + select files - + {filesForUpload?.length && (
@@ -91,7 +101,7 @@ export default function AddDataToCognee({ datasets, refreshDatasets }: AddDataTo )}
- closeAddDataModal()}>cancel + closeAddDataModal()}>cancel {isProcessingDataWithCognee ? "processing..." : "add"} diff --git a/cognee-frontend/src/app/dashboard/Dashboard.tsx b/cognee-frontend/src/app/dashboard/Dashboard.tsx index c5980fb29..a785f8e00 100644 --- a/cognee-frontend/src/app/dashboard/Dashboard.tsx +++ b/cognee-frontend/src/app/dashboard/Dashboard.tsx @@ -93,6 +93,17 @@ export default function Dashboard() { return (
+ +
diff --git a/cognee-frontend/src/app/dashboard/DatasetsAccordion.tsx b/cognee-frontend/src/app/dashboard/DatasetsAccordion.tsx index 55ce23dfa..4b80d831c 100644 --- a/cognee-frontend/src/app/dashboard/DatasetsAccordion.tsx +++ b/cognee-frontend/src/app/dashboard/DatasetsAccordion.tsx @@ -8,8 +8,8 @@ import { CloseIcon, DatasetIcon, MinusIcon, PlusIcon } from "@/ui/Icons"; import useDatasets, { Dataset } from "@/modules/ingestion/useDatasets"; import addData from "@/modules/ingestion/addData"; import cognifyDataset from "@/modules/datasets/cognifyDataset"; -import { DataFile } from '@/modules/ingestion/useData'; -import { LoadingIndicator } from '@/ui/App'; +import { DataFile } from "@/modules/ingestion/useData"; +import { LoadingIndicator } from "@/ui/App"; interface DatasetsChangePayload { datasets: Dataset[] @@ -156,20 +156,16 @@ export default function DatasetsAccordion({ } }; - const { - value: isProcessingFiles, - setTrue: setProcessingFilesInProgress, - setFalse: setProcessingFilesDone, - } = useBoolean(false); + const [datasetInProcessing, setProcessingDataset] = useState(null); const handleAddFiles = (dataset: Dataset, event: ChangeEvent) => { event.stopPropagation(); - if (isProcessingFiles) { + if (datasetInProcessing) { return; } - setProcessingFilesInProgress(); + setProcessingDataset(dataset); if (!event.target.files) { return; @@ -184,12 +180,10 @@ export default function DatasetsAccordion({ return addData(dataset, files) .then(async () => { await getDatasetData(dataset.id); - - const onUpdate = () => {}; - return cognifyDataset(dataset, onUpdate) + return cognifyDataset(dataset) .finally(() => { - setProcessingFilesDone(); + setProcessingDataset(null); }); }); }; @@ -230,7 +224,12 @@ export default function DatasetsAccordion({ isOpen={isDatasetsPanelOpen} openAccordion={openDatasetsPanel} closeAccordion={closeDatasetsPanel} - tools={tools || } + tools={( +
+ {tools} + +
+ )} switchCaretPosition={switchCaretPosition} className={className} contentClassName={contentClassName} @@ -247,7 +246,7 @@ export default function DatasetsAccordion({ key={dataset.id} title={(
- {isProcessingFiles ? : } + {datasetInProcessing?.id == dataset.id ? : } {dataset.name}
)} diff --git a/cognee-frontend/src/app/plan/Plan.tsx b/cognee-frontend/src/app/plan/Plan.tsx index fcca31566..1fc3477ea 100644 --- a/cognee-frontend/src/app/plan/Plan.tsx +++ b/cognee-frontend/src/app/plan/Plan.tsx @@ -5,16 +5,17 @@ import Header from "@/ui/Layout/Header"; export default function Plan() { return ( - <> -
-
-
-
-
-
-
-
-
+
+
@@ -27,25 +28,29 @@ export default function Plan() {
+
+ Affordable and transparent pricing +
+
-
+
Basic
Free
-
+
On-prem Subscription
$2470 /per month
Save 20% yearly
-
+
Cloud Subscription
$25 /per month
(beta pricing)
-
+
Everything in the free plan, plus...
License to use Cognee open source
@@ -56,7 +61,7 @@ export default function Plan() {
-
+
Everything in the free plan, plus...
License to use Cognee open source and Cognee Platform
@@ -69,7 +74,7 @@ export default function Plan() {
-
+
Everything in the free plan, plus...
Fully hosted cloud platform
@@ -83,24 +88,25 @@ export default function Plan() {
- Try for free + Try for free
- Talk to us + Talk to us
- Sign up for Cogwit Beta + Sign up for Cogwit Beta
-
+
Feature Comparison
Basic
On-prem
Cloud
- +
+
Data Sources
28+
28+
@@ -121,37 +127,39 @@ export default function Plan() {
Hands-on
Priority
-
SLA
-
-
1 day
-
Standard
+
SLA
+
+
1 day
+
Standard
-
+
Can I change my plan anytime?
Yes, you can upgrade or downgrade your plan at any time. Changes take effect immediately.
-
+
What happens to my data if I downgrade?
Your data is preserved, but features may be limited based on your new plan constraints.
-
+
Do you offer educational discounts?
Yes, we offer special pricing for educational institutions and students. Contact us for details.
-
+
Is there a free trial for paid plans?
All new accounts start with a 14-day free trial of our Pro plan features.
-
- Need a custom solution? - Contact us +
+
+
Need a custom solution?
+ Contact us +
- +
); } diff --git a/cognee-frontend/src/modules/datasets/cognifyDataset.ts b/cognee-frontend/src/modules/datasets/cognifyDataset.ts index 7842334af..301405c2f 100644 --- a/cognee-frontend/src/modules/datasets/cognifyDataset.ts +++ b/cognee-frontend/src/modules/datasets/cognifyDataset.ts @@ -1,13 +1,13 @@ import { fetch } from "@/utils"; -import getDatasetGraph from "./getDatasetGraph"; +// import getDatasetGraph from "./getDatasetGraph"; import { Dataset } from "../ingestion/useDatasets"; -interface GraphData { - nodes: { id: string; label: string; properties?: object }[]; - edges: { source: string; target: string; label: string }[]; -} +// interface GraphData { +// nodes: { id: string; label: string; properties?: object }[]; +// edges: { source: string; target: string; label: string }[]; +// } -export default async function cognifyDataset(dataset: Dataset, onUpdate: (data: GraphData) => void) { +export default async function cognifyDataset(dataset: Dataset) { // const data = await ( return fetch("/v1/cognify", { method: "POST", @@ -19,16 +19,16 @@ export default async function cognifyDataset(dataset: Dataset, onUpdate: (data: runInBackground: false, }), }) - .then((response) => response.json()) - .then(() => { - return getDatasetGraph(dataset) - .then((data) => { - onUpdate({ - nodes: data.nodes, - edges: data.edges, - }); - }); - }); + .then((response) => response.json()); + // .then(() => { + // return getDatasetGraph(dataset) + // .then((data) => { + // onUpdate({ + // nodes: data.nodes, + // edges: data.edges, + // }); + // }); + // }); // ) // const websocket = new WebSocket(`ws://localhost:8000/api/v1/cognify/subscribe/${data.pipeline_run_id}`); diff --git a/cognee-frontend/src/ui/Layout/Header.tsx b/cognee-frontend/src/ui/Layout/Header.tsx index 465153e1a..a615eeb4f 100644 --- a/cognee-frontend/src/ui/Layout/Header.tsx +++ b/cognee-frontend/src/ui/Layout/Header.tsx @@ -27,10 +27,10 @@ export default function Header() { return ( <> -
+
-
Cognee Graph Interface
+
Cognee Local
diff --git a/cognee/api/v1/notebooks/routers/get_notebooks_router.py b/cognee/api/v1/notebooks/routers/get_notebooks_router.py index 3891214b1..5979f68ff 100644 --- a/cognee/api/v1/notebooks/routers/get_notebooks_router.py +++ b/cognee/api/v1/notebooks/routers/get_notebooks_router.py @@ -36,7 +36,9 @@ def get_notebooks_router(): async def create_notebook_endpoint( notebook_data: NotebookData, user: User = Depends(get_authenticated_user) ): - return await create_notebook(user.id, notebook_data.name, notebook_data.cells) + return await create_notebook( + user.id, notebook_data.name, notebook_data.cells, deletable=True + ) @router.put("/{notebook_id}") async def update_notebook_endpoint( diff --git a/cognee/infrastructure/llm/config.py b/cognee/infrastructure/llm/config.py index 7aa8f33f7..b2fd460f2 100644 --- a/cognee/infrastructure/llm/config.py +++ b/cognee/infrastructure/llm/config.py @@ -35,7 +35,7 @@ class LLMConfig(BaseSettings): structured_output_framework: str = "instructor" llm_provider: str = "openai" - llm_model: str = "gpt-5-mini" + llm_model: str = "openai/gpt-4o-mini" llm_endpoint: str = "" llm_api_key: Optional[str] = None llm_api_version: Optional[str] = None @@ -44,7 +44,7 @@ class LLMConfig(BaseSettings): llm_max_completion_tokens: int = 16384 baml_llm_provider: str = "openai" - baml_llm_model: str = "gpt-5-mini" + baml_llm_model: str = "gpt-4o-mini" baml_llm_endpoint: str = "" baml_llm_api_key: Optional[str] = None baml_llm_temperature: float = 0.0 diff --git a/cognee/modules/notebooks/methods/create_notebook.py b/cognee/modules/notebooks/methods/create_notebook.py index c94ea6977..b4915da23 100644 --- a/cognee/modules/notebooks/methods/create_notebook.py +++ b/cognee/modules/notebooks/methods/create_notebook.py @@ -15,7 +15,9 @@ async def create_notebook( deletable: Optional[bool], session: AsyncSession, ) -> Notebook: - notebook = Notebook(name=notebook_name, owner_id=user_id, cells=cells, deletable=deletable) + notebook = Notebook( + name=notebook_name, owner_id=user_id, cells=cells, deletable=deletable or True + ) session.add(notebook) diff --git a/cognee/modules/retrieval/temporal_retriever.py b/cognee/modules/retrieval/temporal_retriever.py index 1e56dda3a..0ab8e2ecf 100644 --- a/cognee/modules/retrieval/temporal_retriever.py +++ b/cognee/modules/retrieval/temporal_retriever.py @@ -114,7 +114,7 @@ class TemporalRetriever(GraphCompletionRetriever): "No timestamps identified based on the query, performing retrieval using triplet search on events and entities." ) triplets = await self.get_triplets(query) - return await self.resolve_edges_to_text(triplets) + return await self.resolve_edges_to_text(triplets), triplets if ids: relevant_events = await graph_engine.collect_events(ids=ids) @@ -123,7 +123,7 @@ class TemporalRetriever(GraphCompletionRetriever): "No events identified based on timestamp filtering, performing retrieval using triplet search on events and entities." ) triplets = await self.get_triplets(query) - return await self.resolve_edges_to_text(triplets) + return await self.resolve_edges_to_text(triplets), triplets vector_engine = get_vector_engine() query_vector = (await vector_engine.embedding_engine.embed_text([query]))[0] diff --git a/cognee/modules/users/methods/get_default_user.py b/cognee/modules/users/methods/get_default_user.py index 10779e028..48073a884 100644 --- a/cognee/modules/users/methods/get_default_user.py +++ b/cognee/modules/users/methods/get_default_user.py @@ -29,7 +29,9 @@ async def get_default_user() -> SimpleNamespace: # We return a SimpleNamespace to have the same user type as our SaaS # SimpleNamespace is just a dictionary which can be accessed through attributes - auth_data = SimpleNamespace(id=user.id, tenant_id=user.tenant_id, roles=[]) + auth_data = SimpleNamespace( + id=user.id, email=user.email, tenant_id=user.tenant_id, roles=[] + ) return auth_data except Exception as error: if "principals" in str(error.args): diff --git a/cognee/shared/logging_utils.py b/cognee/shared/logging_utils.py index 73153753f..6d160446e 100644 --- a/cognee/shared/logging_utils.py +++ b/cognee/shared/logging_utils.py @@ -268,7 +268,7 @@ def setup_logging(log_level=None, name=None): global _is_structlog_configured # Regular detailed logging for non-CLI usage - log_level = log_level if log_level else log_levels[os.getenv("LOG_LEVEL", "INFO")] + log_level = log_level if log_level else log_levels[os.getenv("LOG_LEVEL", "INFO").upper()] # Configure external library logging early to suppress verbose output configure_external_library_logging()