Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Privacy docs #4080

Open
wants to merge 14 commits into
base: dev
Choose a base branch
from
1 change: 1 addition & 0 deletions docs/src/pages/docs/_meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
},
"desktop": "Desktop",
"data-folder": "Jan Data Folder",
"privacy": "Privacy",
"user-guides": {
"title": "BASIC USAGE",
"type": "separator"
Expand Down
63 changes: 63 additions & 0 deletions docs/src/pages/docs/privacy.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
title: Jan Privacy
description: Jan is an app that allows you to own your AI. We prioritize your control over your data and explain what data we collect and why.
keywords:
[
Jan AI,
Jan,
ChatGPT alternative,
local AI,
private AI,
conversational AI,
OpenAI platform alternative,
no-subscription fee,
large language model,
about Jan,
desktop application,
thinking machine,
jan vision,
]
---

# Privacy

Jan is an app that allows you to own your AI. We prioritize your control over your data and explain what data we collect and why.

- Jan can't see your chats with AI
- You're free to opt out

## Why and what we track

To build a reliable, user-friendly AI that you own, we need to understand how Jan is used. We collect two types of data: performance data and usage data.

### Performance data
We track app crashes and collect technical details about what went wrong, along with basic information about the hardware you’re using.

When Jan crashes, we collect technical details about what went wrong.

- Specific AI model in use during the crash
- Hardware: `CPU`, `GPU`, `RAM`
- Logs: `Date/Time`, `OS & version`, `app version`, `error codes & messages`.

### Usage data

We track data like how often the app is opened to check:

- **Active Users**: How many people use Jan daily to measure engagement
- **Retention Rates**: To understand if users are finding value in Jan over time

Usage data is tied to a randomly generated telemetry ID. None of our usage data can be linked to your personal identity.

## What we **don’t** track:
- Your conversations with Jan. Those stay on your device.
- Your files. We don’t scan, upload, or even look at them.
- Anything tied to your identity.

## Using Cloud Models

Jan allows you to connect cloud model APIs. If you choose to use cloud-based models (e.g. GPT, Claude models), the API provider handling the model will have access to your messages as part of processing the request. Again, Jan doesn't see or store these messages - they go directly to the provider. Remember: With local models, everything stays on your device, so no one - not even us- can see your messages.

## Where we store & process data
We use [PostHog](https://posthog.com/eu) EU for analytics, ensuring all data is processed within the European Union. This setup complies with GDPR and other strict privacy regulations. PostHog lets us self-host and securely manage the data we collect. Read more [on PostHog's GDPR doc](https://posthog.com/docs/privacy/gdpr-compliance).

For a detailed breakdown of the analytics data we collect, you can check out our analytics repo. If you have any questions or concerns, feel free to reach out to us at hi@jan.ai.
2 changes: 1 addition & 1 deletion extensions/inference-cortex-extension/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@janhq/inference-cortex-extension",
"productName": "Cortex Inference Engine",
"version": "1.0.21",
"version": "1.0.22",
"description": "This extension embeds cortex.cpp, a lightweight inference engine written in C++. See https://jan.ai.\nAdditional dependencies could be installed to run without Cuda Toolkit installation.",
"main": "dist/index.js",
"node": "dist/node/index.cjs.js",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"sources": [
{
"url": "https://huggingface.co/cortexso/phi3/resolve/main/model.gguf",
"filename": "model.gguf"
"url": "https://huggingface.co/bartowski/Phi-3-mini-4k-instruct-GGUF/resolve/main/Phi-3-mini-4k-instruct-Q4_K_M.gguf",
"filename": "Phi-3-mini-4k-instruct-Q4_K_M.gguf"
}
],
"id": "phi3-3.8b",
Expand All @@ -14,7 +14,7 @@
"settings": {
"ctx_len": 4096,
"prompt_template": "<|user|>\n{prompt}<|end|>\n<|assistant|>\n",
"llama_model_path": "model.gguf",
"llama_model_path": "Phi-3-mini-4k-instruct-Q4_K_M.gguf",
"ngl": 33
},
"parameters": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"sources": [
{
"url": "https://huggingface.co/bartowski/Phi-3-medium-128k-instruct-GGUF/resolve/main/Phi-3-medium-128k-instruct-Q4_K_M.gguf",
"filename": "Phi-3-medium-128k-instruct-Q4_K_M.gguf"
"url": "https://huggingface.co/bartowski/Phi-3-mini-4k-instruct-GGUF/resolve/main/Phi-3-mini-4k-instruct-Q4_K_M.gguf",
"filename": "Phi-3-mini-4k-instruct-Q4_K_M.gguf"
}
],
"id": "phi3-medium",
Expand All @@ -14,7 +14,7 @@
"settings": {
"ctx_len": 128000,
"prompt_template": "<|user|> {prompt}<|end|><|assistant|>",
"llama_model_path": "Phi-3-medium-128k-instruct-Q4_K_M.gguf",
"llama_model_path": "Phi-3-mini-4k-instruct-Q4_K_M.gguf",
"ngl": 33
},
"parameters": {
Expand Down
7 changes: 5 additions & 2 deletions web/hooks/useModels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
const remoteModels = ModelManager.instance()
.models.values()
.toArray()
.filter((e) => !isLocalEngine(e.engine))

Check warning on line 53 in web/hooks/useModels.ts

View workflow job for this annotation

GitHub Actions / coverage-check

53 line is not covered with tests
const toUpdate = [
...localModels,
...remoteModels.filter(
Expand All @@ -64,13 +64,13 @@

toUpdate.forEach((model) => {
if (!ModelManager.instance().models.has(model.id)) {
ModelManager.instance().models.set(model.id, model)

Check warning on line 67 in web/hooks/useModels.ts

View workflow job for this annotation

GitHub Actions / coverage-check

67 line is not covered with tests
// eslint-disable-next-line react-hooks/exhaustive-deps
isUpdated = true

Check warning on line 69 in web/hooks/useModels.ts

View workflow job for this annotation

GitHub Actions / coverage-check

69 line is not covered with tests
}
})
if (isUpdated) {
getExtensionModels()

Check warning on line 73 in web/hooks/useModels.ts

View workflow job for this annotation

GitHub Actions / coverage-check

73 line is not covered with tests
}
}

Expand All @@ -90,12 +90,15 @@
const toUpdate = [
...downloadedModels,
...cachedModels.filter(
(e: Model) => !downloadedModels.some((g: Model) => g.id === e.id)
(e) =>
!isLocalEngine(e.engine) &&
!downloadedModels.some((g: Model) => g.id === e.id)

Check warning on line 95 in web/hooks/useModels.ts

View workflow job for this annotation

GitHub Actions / coverage-check

94-95 lines are not covered with tests
),
]

setDownloadedModels(toUpdate)
}, [downloadedModels, setDownloadedModels])
setExtensionModels(cachedModels)
}, [downloadedModels, setDownloadedModels, setExtensionModels])

const getModels = async (): Promise<Model[]> =>
extensionManager
Expand All @@ -116,7 +119,7 @@
}, [reloadData, updateStates])

const configurePullOptions = useCallback(() => {
extensionManager

Check warning on line 122 in web/hooks/useModels.ts

View workflow job for this annotation

GitHub Actions / coverage-check

122 line is not covered with tests
.get<ModelExtension>(ExtensionTypeEnum.Model)
?.configurePullOptions(
proxyEnabled
Expand Down
1 change: 0 additions & 1 deletion web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
"next-themes": "^0.2.1",
"postcss": "8.4.31",
"postcss-url": "10.1.3",
"posthog-js": "^1.95.1",
"react": "18.2.0",
"react-circular-progressbar": "^2.1.0",
"react-dom": "18.2.0",
Expand Down
Loading