Merge branch 'dev' into fix_issue_with_path
This commit is contained in:
commit
b98cb48382
20 changed files with 435 additions and 95 deletions
|
|
@ -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=""
|
||||
|
|
|
|||
97
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
97
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
|
|
@ -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
|
||||
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
|
|
@ -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
|
||||
73
.github/ISSUE_TEMPLATE/documentation.yml
vendored
Normal file
73
.github/ISSUE_TEMPLATE/documentation.yml
vendored
Normal file
|
|
@ -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
|
||||
78
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
78
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
|
|
@ -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
|
||||
|
||||
45
.github/pull_request_template.md
vendored
45
.github/pull_request_template.md
vendored
|
|
@ -1,7 +1,50 @@
|
|||
<!-- .github/pull_request_template.md -->
|
||||
|
||||
## Description
|
||||
<!-- Provide a clear description of the changes in this PR -->
|
||||
<!--
|
||||
Please provide a clear, human-generated description of the changes in this PR.
|
||||
DO NOT use AI-generated descriptions. We want to understand your thought process and reasoning.
|
||||
-->
|
||||
|
||||
## Type of Change
|
||||
<!-- Please check the relevant option -->
|
||||
- [ ] 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
|
||||
<!-- List the specific changes made in this PR -->
|
||||
-
|
||||
-
|
||||
-
|
||||
|
||||
## Testing
|
||||
<!-- Describe how you tested your changes -->
|
||||
|
||||
## Screenshots/Videos (if applicable)
|
||||
<!-- Add screenshots or videos to help explain your changes -->
|
||||
|
||||
## Pre-submission Checklist
|
||||
<!-- Please check all boxes that apply before submitting your PR -->
|
||||
- [ ] **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
|
||||
<!-- Link any related issues using "Fixes #issue_number" or "Relates to #issue_number" -->
|
||||
|
||||
## Additional Notes
|
||||
<!-- Add any additional notes, concerns, or context for reviewers -->
|
||||
|
||||
## 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.
|
||||
|
|
|
|||
BIN
cognee-frontend/public/videos/background-video-blur.mp4
Normal file
BIN
cognee-frontend/public/videos/background-video-blur.mp4
Normal file
Binary file not shown.
|
|
@ -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 (
|
||||
<>
|
||||
<div className="absolute top-0 right-0 bottom-0 left-0 flex flex-row gap-2.5">
|
||||
<div className="flex-1/5 bg-gray-100 h-full"></div>
|
||||
<div className="flex-1/5 bg-gray-100 h-full"></div>
|
||||
<div className="flex-1/5 bg-gray-100 h-full"></div>
|
||||
<div className="flex-1/5 bg-gray-100 h-full"></div>
|
||||
<div className="flex-1/5 bg-gray-100 h-full"></div>
|
||||
</div>
|
||||
<div className="bg-gray-200 h-full max-w-[1920px] mx-auto">
|
||||
<video
|
||||
autoPlay
|
||||
loop
|
||||
muted
|
||||
playsInline
|
||||
className="fixed inset-0 z-0 object-cover w-full h-full"
|
||||
>
|
||||
<source src="/videos/background-video-blur.mp4" type="video/mp4" />
|
||||
Your browser does not support the video tag.
|
||||
</video>
|
||||
|
||||
<Header />
|
||||
|
||||
|
|
@ -46,6 +53,6 @@ export default function Account() {
|
|||
<div className="flex-1/5 py-4 px-5 rounded-xl">
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
|||
<div className="w-full max-w-2xl">
|
||||
<div className="flex flex-row items-center justify-between">
|
||||
<span className="text-2xl">Add new data to a dataset?</span>
|
||||
<IconButton onClick={closeAddDataModal}><CloseIcon /></IconButton>
|
||||
<IconButton disabled={isProcessingDataWithCognee} onClick={closeAddDataModal}><CloseIcon /></IconButton>
|
||||
</div>
|
||||
<div className="mt-8 mb-6">Please select a dataset to add data in.<br/> If you don't have any, don't worry, we will create one for you.</div>
|
||||
<form onSubmit={submitDataToCognee}>
|
||||
<div className="max-w-md flex flex-col gap-4">
|
||||
<Select name="datasetName">
|
||||
<option value="">select a dataset</option>
|
||||
{datasets.map((dataset: Dataset) => <option key={dataset.id} value={dataset.id}>{dataset.name}</option>)}
|
||||
{!datasets.length && <option value="">main_dataset</option>}
|
||||
{datasets.map((dataset: Dataset, index) => (
|
||||
<option selected={index===0} key={dataset.id} value={dataset.id}>{dataset.name}</option>
|
||||
))}
|
||||
</Select>
|
||||
|
||||
<GhostButton className="w-full relative justify-start pl-4">
|
||||
<NeutralButton className="w-full relative justify-start pl-4">
|
||||
<input onChange={prepareFiles} required name="files" tabIndex={-1} type="file" multiple className="absolute w-full h-full cursor-pointer opacity-0" />
|
||||
<span>select files</span>
|
||||
</GhostButton>
|
||||
</NeutralButton>
|
||||
|
||||
{filesForUpload?.length && (
|
||||
<div className="pt-4 mt-4 border-t-1 border-t-gray-100">
|
||||
|
|
@ -91,7 +101,7 @@ export default function AddDataToCognee({ datasets, refreshDatasets }: AddDataTo
|
|||
)}
|
||||
</div>
|
||||
<div className="flex flex-row gap-4 mt-4 justify-end">
|
||||
<GhostButton type="button" onClick={() => closeAddDataModal()}>cancel</GhostButton>
|
||||
<GhostButton disabled={isProcessingDataWithCognee} type="button" onClick={() => closeAddDataModal()}>cancel</GhostButton>
|
||||
<CTAButton disabled={isProcessingDataWithCognee} type="submit">
|
||||
{isProcessingDataWithCognee ? "processing..." : "add"}
|
||||
</CTAButton>
|
||||
|
|
|
|||
|
|
@ -93,6 +93,17 @@ export default function Dashboard() {
|
|||
|
||||
return (
|
||||
<div className="h-full flex flex-col bg-gray-200">
|
||||
<video
|
||||
autoPlay
|
||||
loop
|
||||
muted
|
||||
playsInline
|
||||
className="fixed inset-0 z-0 object-cover w-full h-full"
|
||||
>
|
||||
<source src="/videos/background-video-blur.mp4" type="video/mp4" />
|
||||
Your browser does not support the video tag.
|
||||
</video>
|
||||
|
||||
<Header />
|
||||
|
||||
<div className="relative flex-1 flex flex-row gap-2.5 items-start w-full max-w-[1920px] max-h-[calc(100% - 3.5rem)] overflow-hidden mx-auto px-2.5 py-2.5">
|
||||
|
|
|
|||
|
|
@ -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<Dataset | null>(null);
|
||||
|
||||
const handleAddFiles = (dataset: Dataset, event: ChangeEvent<HTMLInputElement>) => {
|
||||
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 || <IconButton onClick={handleDatasetAdd}><PlusIcon /></IconButton>}
|
||||
tools={(
|
||||
<div className="flex flex-row gap-4 items-center">
|
||||
{tools}
|
||||
<IconButton onClick={handleDatasetAdd}><PlusIcon /></IconButton>
|
||||
</div>
|
||||
)}
|
||||
switchCaretPosition={switchCaretPosition}
|
||||
className={className}
|
||||
contentClassName={contentClassName}
|
||||
|
|
@ -247,7 +246,7 @@ export default function DatasetsAccordion({
|
|||
key={dataset.id}
|
||||
title={(
|
||||
<div className="flex flex-row gap-2 items-center py-1.5 cursor-pointer">
|
||||
{isProcessingFiles ? <LoadingIndicator /> : <DatasetIcon />}
|
||||
{datasetInProcessing?.id == dataset.id ? <LoadingIndicator /> : <DatasetIcon />}
|
||||
<span className="text-xs">{dataset.name}</span>
|
||||
</div>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -5,16 +5,17 @@ import Header from "@/ui/Layout/Header";
|
|||
|
||||
export default function Plan() {
|
||||
return (
|
||||
<>
|
||||
<div className="absolute top-0 right-0 bottom-0 left-0 flex flex-row gap-2.5">
|
||||
<div className="flex-1/5 bg-gray-100 h-full"></div>
|
||||
<div className="flex-3/5 h-full flex flex-row gap-2.5">
|
||||
<div className="flex-1/3 bg-gray-100 h-full"></div>
|
||||
<div className="flex-1/3 bg-gray-100 h-full"></div>
|
||||
<div className="flex-1/3 bg-gray-100 h-full"></div>
|
||||
</div>
|
||||
<div className="flex-1/5 bg-gray-100 h-full"></div>
|
||||
</div>
|
||||
<div className="bg-gray-200 h-full max-w-[1920px] mx-auto">
|
||||
<video
|
||||
autoPlay
|
||||
loop
|
||||
muted
|
||||
playsInline
|
||||
className="fixed inset-0 z-0 object-cover w-full h-full"
|
||||
>
|
||||
<source src="/videos/background-video-blur.mp4" type="video/mp4" />
|
||||
Your browser does not support the video tag.
|
||||
</video>
|
||||
|
||||
<Header />
|
||||
|
||||
|
|
@ -27,25 +28,29 @@ export default function Plan() {
|
|||
</div>
|
||||
|
||||
<div className="flex-3/5">
|
||||
<div className="bg-[rgba(255,255,255,0.7)] rounded-xl px-5 py-4 mb-2">
|
||||
Affordable and transparent pricing
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-3 gap-x-2.5">
|
||||
<div className="pt-13 py-4 px-5 mb-2.5 rounded-tl-xl rounded-tr-xl bg-white h-full">
|
||||
<div className="pt-13 py-4 px-5 mb-2.5 rounded-tl-xl rounded-tr-xl bg-[rgba(255,255,255,0.7)] h-full">
|
||||
<div>Basic</div>
|
||||
<div className="text-3xl mb-4 font-bold">Free</div>
|
||||
</div>
|
||||
|
||||
<div className="pt-13 py-4 px-5 mb-2.5 rounded-tl-xl rounded-tr-xl bg-white h-full">
|
||||
<div className="pt-13 py-4 px-5 mb-2.5 rounded-tl-xl rounded-tr-xl bg-[rgba(255,255,255,0.7)] h-full">
|
||||
<div>On-prem Subscription</div>
|
||||
<div className="mb-4"><span className="text-3xl font-bold">$2470</span><span className="text-gray-400"> /per month</span></div>
|
||||
<div className="mb-9"><span className="font-bold">Save 20% </span>yearly</div>
|
||||
</div>
|
||||
|
||||
<div className="pt-13 py-4 px-5 mb-2.5 rounded-tl-xl rounded-tr-xl bg-white h-full">
|
||||
<div className="pt-13 py-4 px-5 mb-2.5 rounded-tl-xl rounded-tr-xl bg-[rgba(255,255,255,0.7)] h-full">
|
||||
<div>Cloud Subscription</div>
|
||||
<div className="mb-4"><span className="text-3xl font-bold">$25</span><span className="text-gray-400"> /per month</span></div>
|
||||
<div className="mb-9 text-gray-400">(beta pricing)</div>
|
||||
</div>
|
||||
|
||||
<div className="bg-white rounded-bl-xl rounded-br-xl h-full">
|
||||
<div className="bg-[rgba(255,255,255,0.7)] rounded-bl-xl rounded-br-xl h-full py-4 px-5">
|
||||
<div className="mb-1 invisible">Everything in the free plan, plus...</div>
|
||||
<div className="flex flex-col gap-3 mb-28">
|
||||
<div className="flex flex-row gap-2"><CheckIcon className="mt-1 shrink-0" />License to use Cognee open source</div>
|
||||
|
|
@ -56,7 +61,7 @@ export default function Plan() {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div className="bg-white rounded-bl-xl rounded-br-xl h-full">
|
||||
<div className="bg-[rgba(255,255,255,0.7)] rounded-bl-xl rounded-br-xl h-full py-4 px-5">
|
||||
<div className="mb-1 text-gray-400">Everything in the free plan, plus...</div>
|
||||
<div className="flex flex-col gap-3 mb-10">
|
||||
<div className="flex flex-row gap-2"><CheckIcon className="mt-1 shrink-0" />License to use Cognee open source and Cognee Platform</div>
|
||||
|
|
@ -69,7 +74,7 @@ export default function Plan() {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div className="bg-white rounded-bl-xl rounded-br-xl h-full">
|
||||
<div className="bg-[rgba(255,255,255,0.7)] rounded-bl-xl rounded-br-xl h-full py-4 px-5">
|
||||
<div className="mb-1 text-gray-400">Everything in the free plan, plus...</div>
|
||||
<div className="flex flex-col gap-3 mb-10">
|
||||
<div className="flex flex-row gap-2"><CheckIcon className="mt-1 shrink-0" />Fully hosted cloud platform</div>
|
||||
|
|
@ -83,24 +88,25 @@ export default function Plan() {
|
|||
</div>
|
||||
|
||||
<div className="pt-4 pb-14 mb-2.5">
|
||||
<NeutralButton>Try for free</NeutralButton>
|
||||
<NeutralButton className="w-full">Try for free</NeutralButton>
|
||||
</div>
|
||||
|
||||
<div className="pt-4 pb-14 mb-2.5">
|
||||
<CTAButton>Talk to us</CTAButton>
|
||||
<CTAButton className="w-full">Talk to us</CTAButton>
|
||||
</div>
|
||||
|
||||
<div className="pt-4 pb-14 mb-2.5">
|
||||
<NeutralButton>Sign up for Cogwit Beta</NeutralButton>
|
||||
<NeutralButton className="w-full">Sign up for Cogwit Beta</NeutralButton>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-4 py-4 px-5 bg-[rgba(255,255,255,0.5)] mb-12">
|
||||
<div className="grid grid-cols-4 py-4 px-5 mb-4">
|
||||
<div>Feature Comparison</div>
|
||||
<div className="text-center">Basic</div>
|
||||
<div className="text-center">On-prem</div>
|
||||
<div className="text-center">Cloud</div>
|
||||
|
||||
</div>
|
||||
<div className="grid grid-cols-4 py-1 px-5 mb-12 bg-[rgba(255,255,255,0.7)] rounded-xl">
|
||||
<div className="border-b-[1px] border-b-gray-100 py-3">Data Sources</div>
|
||||
<div className="text-center border-b-[1px] border-b-gray-100 py-3">28+</div>
|
||||
<div className="text-center border-b-[1px] border-b-gray-100 py-3">28+</div>
|
||||
|
|
@ -121,37 +127,39 @@ export default function Plan() {
|
|||
<div className="text-center border-b-[1px] border-b-gray-100 py-3">Hands-on</div>
|
||||
<div className="text-center border-b-[1px] border-b-gray-100 py-3">Priority</div>
|
||||
|
||||
<div className="border-b-[1px] border-b-gray-100 py-3">SLA</div>
|
||||
<div className="text-center border-b-[1px] border-b-gray-100 py-3">—</div>
|
||||
<div className="text-center border-b-[1px] border-b-gray-100 py-3">1 day</div>
|
||||
<div className="text-center border-b-[1px] border-b-gray-100 py-3">Standard</div>
|
||||
<div className="py-3">SLA</div>
|
||||
<div className="text-center py-3">—</div>
|
||||
<div className="text-center py-3">1 day</div>
|
||||
<div className="text-center py-3">Standard</div>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-2 gap-x-2.5 gap-y-2.5 mb-12">
|
||||
<div className="bg-[rgba(255,255,255,0.5)] py-4 px-5">
|
||||
<div className="bg-[rgba(255,255,255,0.5)] py-4 px-5 rounded-xl">
|
||||
<div>Can I change my plan anytime?</div>
|
||||
<div className="text-gray-500 mt-6">Yes, you can upgrade or downgrade your plan at any time. Changes take effect immediately.</div>
|
||||
</div>
|
||||
<div className="bg-[rgba(255,255,255,0.5)] py-4 px-5">
|
||||
<div className="bg-[rgba(255,255,255,0.5)] py-4 px-5 rounded-xl">
|
||||
<div>What happens to my data if I downgrade?</div>
|
||||
<div className="text-gray-500 mt-6">Your data is preserved, but features may be limited based on your new plan constraints.</div>
|
||||
</div>
|
||||
<div className="bg-[rgba(255,255,255,0.5)] py-4 px-5">
|
||||
<div className="bg-[rgba(255,255,255,0.5)] py-4 px-5 rounded-xl">
|
||||
<div>Do you offer educational discounts?</div>
|
||||
<div className="text-gray-500 mt-6">Yes, we offer special pricing for educational institutions and students. Contact us for details.</div>
|
||||
</div>
|
||||
<div className="bg-[rgba(255,255,255,0.5)] py-4 px-5">
|
||||
<div className="bg-[rgba(255,255,255,0.5)] py-4 px-5 rounded-xl">
|
||||
<div>Is there a free trial for paid plans?</div>
|
||||
<div className="text-gray-500 mt-6">All new accounts start with a 14-day free trial of our Pro plan features.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex-1/5 h-full text-center flex flex-col self-end mb-12">
|
||||
<span className="text-sm mb-2">Need a custom solution?</span>
|
||||
<CTAButton>Contact us</CTAButton>
|
||||
<div className="flex-1/5 h-full text-center flex flex-col self-end mb-12 max-w-[1920px]">
|
||||
<div className="fixed bottom-6 w-[calc(min(1920px,100%)/5)] mx-auto">
|
||||
<div className="text-sm mb-2">Need a custom solution?</div>
|
||||
<CTAButton className="w-full">Contact us</CTAButton>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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}`);
|
||||
|
|
|
|||
|
|
@ -27,10 +27,10 @@ export default function Header() {
|
|||
|
||||
return (
|
||||
<>
|
||||
<header className="relative bg-[rgba(244,244,244,0.5)] flex flex-row h-14 min-h-14 px-5 items-center justify-between w-full max-w-[1920px] mx-auto">
|
||||
<header className="relative bg-[rgba(244,244,244,0.3)] flex flex-row h-14 min-h-14 px-5 items-center justify-between w-full max-w-[1920px] mx-auto">
|
||||
<div className="flex flex-row gap-4 items-center">
|
||||
<CogneeIcon />
|
||||
<div className="text-lg">Cognee Graph Interface</div>
|
||||
<div className="text-lg">Cognee Local</div>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-row items-center gap-2.5">
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue