diff --git a/blog.png b/blog.png deleted file mode 100644 index 584a0f825..000000000 Binary files a/blog.png and /dev/null differ diff --git a/clog.png b/clog.png deleted file mode 100644 index 793ab6a41..000000000 Binary files a/clog.png and /dev/null differ diff --git a/clog10.png b/clog10.png deleted file mode 100644 index 7f19349ad..000000000 Binary files a/clog10.png and /dev/null differ diff --git a/clog11.png b/clog11.png deleted file mode 100644 index 95959da47..000000000 Binary files a/clog11.png and /dev/null differ diff --git a/clog12.png b/clog12.png deleted file mode 100644 index a0936d9ea..000000000 Binary files a/clog12.png and /dev/null differ diff --git a/clog13.png b/clog13.png deleted file mode 100644 index 235fb704f..000000000 Binary files a/clog13.png and /dev/null differ diff --git a/clog2.png b/clog2.png deleted file mode 100644 index a38d3e4b2..000000000 Binary files a/clog2.png and /dev/null differ diff --git a/clog3.png b/clog3.png deleted file mode 100644 index 04ad4c37e..000000000 Binary files a/clog3.png and /dev/null differ diff --git a/clog4.png b/clog4.png deleted file mode 100644 index 2b5fd1493..000000000 Binary files a/clog4.png and /dev/null differ diff --git a/clog5.png b/clog5.png deleted file mode 100644 index 3045afe63..000000000 Binary files a/clog5.png and /dev/null differ diff --git a/clog6.png b/clog6.png deleted file mode 100644 index bc82106ad..000000000 Binary files a/clog6.png and /dev/null differ diff --git a/clog7.png b/clog7.png deleted file mode 100644 index 40a5e030f..000000000 Binary files a/clog7.png and /dev/null differ diff --git a/clog8.png b/clog8.png deleted file mode 100644 index ec4699628..000000000 Binary files a/clog8.png and /dev/null differ diff --git a/clog9.png b/clog9.png deleted file mode 100644 index 1dc8bad87..000000000 Binary files a/clog9.png and /dev/null differ diff --git a/docs/src/components/FooterMenu/index.tsx b/docs/src/components/FooterMenu/index.tsx index 0d9a50190..287c8a517 100644 --- a/docs/src/components/FooterMenu/index.tsx +++ b/docs/src/components/FooterMenu/index.tsx @@ -35,28 +35,28 @@ const socials = [ ] const menus = [ - { - name: 'Product', - child: [ - { - menu: 'Download', - path: '/download', - }, - { - menu: 'Changelog', - path: '/changelog', - }, - ], - }, - { - name: 'For Developers', - child: [ - { - menu: 'Documentation', - path: '/docs', - }, - ], - }, + // { + // name: 'Product', + // child: [ + // { + // menu: 'Download', + // path: '/download', + // }, + // { + // menu: 'Changelog', + // path: '/changelog', + // }, + // ], + // }, + // { + // name: 'For Developers', + // child: [ + // { + // menu: 'Documentation', + // path: '/docs', + // }, + // ], + // }, { name: 'Community', child: [ @@ -71,7 +71,7 @@ const menus = [ external: true, }, { - menu: 'Twitter', + menu: 'X/Twitter', path: 'https://twitter.com/jandotai', external: true, }, @@ -86,8 +86,8 @@ const menus = [ name: 'Company', child: [ { - menu: 'About', - path: '/about', + menu: 'Menlo', + path: 'https://menlo.ai', }, { menu: 'Blog', @@ -158,8 +158,8 @@ export default function Footer() { return (
-
-
+
+

@@ -209,9 +209,10 @@ export default function Footer() {

+
{menus.map((menu, i) => { return ( -
+

{menu.name}

diff --git a/docs/src/pages/_meta.json b/docs/src/pages/_meta.json index cccdee43f..8645e586f 100644 --- a/docs/src/pages/_meta.json +++ b/docs/src/pages/_meta.json @@ -7,9 +7,10 @@ "layout": "raw" } }, - "docs": { + "docs-v2": { "type": "page", - "title": "Documentation" + "title": "Documentation", + "href": "https://v2.jan.ai" }, "cortex": { "type": "page", @@ -33,10 +34,6 @@ "layout": "raw" } }, - "about": { - "type": "page", - "title": "About" - }, "blog": { "type": "page", "title": "Blog", diff --git a/handbook/_meta.ts b/handbook/_meta.ts new file mode 100644 index 000000000..257adfcbb --- /dev/null +++ b/handbook/_meta.ts @@ -0,0 +1,42 @@ +import type { MetaRecord } from "nextra"; + +/** + * type MetaRecordValue = + * | TitleSchema + * | PageItemSchema + * | SeparatorSchema + * | MenuSchema + * + * type MetaRecord = Record + **/ +const meta: MetaRecord = { + index: { + title: "Welcome", + }, + "about-seperator": { + title: "About Menlo", + type: "separator", + }, + why: "1. Why does Menlo Exist?", + money: "2. How we make Money", + who: "3. Who We Hire", + philosophy: "5. Menlo's Philosophies", + brand: "6. Brand & Identity", + "how-we-work-separator": { + title: "How We Work", + type: "separator", + }, + team: "Team Roster", + culture: "Menlo's Culture", + how: "How We Build", + sell: "How We Sell", + "hr-separator": { + title: "HR", + type: "separator", + }, + lifecycle: "HR Lifecycle", + hr: "HR Policies", + comp: "Compensation", +}; + +export default meta; diff --git a/handbook/brand/index.mdx b/handbook/brand/index.mdx new file mode 100644 index 000000000..74f723dc7 --- /dev/null +++ b/handbook/brand/index.mdx @@ -0,0 +1,4 @@ +--- +title: Brand & Identity +asIndexPage: true +--- \ No newline at end of file diff --git a/handbook/comp/_meta.ts b/handbook/comp/_meta.ts new file mode 100644 index 000000000..24e0f8586 --- /dev/null +++ b/handbook/comp/_meta.ts @@ -0,0 +1,17 @@ +import type { MetaRecord } from "nextra"; + +/** + * type MetaRecordValue = + * | TitleSchema + * | PageItemSchema + * | SeparatorSchema + * | MenuSchema + * + * type MetaRecord = Record + **/ +const meta: MetaRecord = { + bonus: "Bonus", + esop: "ESOP", +} + +export default meta; \ No newline at end of file diff --git a/handbook/comp/bonus.mdx b/handbook/comp/bonus.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/handbook/comp/esop.mdx b/handbook/comp/esop.mdx new file mode 100644 index 000000000..523c3b370 --- /dev/null +++ b/handbook/comp/esop.mdx @@ -0,0 +1,23 @@ +--- +title: "ESOP" +description: "Employee Stock Options" +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Shares and Equity + +Menlo is [employee-owned](/handbook/why/ownership). The people building Menlo own a meaningful percentage of the company over time. + +### Distributions + +Every 6 months, Menlo distributes 1% of company equity among its team members: + +- Dec 2023: 1% distributed among 10 team members (1 part-time) +- June 2024: 1% distributed among 15 team members (4 part-time) +- Dec 2024: 1% distributed among 18 team members (5 part-time) + +Distributions are performance-based, and cover both full-time and part-time team members and open source contributors. + +This schedule is subject to change based on the discretion of the board. \ No newline at end of file diff --git a/handbook/comp/index.mdx b/handbook/comp/index.mdx new file mode 100644 index 000000000..a45b6e30f --- /dev/null +++ b/handbook/comp/index.mdx @@ -0,0 +1,38 @@ +--- +title: "Compensation" +description: "Payment and benefits schemes." +asIndexPage: true +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Compensation + +### Pay + +Everyone at Menlo is on the same payscale, with cost of living adjustments based on [location](#location). + +Your base cash pay is determined based on realized impact, not titles. Workstream owners, responsible for the success/failure of a project & team, are compensated more than individual contributors. Folks at the same contribution levels receive equitable base pay. + +Based on your [progression](progression) speed, we have been known to adjust pay frequently and aggressively. + +### Location + +We provide a location adjustment for folks living in a high cost of living area. We use the [Numbeo](https://www.numbeo.com/cost-of-living/) index to arrive at a fair & equitable total. + +### Bonus + +Depending on location, we pay a discretionary cash bonus twice per year. The bonus typically ranges from 5-17% of your base pay, and is based on the company's performance and your individual contribution. + +### ESOP + +We offer an employee stock ownership plan to all full-time employees. The ESOP is a key part of our compensation package and is designed to align everyone's incentives with the long-term success of the company. Read our [ESOP policy](esop). + +### Benefits + +- **Equipment**: After the probation period, you get a $1000-$1500 USD budget for equipment. Eligible items inlude: laptop, monitors, keyboard, mouse, and noise cancelling headphones. Please see our [spending policy](spending) for more details. + +- **AI Subscriptions**: We are an AI native team - the expectation is to use AI to 100x your productivity. You get $100/month towards AI subscriptions and tools. Search `AI API Key Access Instructions` in Discord to get access. + +- **Language & Presentation Skills**: We grant a $100 yearly budget to improve in language skills (eg [Italki](https://www.italki.com/), [Elsa](https://elsaspeak.com/en/), [Cambly](https://www.cambly.com/english?lang=en) tutors, classes and books) diff --git a/handbook/culture/communicate.mdx b/handbook/culture/communicate.mdx new file mode 100644 index 000000000..fab148899 --- /dev/null +++ b/handbook/culture/communicate.mdx @@ -0,0 +1,15 @@ +--- +title: How We Communicate +--- + +We're a small, fully-remote team spanning 4 continents and 9 cultures. To make this work, here are some guidelines. + +### Expectations + +- **Assume Hanlon’s Razor**: “Never attribute to malice that which is adequately explained by ~~stupidity~~ lack of communication or ambiguity.” +- **Ask Stupid Questions**: If you're not sure, ask. We are all learning. +- **Boil the Ocean into a Single Droplet**: We trust you to tackle ambiguity and complexity head-on. Share the insights, abstract the details. +> Tip: "I've been thinking about X, and I think we should do Y because Z. What do you think?" +- **Documentation First**: Start with a pull request. Overcomment your code. Publish changes to docs. +- **Async Communication over Meetings**: If you schedule a meeting, there should be a clear agenda & outcome. +> Tip: spend the first 10 minutes of the meeting reading over **prepared materials**. This way, everyone is well informed and can arrive at a better discussion/decision. diff --git a/handbook/culture/fight.mdx b/handbook/culture/fight.mdx new file mode 100644 index 000000000..86fae1b20 --- /dev/null +++ b/handbook/culture/fight.mdx @@ -0,0 +1,3 @@ +--- +title: How We Fight +--- \ No newline at end of file diff --git a/handbook/how/_meta.ts b/handbook/how/_meta.ts new file mode 100644 index 000000000..8b3f9da16 --- /dev/null +++ b/handbook/how/_meta.ts @@ -0,0 +1,21 @@ +import type { MetaRecord } from "nextra"; + +/** + * type MetaRecordValue = + * | TitleSchema + * | PageItemSchema + * | SeparatorSchema + * | MenuSchema + * + * type MetaRecord = Record + **/ +const meta: MetaRecord = { + github: "Github", + discord: "Discord", + sprints: "Sprints", + okrs: "OKRs", + infra: "Infra", + analytics: "Analytics", +}; + +export default meta; diff --git a/handbook/how/analytics.mdx b/handbook/how/analytics.mdx new file mode 100644 index 000000000..24196379c --- /dev/null +++ b/handbook/how/analytics.mdx @@ -0,0 +1,3 @@ +--- +title: Analytics +--- \ No newline at end of file diff --git a/handbook/how/discord.mdx b/handbook/how/discord.mdx new file mode 100644 index 000000000..f6c16a198 --- /dev/null +++ b/handbook/how/discord.mdx @@ -0,0 +1,34 @@ +## Internal Tools + +We like to make AI do the boring stuff. We also automate and dogfood our own tools as much as possible. + +### Tools + +- **Github**: For engineering specs, sprint planning, and documentation. +- **Discord**: For chat, voice, and video calls. +- **Google Hangouts**: For a short, daily standup. +- **Gmail**: For external communication. +- **HackMD/Obsidian**: For ad hoc ideas and meeting notes. +- **Excalidraw**: For whiteboarding. +- **Password Manager**: You will be invited. +- **Jan/Cortex**: A personal, private copilot. + +### Infrastructure + +We use a mix of cloud providers and build our on-premises hardware to cut costs and optimize performance. + +- Singapore Cluster: For training and inference. +- Hanoi Cluster: For CI/CD and data pipelines. +- Burst Compute: We like Runpod for larger training runs. + +See [Infra](/handbook/infra/infra) for more details. + +### CI/CD + +We have a dedicated devops/mlops team. Ping in the `infra-internal` channel for any requests. + +### Automations + +We have a dedicated automations engineer. Her goal is to automate yesterday's tasks today, so that you are doing something different tomorrow. + +Ping in the `#automations` channel for any requests. \ No newline at end of file diff --git a/handbook/how/github.mdx b/handbook/how/github.mdx new file mode 100644 index 000000000..d0e45fc4a --- /dev/null +++ b/handbook/how/github.mdx @@ -0,0 +1,13 @@ +## Github + +Building in public is in our organizational DNA. + +We open-source our code, share our learnings, and contribute back to the community. Sometimes it may feel like we're giving away our secret sauce, but we believe that the benefits of transparency and collaboration far outweigh the costs. + +### Build in Public + +- [Daily updates](https://discord.gg/AxypHJRQxd) +- [Project management](https://github.com/orgs/menloresearch/projects/5/views/25) +- [Open weights, open data](https://huggingface.co/homebrewltd) +- [Live training runs](https://discord.gg/BmA5DbxeEb) +- [Monthly community calls](https://discord.gg/J4aQxRUddD?event=1337239895755853846) \ No newline at end of file diff --git a/handbook/how/infra.mdx b/handbook/how/infra.mdx new file mode 100644 index 000000000..d085d5b27 --- /dev/null +++ b/handbook/how/infra.mdx @@ -0,0 +1,3 @@ +--- +title: Infra +--- \ No newline at end of file diff --git a/handbook/how/okrs.mdx b/handbook/how/okrs.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/handbook/how/sprints.mdx b/handbook/how/sprints.mdx new file mode 100644 index 000000000..5a5318627 --- /dev/null +++ b/handbook/how/sprints.mdx @@ -0,0 +1,5 @@ +## Sprints + +[Menlo sprints](https://github.com/orgs/menloresearch/projects/5/views/25) are every 2 weeks. + +Releases are QA'd prior to release. We never release on Fridays, unless ya'll wanna come back on Saturday. diff --git a/handbook/hr/1-on-1s.mdx b/handbook/hr/1-on-1s.mdx new file mode 100644 index 000000000..9e053ad4f --- /dev/null +++ b/handbook/hr/1-on-1s.mdx @@ -0,0 +1,25 @@ +--- +title: "One on Ones" +description: "One on Ones." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## 1-on-1s + +We don't schedule recurring 1-on-1s, because in our experience, engineers and researchers [hate it](https://www.reddit.com/r/cscareerquestions/comments/14rkbwv/does_anybody_else_hate_their_11_meetings/). We believe it's better to address issues and provide feedback as they arise. + +If you need to discuss something with us, simply book a time on the founder or team lead's calendar. **We're always available to chat.** + +✅ Do: +- Schedule check-ins as soon as you need them +- Provide honest feedback and criticism (we appreciate it!) + +❌ Don't: +- Wait for a scheduled one-on-one to raise issues +- Ask for confirmation before scheduling a check-in + +### Exceptions + +If you'd like to establish regular check-ins, please let us know and we're very happy to set one up. \ No newline at end of file diff --git a/handbook/hr/_meta.ts b/handbook/hr/_meta.ts new file mode 100644 index 000000000..1797e8a7e --- /dev/null +++ b/handbook/hr/_meta.ts @@ -0,0 +1,22 @@ +import type { MetaRecord } from "nextra"; + +/** + * type MetaRecordValue = + * | TitleSchema + * | PageItemSchema + * | SeparatorSchema + * | MenuSchema + * + * type MetaRecord = Record + **/ +const meta: MetaRecord = { + leave: "Time off", + "side-gigs": "Side gigs", + spending: "Spending", + retreats: "Team retreats", + travel: "Travel", + progression: "Progression", + "1-on-1s": "1-on-1s", +}; + +export default meta; diff --git a/handbook/hr/interviewing.mdx b/handbook/hr/interviewing.mdx new file mode 100644 index 000000000..742dc5c94 --- /dev/null +++ b/handbook/hr/interviewing.mdx @@ -0,0 +1,51 @@ +--- +title: "Interviewing" +description: "How to interview and hire outliers." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Interviewing + +Our talent pipeline is an organizational moat. This guide walks you through our interviewing process. + +### Process + +Menlo's interview process is designed to be self-serve. + +1. **Application**: Candidates apply through our [careers page](https://homebrew.bamboohr.com/careers). We use a combination of AI and human review to shortlist candidates. +2. **Initial Screening**: Shortlisted candidates are invited to a 30-minute initial screening, usually with HR/founder. +3. **2-3 Interviews**: Candidates are interviewed by 2-3 team members. Each interview is 30-45 minutes long. +4. **Founder interview**: The final interview is with one of the founders. This is a 30-minute interview. +5. **Deliberation**: Candidates are evaluated based on their interviews and portfolio. We aim to make a decision within 1 week. + +We aim to be data-driven, and each open role is tracked in our ATS (BambooHR). We use this data to improve our hiring process. + +> Historically, our acceptance rate has been less than 1% of all applications. For direct referrals, this rate is higher at >10%. + +### Preparing for Interviews + +To start interviewing, please follow these steps: + +- [ ] Indicate your interest in helping with interviews to HR. +- [ ] Shadow existing interviews (2-3) to understand our process and ask questions. +- [ ] Create a [Google Appointments link](https://workspace.google.com/intl/en_sg/resources/appointment-scheduling/) for your interviews. Make sure to set a default Google Hangouts link. Share the link with HR. +- [ ] New candidates will automatically schedule interviews with you using the Google Appointments link. +- [ ] If you have an upcoming interview, review their resume and prepare thoughtful questions. +- [ ] Input **detailed evaluations in BambooHR ATS** after each interview. + +### Evaluation + +We do not use a scoring system for interviews and prefer to encourage natural conversation. + +However, if you do need an evaluation template, you can use the following: + +| Criteria | Description | Response | Notes | +|--------------|----------------------------------------|--------------|--------------------------------------------| +| Technical Skills | Proficiency in relevant technical areas (AI, robotics, programming, etc.) indicated in the resume ||| +| Fundamentals | Understanding of core concepts in the candidate's field of expertise (math, statistics, ML, physics, etc.) | | | +| Problem-Solving Ability | Ability to approach and solve complex problems ||| +| Communication Skills | Clarity and effectiveness in communication ||| +| Cultural Fit | Alignment with company [values](/handbook/philosophy/humanity) and [culture](/handbook/who/curiosity) ||| +| Overall Impression | General impression of the candidate's suitability for the role ||| \ No newline at end of file diff --git a/handbook/hr/leave.mdx b/handbook/hr/leave.mdx new file mode 100644 index 000000000..d46dbe528 --- /dev/null +++ b/handbook/hr/leave.mdx @@ -0,0 +1,28 @@ +--- +title: "Time Off" +description: "Vacation and unplanned leave policy." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Time Off + +We offer 14 base vacation days, unlimited sick leave, and additional public holidays based on your respective region. + +### Planning Leave + +1. Submit the days in BambooHR at least 1-2 weeks in advance +2. Inform your team as early as possible + +### Public Holidays + +We observe public holidays in our respective countries of residence. You do not need to use vacation days. + +### Illness & Unplanned Leave + +Please submit all sick leave requests in BambooHR with a medical certificate (when applicable). For sick leave longer than 1 week, please inform HR and your team. + +### Parental + +We offer parental leave for eligible staff. Please inform HR to coordinate parental leave. diff --git a/handbook/hr/progression.mdx b/handbook/hr/progression.mdx new file mode 100644 index 000000000..ae76359fa --- /dev/null +++ b/handbook/hr/progression.mdx @@ -0,0 +1,25 @@ +--- +title: "One on Ones" +description: "One on Ones." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Career Progression + +### Promotions + +We don't believe in titles. We believe in fair compensation and fast progression. + +> Previously, we have been known to organically promote team members 2x within 6 months of joining. + +### Perks + +- Your contributions are Open Source and public +- Speaking opportunities at conferences (we get invited often) +- Direct access to a large network of advisors +- No shortage of hard problems (you don't need to "prove" yourself before working on something interesting) +- Visibility across our hardware, software, and research projects +- Real, blunt feedback, at scale (our users are not shy!) +- Hard, tough, evergreen problems diff --git a/handbook/hr/retreats.mdx b/handbook/hr/retreats.mdx new file mode 100644 index 000000000..9b3692486 --- /dev/null +++ b/handbook/hr/retreats.mdx @@ -0,0 +1,20 @@ +--- +title: "Retreats" +description: "Annual Team Retreat." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Retreats + +We host an annual team retreat to bring the team together, bond, and plan for the year ahead. + +Previous retreats have been held in: +- 2023 (8 people): Ho Chi Minh City, Vietnam +- 2024 (16 people): Singapore +- 2025: TBA! + +## Meetups + +We encourage team members to meet up in person whenever possible. Remote work can get lonely, and we offer a small budget for regional get-togethers. \ No newline at end of file diff --git a/handbook/hr/side-gigs.mdx b/handbook/hr/side-gigs.mdx new file mode 100644 index 000000000..6bc83245f --- /dev/null +++ b/handbook/hr/side-gigs.mdx @@ -0,0 +1,31 @@ +--- +title: "Side Gigs" +description: "Best practices around external engagements." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Side Gigs + +We have a permissive policy regarding side gigs, similar to [Posthog's](https://posthog.com/handbook/people/side-gigs). + +However, our main ask is for Menlo to be your "main gig", as you will be taking a crucial role in success/failure of Menlo. Manage your time in a way that is fair to the company and your colleagues. + +At the end of the day, you all own (or will own) shares of the company. Handle company IP as you would your own property. + +### Declaration + +**For work in related industries, we do ask for an upfront declaration**, so that we can clear potential conflicts of interest. + +Please fill out the following form and submit it to: `hr@menlo.ai` + +| Dates | Organization | Nature of Work | Hours/week | +|-------------|--------------|----------------|------------| +| | | | | +| | | | | +| | | | | + +### A Note on IP + +Startups & careers die because of IP disputes from moonlighting employees. Please respect all party's IP - never intermingle assets (like laptops and logins) between engagements. \ No newline at end of file diff --git a/handbook/hr/spending.mdx b/handbook/hr/spending.mdx new file mode 100644 index 000000000..2d8629729 --- /dev/null +++ b/handbook/hr/spending.mdx @@ -0,0 +1,40 @@ +--- +title: "Spending" +description: "Spending and reimbursement policy." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Spending + +We are incredibly frugal and intend to be around in 50 years. However, we avoid being "penny-wise & pound-foolish" and spend when it matters. + +### Expenses + +#### Software + +For software subscriptions and other expenses incurred as a part of [benefits](compensation#benefits), please save receipts and submit it as a reimbursement [request](#reimbursements). + +#### Large Purchases + +For larger purchases like equipment, please first submit a purchase request through `#admin-requests` in Discord. + +We can directly order for you or reimburse you for the purchase. + +#### Incidentals + +We don't have a policy for incidentals. We trust you to make the right decisions, while keeping in mind that we are a startup and every dollar counts. + +### Reimbursements + +Reimbursements are processed at the end of every month with payroll. + +Email all receipts (required) & the following form to `finance@menlo.ai`: + +| Date | Description | Amount | Currency | Exchange Rate | Total (USD) | +|------------|-------------|--------|----------|---------------|-------------| +| | | | | | | +| | | | | | | +| | | | | | | +| | | | | Grand Total | | \ No newline at end of file diff --git a/handbook/hr/travel.mdx b/handbook/hr/travel.mdx new file mode 100644 index 000000000..a242c41ae --- /dev/null +++ b/handbook/hr/travel.mdx @@ -0,0 +1,23 @@ +--- +title: "Travel" +description: "Travel policy." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Travel + +We encourage team members to represent Menlo at conferences and travel for in-person alignment + +For all work travel, we ask that you get approval from HR before confirming your trip & booking flights/hotels. + +### Bookings + +We prefer to directly book flights & hotels on your behalf, through our travel portals. + +If you need to arrange travel by yourself, please obtain a travel budget first. Save all receipts for reimbursement. + +### Per Diem + +Depending on the location, we provide a USD$20 per diem for meals and incidentals. This is incrementable based on the location. \ No newline at end of file diff --git a/handbook/index.mdx b/handbook/index.mdx new file mode 100644 index 000000000..f628555c0 --- /dev/null +++ b/handbook/index.mdx @@ -0,0 +1,51 @@ +--- +title: "Menlo Team Handbook" +description: "Menlo advances humanity through generally intelligent exoskeletons and robots." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Menlo Handbook + +> Menlo's Handbook is inspired by [Posthog](https://posthog.com/handbook) and [Gitlab](https://handbook.gitlab.com/). +> Thank you for showing us the way 🙏 + +### Welcome! + +This handbook explains how [Menlo Research](https://menlo.ai) works, and is public. + +Menlo's Handbook is a [living document](https://en.wikipedia.org/wiki/Living_document), as Menlo is constantly evolving. + + + +### Chapter 1: Why does Menlo exist? + +- [What problem are we solving?](/handbook/why/problem) +- [Who we are building for](/handbook/why/icp) +- [Investors](/handbook/why/ownership) + +### Chapter 2: How we make money + +- [How we make money](/handbook/money/how) +- [What is our moat](/handbook/money/moat) + +### Chapter 3: Who we hire + +- [The Fast and the Curious](/handbook/who/curiosity) +- [Underdogs Welcome](/handbook/who/underdogs) +- [dy/dx > y-intercept](/handbook/who/dydx) + +### Chapter 4: How we work + +- [Remote-first](/handbook/how/remote) +- [Open-source](/handbook/how/open-source) +- [How we coordinate](/handbook/how/tools) +- [Sprints](/handbook/how/sprints) + +### Chapter 5: Menlo's Philosophy + +- [Lateral Thinking using WIthered Technology](/handbook/philosophy/lateral) +- [Humanity-aligned](/handbook/philosophy/humanity) + + diff --git a/handbook/lifecycle/_meta.ts b/handbook/lifecycle/_meta.ts new file mode 100644 index 000000000..2dea45919 --- /dev/null +++ b/handbook/lifecycle/_meta.ts @@ -0,0 +1,18 @@ +import type { MetaRecord } from "nextra"; + +/** + * type MetaRecordValue = + * | TitleSchema + * | PageItemSchema + * | SeparatorSchema + * | MenuSchema + * + * type MetaRecord = Record + **/ +const meta: MetaRecord = { + interviewing: "Interviewing", + onboarding: "Onboarding", + offboarding: "Offboarding", +}; + +export default meta; diff --git a/handbook/lifecycle/interviewing.mdx b/handbook/lifecycle/interviewing.mdx new file mode 100644 index 000000000..bf52ec984 --- /dev/null +++ b/handbook/lifecycle/interviewing.mdx @@ -0,0 +1,4 @@ +--- +title: Interviewing at Menlo +asIndexPage: true +--- \ No newline at end of file diff --git a/handbook/lifecycle/offboarding.mdx b/handbook/lifecycle/offboarding.mdx new file mode 100644 index 000000000..80b97f54c --- /dev/null +++ b/handbook/lifecycle/offboarding.mdx @@ -0,0 +1,31 @@ +--- +title: "Offboarding from Menlo" +description: "Offboarding Checklist." +asIndexPage: true +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Offboarding + +We are grateful for the time you spent with us. In many cases, you have moved on to start your own companies or to pursue your life's work. We'll be cheering you on from the sidelines and hope you remain part of the Menlo community. + +To ensure a seamless transition, we've outlined our offboarding process below. + +### Notice Period + +For voluntary departures past the probation period, we ask for 45 days notice both ways. This is to ensure a smooth transition for the team. We understand that this may not always be possible and will work with you to find a solution. + +### Final Pay + +Final pay & reimbursements will be processed at the end of the month with regular payroll. Unused vacations, equipment, and other considerations will also be netted in the final pay. + +In terms of ESOP, we understand that most people are not in a position to exercise their options within a 90 day period. As a gesture of goodwill, we often grant a lengthy exercise period for good leavers. This is at the discretion of the board and is not guaranteed. + +### Checklist + +- Arrange to return equipment. If you wish to keep your equipment at a discounted rate, please inform HR. +- Assign all ongoing projects & Github issues to a team member. +- Optional: good leavers may request a recommendation letter from HR. +- Optional: request an exit interview to provide feedback on your experience at Menlo. \ No newline at end of file diff --git a/handbook/lifecycle/onboarding.mdx b/handbook/lifecycle/onboarding.mdx new file mode 100644 index 000000000..a777a069b --- /dev/null +++ b/handbook/lifecycle/onboarding.mdx @@ -0,0 +1,78 @@ +--- +title: "Onboarding to Menlo" +description: "Onboarding Checklist for New Hires." +asIndexPage: true +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +## Onboarding + +Welcome to Menlo! We are excited to have you join our team. This guide walks you through the onboarding process. + +> You will receive an onboarding invitation morning of your first day. Prior to the scheduled onboarding call, please send your Github & Discord handles to `hr@menlo.ai`. + +### Expectations + +| Expectation | Description | +|-------------|-------------| +| **Take Initiative** | Take ownership of an area. If you see a problem, take it and own it to completion. Your work will often not be defined. Take the initiative to figure out what needs to be done, seek clarification, and then communicate what your plan to the team. | +| **Bias to Action** | There are many problems to solve. Don't ask for permission or try to build consensus - just take action. After 2-3 months, you should be able to show clear results having turned around a problem-filled area. | +| **Communication** | Clear and timely communication is key. If unsure, ask questions. We are a global team and respect is paramount. Disrespectful behavior is not tolerated. Focus on problem-solving, not personal attacks. Assume Hanlon’s Razor: “Never attribute to malice that which is adequately explained by lack of ~~stupidity~~ communication or ambiguity.” | +| **Mastery** | In this frontier industry, expertise comes from doing. Own your area and build mastery. | + +For more details, see our guides on [remote work](/handbook/how/remote). + +### Code of Conduct + +- **Availability and Communication**: Ensure you are available and engaged during designated work hours and scheduled meetings. +- **Work Environment**: Strive to create a quiet and distraction-free workspace whenever possible, especially on video calls. +- **Video Participation**: Video participation is expected unless there are exceptional circumstances. +- **Dress Code**: Casual attire is perfectly acceptable for meetings, but please exercise good judgment (e.g. no pajamas). +- **Vacations:** Communicate leave at least 2 weeks (1 sprint) in advance via Bamboo. +- **Emergency Leave:** Please inform Daniel, Nicole and HR in your #hr-channel if you require emergency leave. +- **Side Gigs Policy**: See [side-gigs](side-gigs). Please consult with HR on engagements with potential legal & IP implications. +- **Sexual harassment:** We have a zero tolerance policy against behavior of a sexual nature that could reasonably be expected to cause offense or humiliation, e.g. verbal, nonverbal, or physical conduct, via written and electronic communications. + +### Tools + +As much as possible, we build-in-public and use the following tools to asynchronously collaborate: + +- [Github](https://github.com/menloresearch) +- [Menlo Discord](https://discord.gg/VSbRN3vwCD) +- [Google Workspace](https://workspace.google.com) +- [Hugging Face](https://huggingface.co/menloresearch) +- Password Manager: You will be invited +- AI Tools and API keys: Coding with AI is heavily encouraged + +### Checklists + +#### Day 1 + +- Sign all HR documents. +- Download and access all tools. +- Check calendar invites: daily standups and TGIF. +- Introduce yourself in the [`#welcome`](https://discord.gg/VSbRN3vwCD) Discord channel. +- Set up your [BambooHR](https://homebrew.bamboohr.com/home) account. +- Set up VPN. Search `VPN access instructions` in Discord for the latest instructions. +- Check out the current sprint in [Github](https://github.com/orgs/menloresearch/projects/5) +- Ask questions in your private `#hr-NAME` channel. + +
+Import **Who's out** (on leave) calendar from BambooHR + +- Go to https://homebrew.bamboohr.com/calendar. Login if needed. +- Click on the gear icon, select **iCal Feeds...** +- Select **Create Calendar Feed** under **Who's Out**. Copy the generated link. +- In Google Calendar, you can import the new calendar from URL. + +
+ +#### Week 1 + +- Post daily updates in the [`#daily-updates`](https://discord.gg/AxypHJRQxd) channel prior to standup. +- Review this [Menlo Handbook](https://menlo.ai/handbook). +- Push 1 PR into this Handbook. This a living document! +- Disclose side gigs with potential legal & IP implications to HR. +- Attend TGIF demos on Friday afternoon (6PM GMT+8). diff --git a/handbook/money/_meta.ts b/handbook/money/_meta.ts new file mode 100644 index 000000000..0400e8080 --- /dev/null +++ b/handbook/money/_meta.ts @@ -0,0 +1,17 @@ +import type { MetaRecord } from "nextra"; + +/** + * type MetaRecordValue = + * | TitleSchema + * | PageItemSchema + * | SeparatorSchema + * | MenuSchema + * + * type MetaRecord = Record + **/ +const meta: MetaRecord = { + how: "How we make money", + moat: "What is our moat", +}; + +export default meta; diff --git a/handbook/money/how.mdx b/handbook/money/how.mdx new file mode 100644 index 000000000..ef7e8fe2d --- /dev/null +++ b/handbook/money/how.mdx @@ -0,0 +1,63 @@ +# How we make money + +> In a great market — a market with lots of real potential customers — the market pulls product out of the startup. +> +> - When a great team meets a lousy market, market wins. +> - When a lousy team meets a great market, market wins. +> - When a great team meets a great market, something special happens. +> +> — Marc Andreessen + +## Our Markets + +We focus on markets where these breakthroughs are just beginning: + +| Market | 2025 | 2032 | Growth | +|--------|------|------|---------| +| AI Agents | $3.7B | $104B | 44.9% | +| Edge AI Hardware | $27B | $270B | 33.3% | +| Datacenter AI Hardware[^3] | $142B | $837B | 34.3% | +| GPU Cloud | $6B | $74B | >35% | +| Hyperscaler [^5] | $231.2B | $2.1T | 37.8% | +| Generative AI | $40B | $1.3T | 42% | +| Robotics | $90B | $350B | 15.2% | + +These markets represent massive potential. Even a small slice—just 0.01%—would mean $213.4M in revenue by 2032. + +But the real opportunity is in creating the value. + +### Value Creation vs Value Capture + +> "A platform is when the economic value of everybody that uses it, exceeds the value of the company that creates it. Then it's a platform." — Bill Gates + +We build for creating value: +- Create massive value through open source +- Grow the entire industry +- Capture a small percentage of the expanded market + +This creates a virtuous cycle: +1. Open source drives adoption +2. Adoption expands the market +3. Market expansion increases our opportunity +4. Small percentage of large market = significant value + +## Being Frugal + +Success equation: Revenue minus Costs. We're good at the second part. + +Constraints breed innovation: +- Resourcefulness over resources +- Creativity through limitations +- Solutions without spending + +Menlo started as an open source project, with very little money. This has shaped our DNA: +- Choosing essential tools (e.g. Discord over Slack) +- Growing at $0 CAC without ads +- Building by creating value, not burning money + +The foundation of our perspective is [Lateral Thinking](/handbook/philosophy/lateral). + +## Sources + +[^3]: [GlobalNewsWire: AI Server Market](https://www.globenewswire.com/news-release/2025/01/13/3008197/28124/en/AI-Server-Market-Global-Outlook-to-2030-by-Processor-Type-Function-Form-Factor-and-Cooling-Technology.html) +[^5]: [Fortune Business Insights: Hyperscaler Market](https://www.fortunebusinessinsights.com/hyperscale-cloud-market-107832) \ No newline at end of file diff --git a/handbook/money/moat.mdx b/handbook/money/moat.mdx new file mode 100644 index 000000000..40025441d --- /dev/null +++ b/handbook/money/moat.mdx @@ -0,0 +1,16 @@ +## What is our moat? + +We fundamentally believe that our moat is our team's ability to continually innovate: + +- Culture of curiosity +- Inventing new products +- Recovering from failure +- Attracting next generation of talent + +### Inspiration + +> In the face of disruptive technologies, moats created by closed source are temporary. Even OpenAI’s closed source approach can’t prevent others from catching up. +> +> So we anchor our value in our team — our colleagues grow through this process, accumulate know-how, and form an organization and culture capable of innovation. That’s our moat. +> +> Liang Wenfeng, Deepseek \ No newline at end of file diff --git a/handbook/philosophy/_meta.ts b/handbook/philosophy/_meta.ts new file mode 100644 index 000000000..4a07892f9 --- /dev/null +++ b/handbook/philosophy/_meta.ts @@ -0,0 +1,18 @@ +import type { MetaRecord } from "nextra"; + +/** + * type MetaRecordValue = + * | TitleSchema + * | PageItemSchema + * | SeparatorSchema + * | MenuSchema + * + * type MetaRecord = Record + **/ +const meta: MetaRecord = { + humanity: "Humanity-aligned", + lateral: "Lateral Thinking using Withered Technology", + optimism: "Perpetual Optimism is a Force Multiplier", +}; + +export default meta; diff --git a/handbook/philosophy/humanity.mdx b/handbook/philosophy/humanity.mdx new file mode 100644 index 000000000..30a3a1561 --- /dev/null +++ b/handbook/philosophy/humanity.mdx @@ -0,0 +1,69 @@ +--- +title: "Humanity-aligned" +description: "Menlo exists because technology lets humanity work as one." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; +import Image from 'next/image'; + +# Humanity-aligned + +
+ +Our Blessed Kingdom + +> "The imagined community of the nation is always limited and sovereign, yet human connections and cooperation stretch far beyond borders." — Benedict Anderson + +## Why this matters + +- AI is geopolitical. Nation-states compete to control it +- We are concerned about those using AI to stoke division, profit from lies, and spur conflict +- Some of us come from places where war isn't distant—it's family history +- Technology should unite, not divide + +## Who we are + +- Remote team across 7 countries +- Diverse backgrounds, united by mission +- Many of us are [third culture kids](https://en.wikipedia.org/wiki/Third_culture_kid)—growing up between worlds +- We often find ourselves misunderstood: an Asian-majority team, English-speaking, influenced by global philosophies +- Crossroad cultures shape us: + - Turkiye: Europe, Asia, Middle East converge + - Singapore: Trade hub bridging worlds +- We respect each other's cultures and build on shared values + +## Menlo's stance + +- Humanity first. We build for people, not governments or factions +- AI should enable: + - Shared prosperity + - Universal education + - Peaceful collaboration +- Technology **must** empower humanity to do more—together + +## The bigger picture + +- Human history is one of scaling cooperation: + - Small-scale [kin groups](https://www.sciencedirect.com/science/article/pii/S0960982219303343) → diverse political formations → [modern nation-states](https://en.wikipedia.org/wiki/Westphalian_system) → global networks + - Empires rose and fell. Nationalism united and divided. Globalization connected and excluded +- History doesn't progress. It moves—messy, cyclical, and full of contradiction +- Technology changes the terrain: + - Like ant colonies forming complex systems from simple interactions, humans have always built networks beyond central control + - Complexity emerges from countless small decisions—but unlike ants, we carry ideologies, ambitions, and fears +- AI is another fork in the road. It can reinforce old hierarchies or dismantle them. It can be used to surveil or to liberate + +## Why we exist + +- 30 people, from different countries, met online to build together +- The internet enables connections that were impossible a generation ago +- Ideas cross borders: an anthropologist in Turkiye collaborates with a roboticist in Saigon +- Menlo exists because technology lets humanity work as one + +## Our vision + +- AI can accelerate global coordination and shared progress +- Our goal: help humanity align, collaborate, and solve collective challenges +- Success = contributing to humanity's long arc toward unity + +If our work helps the world coordinate better—even slightly—we've done something that matters diff --git a/handbook/philosophy/lateral.mdx b/handbook/philosophy/lateral.mdx new file mode 100644 index 000000000..e5af8ed58 --- /dev/null +++ b/handbook/philosophy/lateral.mdx @@ -0,0 +1,50 @@ +--- +title: "Lateral Thinking using Withered Technology" +description: "We use Withered Technology to build lateral thinking tools." +--- + +import Youtube from '../../../components/youtube' + +# Lateral Thinking using Withered Technology + +
+ + + +> "You're better off picking a cheap technology ('withered') and using it in a new way ('lateral') rather than going for the predictable, cutting-edge next step." — [Nintendo's Philosophy](https://medium.com/@adamagb/nintendo-s-little-known-product-philosophy-lateral-thinking-with-withered-technology-bac7257d8f4) + +## Taking the long view + +- AI is in a rapid innovation phase +- Staying grounded is essential as technologies shift and new tools emerge +- We focus on what endures +- Shiny objects can distract, we prioritize lasting value over hype +- We aim to be relevant in 10 years, long-term thinking guides what we build and how we invest + +## Lateral thinking with withered technology + +- Solve real problems at affordable prices +- Constraints drive creativity +- [Frugality](/handbook/money/how#frugality) is a strategy +- Use validated, abundant, and well-understood tech + - We ship hardware with default A6000s + - Prioritize cost-effective materials without sacrificing quality +- Optimize for accessibility over perfection + +
+ +## Why we do this + +- Resources are limited, but creativity isn't +- Smart choices let us do more with less +- Frugality enables longevity +- We build for people, not for accolades + +## How we operate + +- Fail cheaply +- Launch early +- Iterate often +- Lower experimentation costs +- Prioritize global accessibility through cost-efficiency +- Focus on essential product features \ No newline at end of file diff --git a/handbook/philosophy/optimism.mdx b/handbook/philosophy/optimism.mdx new file mode 100644 index 000000000..b0c33d93a --- /dev/null +++ b/handbook/philosophy/optimism.mdx @@ -0,0 +1,42 @@ +--- +title: "Perpetual Optimism is a Force Multiplier" +description: "We believe in perpetual optimism." +--- + +import Youtube from '../../../components/youtube' + +# Perpetual Optimism is a Force Multiplier + +
+ + + +> "Success consists of going from failure to failure without loss of enthusiasm." — Winston Churchill + +In 1903, [we barely left the ground](https://en.wikipedia.org/wiki/Wright_Flyer). By 1969, [we stood on the moon](https://en.wikipedia.org/wiki/Apollo_11). What once seemed impossible became reality through persistence and optimism. + +## Augmenting Humanity + +- We reject AI doomerism. Focus on possibilities, not fear +- Children represent our hope. We build for their future +- Humanity progresses faster than it feels +- AI is a tool—like electricity or the telephone. It's not the first revolution, nor the last +- History shows resilience. We adapt, mitigate risks, and move forward +- Airplanes once terrified—yet they helped humanity reach the moon and connect the world + +## AI Safety + +- Safety is non-negotiable. Protecting people is the baseline + - AI safety == human safety. If we haven’t solved human safety, we haven’t solved AI safety. + - AI alignment == human alignment. Misaligned societies can’t build aligned systems. +- AI safety requires human alignment first +- Fear and progress must be balanced—panic stalls; awareness guides +- Building for our kids ensures safety is built-in, purpose drives caution +- Airplanes once terrified—yet they helped humanity reach the moon and connect the world + +## Why we believe in optimism + +- Optimism drives solutions; fear paralyzes +- Hope fuels persistence. Failures aren't endpoints +- Every breakthrough began as a dream. We build toward better because we believe in it +- Perpetual optimism multiplies effort and impact diff --git a/handbook/sell/_meta.ts b/handbook/sell/_meta.ts new file mode 100644 index 000000000..f7af74323 --- /dev/null +++ b/handbook/sell/_meta.ts @@ -0,0 +1,16 @@ +import type { MetaRecord } from "nextra"; + +/** + * type MetaRecordValue = + * | TitleSchema + * | PageItemSchema + * | SeparatorSchema + * | MenuSchema + * + * type MetaRecord = Record + **/ +const meta: MetaRecord = { + marketing: "Marketing" +}; + +export default meta; diff --git a/handbook/sell/marketing.mdx b/handbook/sell/marketing.mdx new file mode 100644 index 000000000..f419618da --- /dev/null +++ b/handbook/sell/marketing.mdx @@ -0,0 +1,98 @@ +--- +title: "Marketing" +description: "How we structure marketing to drive revenue and growth" +asIndexPage: true +--- + +import { Steps } from "nextra/components"; +import Youtube from '../../../components/youtube'; + +# Marketing + +> "Marketing is about values." - Steve Jobs + +
+ + +Without a strategy, marketing is: +- throwing social media posts with reach anxiety +- starting podcasts that no one listens +- writing newsletter that even team members don't read + +Marketing is telling your own words in some channels for a purpose. Without a purpose, it's just noise - like how some do. + +Before starting we should align on some terms: + +- **Framework**: The blueprint that organizes our marketing efforts +- **Purpose**: The fundamental reason behind our marketing activities +- **Campaign**: Marketing actions +- **Goal**: The specific, measurable result we aim to achieve through our marketing activities +- **Brief**: The document outlining how we're executing a campaign + +## Framework(s) + +Marketings looks like art, must be managed like math. At Menlo, we follow some frameworks for alignment. + +Our marketing efforts consist of 3 purposes and each marketing action must target at least one: + +1. Grow the market +2. Increase the market share +3. Capture market share in a more efficient way + +Each purpose requires campaigns with clear goals. Goal types: + +- KPI Goals +- Project & Campaign Goals +- Experiment Goals +- Hiring Goals + +Campaign executions must leave no questions, so each marketing campaign requires a brief format: + +- **Goals**: KPIs, timeline, relevant OKRs +- **Audience**: Who we're targeting +- **Creatives**: Messaging & creative assets +- **Channels**: Distribution +- **Ownership**: Who is involved + +## Positioning + +Marketing starts with positioning - we always think thorough where to sit in the market before new launches. + +No one cares about product functions, it's all about what you provide. If your positioning requires explanation, it isn't working. We never talk about what our product does until we've established what problem it eliminates. + +We start with a positioning: + +- What is our product/service/platform? + - In customer language, what is it? + - What pain point do we eliminate? + - What we improve? +- Who is this for? + - Who benefits most from this solution? + - What characteristics define this segment? +- Why is it better? + - What are the other players? + - How do we outperform alternatives? + - What makes us uniquely valuable here? + +## Big no's on marketing + +We're playing our game, not theirs. + +- Throwing out marketing activities to see what sticks +- Burning money at Ads +- Random posts +- Copying what others do +- Actions without planning or goals +- Prioritizing paid activities over organic +- Jumping on hypes over strategy + +## Big yes's on marketing + +- Growing together with others +- Playing our game in the highest level +- Listening selectively - Absorb market feedback, but filter it through strategy +- Adding value to what we're working on +- Repurposing content +- Being opinionated about the differentiation and why we're doing +- Understanding the technical aspects at a level that explains a child +- Being aware of the target audience and the messaging \ No newline at end of file diff --git a/handbook/team/index.mdx b/handbook/team/index.mdx new file mode 100644 index 000000000..f2e6fcc2d --- /dev/null +++ b/handbook/team/index.mdx @@ -0,0 +1,81 @@ +# Team Structure + +Menlo's organization is influenced by our open source origins: + +- Multiple products +- Owned by accountable teams +- You can join workstreams you're interested in if you can be accountable for results + +Menlo is currently 25 people (2 part-time). + +## Jan + +- https://jan.ai +- Sync: 10am GMT+8 on Mon, Wed + +| Team | Humans | Robots | +| -------------------- | ------------------- | ------ | +| Eng | Louis, Sang, Faisal | | +| QA + Release Manager | David | | +| Product | Ramon, Emre | | +| Community | | Janice | + +## Robots + +- Sync: 2pm at GMT+9 on Tues, Thurss + +| Team | Humans | Robots | +| -------------- | ----------------------------- | ------ | +| Cortex | Selim, Ramon, Thien, Akarshan | | +| Menlo Pi | Jasshan | | +| Robot Platform | Yuuki, Alex | | +| Locomotion | Bing Gwong | | +| Community | | Claire | + +## Research + +- https://menlo.ai/research +- Sync: 10am GMT+8 on Tues, Thurs + +| Team | Humans | Robots | +| -------- | -------------------------- | ------ | +| Robotics | Alan, Bach, Norapat, Thinh | | +| Speech | Jiaqi | | +| Agents | Rach, Lea | | + +## Infra + +- Sync: 2pm at GMT+8 on Mon, Wed + +### Menlo Hardware + +| Team | Humans | Robots | +| -------------- | ------ | ------ | +| Menlo Hardware | Doug | | +| store.menlo.ai | Emre | | + +### Menlo Cloud + +| Team | Humans | Robots | +| ----------- | ---------- | ------ | +| Menlo Cloud | Hien, Minh | | + +## Business Operations + +### BD & Marketing + +- Sync: 11am at GMT+8 on Friday + +| Team | Humans | Robots | +| ---------- | ------ | ------ | +| Developers | Ramon | | +| Marketing | Emre | | + +### Finance & HR + +- Sync: 2pm at GMT+8 on Friday + +| Team | Humans | Robots | +| ------- | --------------- | ------ | +| Finance | Yeowhua | | +| HR | Nicole, Yeowhua | | diff --git a/handbook/who/_meta.ts b/handbook/who/_meta.ts new file mode 100644 index 000000000..779ebb52b --- /dev/null +++ b/handbook/who/_meta.ts @@ -0,0 +1,20 @@ +import type { MetaRecord } from "nextra"; + +/** + * type MetaRecordValue = + * | TitleSchema + * | PageItemSchema + * | SeparatorSchema + * | MenuSchema + * + * type MetaRecord = Record + **/ +const meta: MetaRecord = { + curiosity: "The Fast and the Curious", + obsession: "Obsessed Outliers", + underdogs: "Underdogs Welcome", + dydx: "dy/dx > y-intercept", + team: "Menlo is a Pro Sports Team", +}; + +export default meta; diff --git a/handbook/who/curiosity.mdx b/handbook/who/curiosity.mdx new file mode 100644 index 000000000..4ba2a0a3b --- /dev/null +++ b/handbook/who/curiosity.mdx @@ -0,0 +1,28 @@ +--- +title: "The Fast and the Curious" +description: "We hire people who are both fast and curious." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +# The Fast and the Curious + +> "The only way to win is to learn faster than anyone else." — Eric Ries + +We hire people who are both fast and curious—those who move quickly, take action, and never stop learning. + +## Ship Fast + +- We launched a new product every two weeks—build, assess, and decide to kill or double down +- From a StableDiffusion app to R&D lab—we evolve fast +- Execution matters more than ideas +- The best people get things done, not just talk about it +- We look for individuals who are hungry—driven, proactive, and biased toward action + +## Stay Curious + +- Learning never stops. The best people continuously improve and adapt +- We believe if you know how to learn, you don't need a teacher, a degree, or a title +- We hire those with relentlessness—people who push themselves beyond comfort zones +- A year from now, their skill set will be different—evolved, expanded, and sharpened diff --git a/handbook/who/dydx.mdx b/handbook/who/dydx.mdx new file mode 100644 index 000000000..625a7c496 --- /dev/null +++ b/handbook/who/dydx.mdx @@ -0,0 +1,32 @@ +--- +title: "dy/dx > y-intercept" +description: "The rate of a function is more important than its starting point." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +# dy/dx > y-intercept + +> "A little bit of slope makes up for a lot of Y-intercept." — John Ousterhout + +The rate of a function is more important than its starting point. We value growth rate over initial advantage. + +## Why slope matters + +- Knowledge fades, but the ability to learn compounds +- A fast learner will outpace someone with more initial experience over time +- Slow, steady improvement outperforms quick starts with no growth + +## What it means day-to-day + +- Don't hesitate to try something new—even if you start clueless. Learning speed matters +- Mistakes are expected. Learning from them is required +- We'll invest in helping you grow, but the drive has to come from you +- Your trajectory is more important than where you begin + +## Why we believe in this + +- Building something lasting requires patience and commitment to improvement +- We're not interested in shortcuts. We value the work that compounds quietly until it becomes obvious +- If Menlo's greatest impact is helping people and ideas grow steadily over time—that's the kind of success we stand for \ No newline at end of file diff --git a/handbook/who/obsession.mdx b/handbook/who/obsession.mdx new file mode 100644 index 000000000..4870046f8 --- /dev/null +++ b/handbook/who/obsession.mdx @@ -0,0 +1,40 @@ +--- +title: "Obsession" +description: "We seek obsession." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +# Obsession + +> "If you want to build a ship, don't drum up the men to gather wood, divide the work, and give orders. Instead, teach them to yearn for the vast and endless sea." — Antoine de Saint-Exupéry + +We don't hire for skills alone. We hire for obsession. + +## Find the obsessed + +- Breakthroughs require long-term focus, not fleeting interest +- Failure isn't the end—just another step in relentless experimentation +- People who obsess push beyond limits others accept + +## We seek those already consumed + +- You're already working on the problem—because you can't not +- We don't assign you a job; we support your life's work +- Obsession isn't just personal—it becomes more powerful in a team +- Together, a group of obsessives becomes greater than the sum of its parts + +## The best hires share common traits + +- Desperation: Solving the problem feels like a need, not a choice +- Relentlessness: You try, fail, adapt—again and again +- Defiance: Others call it crazy; we call it genius + +## We're looking for the dreamers + +- That deep, persistent song you've been trying to sing? We hear it +- Maybe you've been mocked, dismissed, or misunderstood +- We seek those lonely, weird dreamers who refuse to give up + +Wherever you are in the world, if this feels like you—apply here \ No newline at end of file diff --git a/handbook/who/team.mdx b/handbook/who/team.mdx new file mode 100644 index 000000000..7eb6df4ed --- /dev/null +++ b/handbook/who/team.mdx @@ -0,0 +1,31 @@ +--- +title: "Menlo is a Sports Team" +description: "Our approach is super simple: Retain. Build trust. Win together." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +# Menlo is a Pro Sports Team + +> "First, you need to learn how to play. You need 2-3 years together to learn how to play with each other." — [Nikola Jokić](https://www.reddit.com/r/NBASpurs/comments/1cdscti/wise_words_from_jokic_first_you_need_to_learn_how/) + +Menlo is a sports team, not unlike a NBA team or a NFL team. We focus on putting the best players on the court, focusing on their 1% strengths, and building a team that can win together. + +## Team vs. Family + +We learn the best principles from [Netflix Culture Deck](https://www.slideshare.net/slideshow/culture-1798664/1798664): + +- We operate like a pro sports team +- There are limited spots on every team — every roster spot counts +- We hire, develop and cut smartly + +## Continuity + +However, we balance this with our belief in Continuity and Stability: + +- Teams with psychological safety take better, long-term risks +- Teams need 2–3 years to truly gel +- Continuity matters; balance change carefully +- Cohesive teams outperform constant reshuffles +- Time builds trust, speed, and better decisions \ No newline at end of file diff --git a/handbook/who/underdogs.mdx b/handbook/who/underdogs.mdx new file mode 100644 index 000000000..6d2cf5010 --- /dev/null +++ b/handbook/who/underdogs.mdx @@ -0,0 +1,39 @@ +--- +title: "Underdogs" +description: "We hire from unconventional backgrounds." +--- + +import { FaDiscord, FaMap } from "react-icons/fa"; +import { Steps } from "nextra/components"; + +# Underdogs Welcome + +> "I am, somehow, less interested in the weight and convolutions of Einstein's brain than in the near certainty that people of equal talent have lived and died in cotton fields and sweatshops." — Stephen Jay Gould + +We hire from unconventional backgrounds. + +## Opportunity isn't equal + +- Where you're born shapes your chances—but it shouldn't define them +- Talent is everywhere. Opportunity isn't +- We believe the internet has changed how we work and live together. Our team—spread across 10 cities worldwide—couldn't have existed just five years ago +- Fast connections (5G and beyond) mean geography no longer decides your future. We'll find you—wherever you are + +## We seek the overlooked + +- Lonely geniuses, relentless tinkerers, people with potential others missed +- We don't care where you went to school—or if you went at all +- We bet on people like startups: high risk, high potential +- Skills can be taught; drive cannot. We'll teach you to communicate and collaborate +- We trust you'll prove yourself through your work and integrity + +## Meaningful work, close to home + +- We create jobs that matter, in the places people call home +- If Menlo's greatest achievement is enabling people to build meaningful careers in their hometowns—that would be success worth celebrating + +## This is your shot + +- Underdogs, dreamers, the overlooked—this place is for you +- We don't just welcome you. We're looking for you +- Wherever you are in the world—apply here diff --git a/handbook/why/_meta.ts b/handbook/why/_meta.ts new file mode 100644 index 000000000..0cae0465b --- /dev/null +++ b/handbook/why/_meta.ts @@ -0,0 +1,26 @@ +import type { MetaRecord } from "nextra"; + +/** + * type MetaRecordValue = + * | TitleSchema + * | PageItemSchema + * | SeparatorSchema + * | MenuSchema + * + * type MetaRecord = Record + **/ +const meta: MetaRecord = { + problem: "What problem are we solving?", + timeline: { + title: "How we got here", + display: "hidden", + }, + icp: "Who we are building for", + happy: { + title: "How we make users happy", + display: "hidden", + }, + ownership: "Who owns Menlo?", +}; + +export default meta; diff --git a/handbook/why/happy.mdx b/handbook/why/happy.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/handbook/why/icp.mdx b/handbook/why/icp.mdx new file mode 100644 index 000000000..37e00727b --- /dev/null +++ b/handbook/why/icp.mdx @@ -0,0 +1,40 @@ +# Who are we building for? + +We focus on two types of customers: + +1. Hobbyists +2. Businesses with "must-have" use-cases + +## Hobbyists + +There are many hobbyists who tinker with Robotics and AI as passion projects. We build for this group because: + +- They actually use our tools +- They give us blunt feedback on how to improve + +We may not make money on directly from hobbyists. However, we are betting on the long-term, where hobbyists become organizational champions. + +If we can be the best tool for hobbyists, we will be the best tool for paying users. + +## "Must-have" use-cases + +We focus on "must-have" use-cases: + +- Nobody wants to do +- Too dangerous for humans to do +- or, can be done 10x cheaper/better/reliably by a robot + +We avoid: + +- "Nice-to-have" +- Corporate vanity use cases + +## Performance Art + +We may sometimes do "performance art". This is where we build something that is not profitable, but helps communicate our vision: + +- These is a marketing expense +- We should not mistake virality for [product-market fit](https://www.productplan.com/glossary/product-market-fit/) +- Should ideally be covered by grants or sponsorships + +Robotics is prone to hype and grandoise claims. We need to focus on creating real value for customers. \ No newline at end of file diff --git a/handbook/why/ownership.mdx b/handbook/why/ownership.mdx new file mode 100644 index 000000000..6d38cde4a --- /dev/null +++ b/handbook/why/ownership.mdx @@ -0,0 +1,21 @@ +# Who owns Menlo? + +Menlo is currently a bootstrapped company. + +## Employee-owned + +Every 6 months, Menlo distributes 1% of company equity among its team members: + +- Dec 2023: 1% distributed among 10 team members (1 part-time) +- June 2024: 1% distributed among 15 team members (4 part-time) +- Dec 2024: 1% distributed among 18 team members (5 part-time) + +Distributions are performance-based, and cover both full-time and part-time team members and open source contributors. + +## Advisors + +We allocated an additional 1% of the company for advisors. + +## Investors + +We are open to taking on strategic investors who can help us learn and improve as a team, and become a global company. \ No newline at end of file diff --git a/handbook/why/problem.mdx b/handbook/why/problem.mdx new file mode 100644 index 000000000..39ede466b --- /dev/null +++ b/handbook/why/problem.mdx @@ -0,0 +1,36 @@ +import Youtube from '../../../components/youtube' + +# What problem are we solving? + + +Current robots suck: +- **Dumb**: good at repetitive tasks, but can't adapt to new situations +- **Difficult**: needs to be programmed by experts +- **Expensive**: often more expensive than doing it manually (for most use-cases) +- **Non-autonomous**: doesn't work offline, as inference is not done onboard + +## Mission + +Menlo Research is focused on augmenting humanity with robots that are generally intelligent. + +## Approach + +We solve this incrementally. We productize sub-problems that can [solved now](https://www.nasa.gov/directorates/somd/space-communications-navigation-program/technology-readiness-levels/), that become key components of our long-term vision. + +- Running AI models on edge hardware ([Jan](/products/jan), [Cortex](/products/cortex)) +- Multimodal AI for robot-human interaction ([Ichigo](https://github.com/menloresearch/ichigo)) +- LLM Hardware +- Teleoperation tools & infra +- Simulation environments +- Affordable robots + +We earn the right to build our long-term vision by delivering value to users today. + +## Vision + +We envision an [optimistic future](https://www.youtube.com/watch?v=o48X3_XQ9to) where our children achieve what we dream of today, enabled by exoskeletons and helpful robots. + +In the long run, we see robots helping humanity progress into a [Type-1 civilization](https://en.wikipedia.org/wiki/Planetary_civilization) on the [Kardashev scale](https://en.wikipedia.org/wiki/Kardashev_scale), by [engineering Earth](https://youtu.be/xC2ccYpjPHE) and becoming a spacefaring civilization. + +
+ \ No newline at end of file diff --git a/handbook/why/timeline.mdx b/handbook/why/timeline.mdx new file mode 100644 index 000000000..eff55930e --- /dev/null +++ b/handbook/why/timeline.mdx @@ -0,0 +1,3 @@ +## How we got here + +(Coming soon) \ No newline at end of file diff --git a/website/astro.config.mjs b/website/astro.config.mjs index fe273b41a..da1d2f48b 100644 --- a/website/astro.config.mjs +++ b/website/astro.config.mjs @@ -5,12 +5,40 @@ import starlightThemeNext from 'starlight-theme-next' // import starlightThemeRapide from 'starlight-theme-rapide' import starlightSidebarTopics from 'starlight-sidebar-topics' import mermaid from 'astro-mermaid' +import { fileURLToPath } from 'url' +import path, { dirname } from 'path' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) // https://astro.build/config export default defineConfig({ // Deploy to the new v2 subdomain site: 'https://v2.jan.ai', - // No 'base' property is needed, as this will be deployed to the root of the subdomain. + vite: { + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + '@/components': path.resolve(__dirname, './src/components'), + '@/layouts': path.resolve(__dirname, './src/layouts'), + '@/assets': path.resolve(__dirname, './src/assets'), + '@/content': path.resolve(__dirname, './src/content'), + '@/styles': path.resolve(__dirname, './src/styles'), + '@/utils': path.resolve(__dirname, './src/utils'), + }, + }, + assetsInclude: [ + '**/*.jpg', + '**/*.jpeg', + '**/*.png', + '**/*.gif', + '**/*.svg', + '**/*.webp', + ], + optimizeDeps: { + exclude: ['@astrojs/starlight'], + }, + }, integrations: [ mermaid({ theme: 'default', @@ -18,6 +46,7 @@ export default defineConfig({ }), starlight({ title: '👋 Jan', + favicon: 'jan2.png', plugins: [ // starlightThemeRapide(), @@ -26,7 +55,7 @@ export default defineConfig({ [ { label: 'Jan Desktop', - link: '/', + link: '/jan/', icon: 'rocket', items: [ { @@ -110,25 +139,10 @@ export default defineConfig({ { label: 'Local Server', items: [ - { label: 'Introduction', link: '/local-server/' }, - { label: 'Server Setup', slug: 'local-server/api-server' }, { - label: 'Jan Data Folder', - slug: 'local-server/data-folder', - }, - { label: 'Server Settings', slug: 'local-server/settings' }, - { - label: 'Llama.cpp Server', - slug: 'local-server/llama-cpp', - }, - { - label: 'Server Troubleshooting', - slug: 'local-server/troubleshooting', - }, - { - label: 'Integrations', + label: 'All', collapsed: true, - autogenerate: { directory: 'local-server/integrations' }, + autogenerate: { directory: 'local-server' }, }, ], }, @@ -157,6 +171,89 @@ export default defineConfig({ icon: 'forward-slash', items: [{ label: 'Overview', slug: 'server' }], }, + { + label: 'Handbook', + link: '/handbook/', + icon: 'open-book', + items: [ + { label: 'Welcome', slug: 'handbook' }, + { + label: 'About Jan', + items: [ + { + label: 'Why does Jan Exist?', + collapsed: true, + autogenerate: { directory: 'handbook/why' }, + }, + { + label: 'How we make Money', + collapsed: true, + autogenerate: { directory: 'handbook/money' }, + }, + { + label: 'Who We Hire', + collapsed: true, + autogenerate: { directory: 'handbook/who' }, + }, + { + label: "Jan's Philosophies", + collapsed: true, + autogenerate: { directory: 'handbook/philosophy' }, + }, + { + label: 'Brand & Identity', + collapsed: true, + autogenerate: { directory: 'handbook/brand' }, + }, + ], + }, + { + label: 'How We Work', + items: [ + { + label: 'Team Roster', + collapsed: true, + autogenerate: { directory: 'handbook/team' }, + }, + { + label: "Jan's Culture", + collapsed: true, + autogenerate: { directory: 'handbook/culture' }, + }, + { + label: 'How We Build', + collapsed: true, + autogenerate: { directory: 'handbook/how' }, + }, + { + label: 'How We Sell', + collapsed: true, + autogenerate: { directory: 'handbook/sell' }, + }, + ], + }, + { + label: 'HR', + items: [ + { + label: 'HR Lifecycle', + collapsed: true, + autogenerate: { directory: 'handbook/lifecycle' }, + }, + { + label: 'HR Policies', + collapsed: true, + autogenerate: { directory: 'handbook/hr' }, + }, + { + label: 'Compensation', + collapsed: true, + autogenerate: { directory: 'handbook/comp' }, + }, + ], + }, + ], + }, ], { exclude: [ diff --git a/website/bun.lock b/website/bun.lock index 928056ce7..24b037fea 100644 --- a/website/bun.lock +++ b/website/bun.lock @@ -17,6 +17,7 @@ "starlight-theme-next": "^0.3.2", "starlight-theme-rapide": "^0.5.1", "starlight-videos": "^0.3.0", + "unist-util-visit": "^5.0.0", }, }, }, diff --git a/website/package.json b/website/package.json index 750705907..aa6f74799 100644 --- a/website/package.json +++ b/website/package.json @@ -22,7 +22,8 @@ "starlight-sidebar-topics": "^0.6.0", "starlight-theme-next": "^0.3.2", "starlight-theme-rapide": "^0.5.1", - "starlight-videos": "^0.3.0" + "starlight-videos": "^0.3.0", + "unist-util-visit": "^5.0.0" }, "packageManager": "yarn@1.22.22" } diff --git a/website/public/assets/images/homepage/app-frame-dark-fixed.webp b/website/public/assets/images/homepage/app-frame-dark-fixed.webp new file mode 100644 index 000000000..638f9347a Binary files /dev/null and b/website/public/assets/images/homepage/app-frame-dark-fixed.webp differ diff --git a/website/public/assets/images/homepage/app-frame-light-fixed.png b/website/public/assets/images/homepage/app-frame-light-fixed.png new file mode 100644 index 000000000..aff00d8ba Binary files /dev/null and b/website/public/assets/images/homepage/app-frame-light-fixed.png differ diff --git a/website/public/assets/images/homepage/app-frame-light-fixed.webp b/website/public/assets/images/homepage/app-frame-light-fixed.webp new file mode 100644 index 000000000..6db003e43 Binary files /dev/null and b/website/public/assets/images/homepage/app-frame-light-fixed.webp differ diff --git a/website/public/assets/images/homepage/assistant-dark.png b/website/public/assets/images/homepage/assistant-dark.png new file mode 100644 index 000000000..f7d737a51 Binary files /dev/null and b/website/public/assets/images/homepage/assistant-dark.png differ diff --git a/website/public/assets/images/homepage/assistant-light.png b/website/public/assets/images/homepage/assistant-light.png new file mode 100644 index 000000000..6d50e29d6 Binary files /dev/null and b/website/public/assets/images/homepage/assistant-light.png differ diff --git a/website/public/assets/images/homepage/extension-dark.png b/website/public/assets/images/homepage/extension-dark.png new file mode 100644 index 000000000..b85e16cf4 Binary files /dev/null and b/website/public/assets/images/homepage/extension-dark.png differ diff --git a/website/public/assets/images/homepage/extension-light.png b/website/public/assets/images/homepage/extension-light.png new file mode 100644 index 000000000..55677a494 Binary files /dev/null and b/website/public/assets/images/homepage/extension-light.png differ diff --git a/website/public/assets/images/homepage/features01.png b/website/public/assets/images/homepage/features01.png new file mode 100644 index 000000000..30174f13f Binary files /dev/null and b/website/public/assets/images/homepage/features01.png differ diff --git a/website/public/assets/images/homepage/features01.webp b/website/public/assets/images/homepage/features01.webp new file mode 100644 index 000000000..1b1979995 Binary files /dev/null and b/website/public/assets/images/homepage/features01.webp differ diff --git a/website/public/assets/images/homepage/features01dark.png b/website/public/assets/images/homepage/features01dark.png new file mode 100644 index 000000000..f556da320 Binary files /dev/null and b/website/public/assets/images/homepage/features01dark.png differ diff --git a/website/public/assets/images/homepage/features01dark.webp b/website/public/assets/images/homepage/features01dark.webp new file mode 100644 index 000000000..7d71cb531 Binary files /dev/null and b/website/public/assets/images/homepage/features01dark.webp differ diff --git a/website/public/assets/images/homepage/features02.png b/website/public/assets/images/homepage/features02.png new file mode 100644 index 000000000..56688c050 Binary files /dev/null and b/website/public/assets/images/homepage/features02.png differ diff --git a/website/public/assets/images/homepage/features02.webp b/website/public/assets/images/homepage/features02.webp new file mode 100644 index 000000000..eed502a14 Binary files /dev/null and b/website/public/assets/images/homepage/features02.webp differ diff --git a/website/public/assets/images/homepage/features02dark.png b/website/public/assets/images/homepage/features02dark.png new file mode 100644 index 000000000..92943878f Binary files /dev/null and b/website/public/assets/images/homepage/features02dark.png differ diff --git a/website/public/assets/images/homepage/features02dark.webp b/website/public/assets/images/homepage/features02dark.webp new file mode 100644 index 000000000..3f6bf854d Binary files /dev/null and b/website/public/assets/images/homepage/features02dark.webp differ diff --git a/website/public/assets/images/homepage/features03.png b/website/public/assets/images/homepage/features03.png new file mode 100644 index 000000000..290a8812c Binary files /dev/null and b/website/public/assets/images/homepage/features03.png differ diff --git a/website/public/assets/images/homepage/features03.webp b/website/public/assets/images/homepage/features03.webp new file mode 100644 index 000000000..a73500479 Binary files /dev/null and b/website/public/assets/images/homepage/features03.webp differ diff --git a/website/public/assets/images/homepage/features03dark.png b/website/public/assets/images/homepage/features03dark.png new file mode 100644 index 000000000..3afff9290 Binary files /dev/null and b/website/public/assets/images/homepage/features03dark.png differ diff --git a/website/public/assets/images/homepage/features03dark.webp b/website/public/assets/images/homepage/features03dark.webp new file mode 100644 index 000000000..a280eea49 Binary files /dev/null and b/website/public/assets/images/homepage/features03dark.webp differ diff --git a/website/public/assets/images/homepage/features04.png b/website/public/assets/images/homepage/features04.png new file mode 100644 index 000000000..b9e08f3a2 Binary files /dev/null and b/website/public/assets/images/homepage/features04.png differ diff --git a/website/public/assets/images/homepage/features04.webp b/website/public/assets/images/homepage/features04.webp new file mode 100644 index 000000000..e9ef1f132 Binary files /dev/null and b/website/public/assets/images/homepage/features04.webp differ diff --git a/website/public/assets/images/homepage/features04dark.png b/website/public/assets/images/homepage/features04dark.png new file mode 100644 index 000000000..997dd42ba Binary files /dev/null and b/website/public/assets/images/homepage/features04dark.png differ diff --git a/website/public/assets/images/homepage/features04dark.webp b/website/public/assets/images/homepage/features04dark.webp new file mode 100644 index 000000000..d4a8641a1 Binary files /dev/null and b/website/public/assets/images/homepage/features04dark.webp differ diff --git a/website/public/assets/images/homepage/features05.png b/website/public/assets/images/homepage/features05.png new file mode 100644 index 000000000..b60c65574 Binary files /dev/null and b/website/public/assets/images/homepage/features05.png differ diff --git a/website/public/assets/images/homepage/features05.webp b/website/public/assets/images/homepage/features05.webp new file mode 100644 index 000000000..6a6e57c6f Binary files /dev/null and b/website/public/assets/images/homepage/features05.webp differ diff --git a/website/public/assets/images/homepage/features05dark.png b/website/public/assets/images/homepage/features05dark.png new file mode 100644 index 000000000..a4bd8e05c Binary files /dev/null and b/website/public/assets/images/homepage/features05dark.png differ diff --git a/website/public/assets/images/homepage/features05dark.webp b/website/public/assets/images/homepage/features05dark.webp new file mode 100644 index 000000000..9ca8731a8 Binary files /dev/null and b/website/public/assets/images/homepage/features05dark.webp differ diff --git a/website/public/assets/images/homepage/glow.png b/website/public/assets/images/homepage/glow.png new file mode 100644 index 000000000..099422e51 Binary files /dev/null and b/website/public/assets/images/homepage/glow.png differ diff --git a/website/public/assets/images/homepage/icon.png b/website/public/assets/images/homepage/icon.png new file mode 100644 index 000000000..786eada6b Binary files /dev/null and b/website/public/assets/images/homepage/icon.png differ diff --git a/website/public/assets/images/homepage/lifehacker-dark.png b/website/public/assets/images/homepage/lifehacker-dark.png new file mode 100644 index 000000000..69f26b9d4 Binary files /dev/null and b/website/public/assets/images/homepage/lifehacker-dark.png differ diff --git a/website/public/assets/images/homepage/lifehacker-light.png b/website/public/assets/images/homepage/lifehacker-light.png new file mode 100644 index 000000000..a9b31c1ed Binary files /dev/null and b/website/public/assets/images/homepage/lifehacker-light.png differ diff --git a/website/public/assets/images/homepage/mac-system-black.svg b/website/public/assets/images/homepage/mac-system-black.svg new file mode 100644 index 000000000..0b866815d --- /dev/null +++ b/website/public/assets/images/homepage/mac-system-black.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website/public/assets/images/homepage/mac-system-white.svg b/website/public/assets/images/homepage/mac-system-white.svg new file mode 100644 index 000000000..4539db6eb --- /dev/null +++ b/website/public/assets/images/homepage/mac-system-white.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website/public/assets/images/homepage/mapbase-dark.png b/website/public/assets/images/homepage/mapbase-dark.png new file mode 100644 index 000000000..cecde27a8 Binary files /dev/null and b/website/public/assets/images/homepage/mapbase-dark.png differ diff --git a/website/public/assets/images/homepage/mapbase-dark.webp b/website/public/assets/images/homepage/mapbase-dark.webp new file mode 100644 index 000000000..b59026f51 Binary files /dev/null and b/website/public/assets/images/homepage/mapbase-dark.webp differ diff --git a/website/public/assets/images/homepage/mapbase-light.png b/website/public/assets/images/homepage/mapbase-light.png new file mode 100644 index 000000000..bd38d8a2b Binary files /dev/null and b/website/public/assets/images/homepage/mapbase-light.png differ diff --git a/website/public/assets/images/homepage/mapbase-light.webp b/website/public/assets/images/homepage/mapbase-light.webp new file mode 100644 index 000000000..413c98e84 Binary files /dev/null and b/website/public/assets/images/homepage/mapbase-light.webp differ diff --git a/website/scripts/fix-blog-images.js b/website/scripts/fix-blog-images.js new file mode 100644 index 000000000..041228975 --- /dev/null +++ b/website/scripts/fix-blog-images.js @@ -0,0 +1,140 @@ +#!/usr/bin/env node + +import fs from 'fs' +import path from 'path' +import { fileURLToPath } from 'url' +import { dirname } from 'path' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) + +const blogDir = path.join(__dirname, '..', 'src', 'content', 'blog') + +// Function to convert filename to a valid JavaScript variable name +function toVariableName(filename) { + // Remove extension and special characters, convert to camelCase + const base = path.basename(filename, path.extname(filename)) + let varName = base + .replace(/[-_\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : '')) + .replace(/[^a-zA-Z0-9]/g, '') + .replace(/^./, (c) => c.toLowerCase()) + + // If the variable name starts with a number, prefix with 'img' + if (/^[0-9]/.test(varName)) { + varName = 'img' + varName.charAt(0).toUpperCase() + varName.slice(1) + } + + return varName +} + +// Function to process a single MDX file +function processMDXFile(filePath) { + console.log(`Processing: ${filePath}`) + + let content = fs.readFileSync(filePath, 'utf-8') + + // Find all image references + const imageRegex = /!\[([^\]]*)\]\((\.\/_assets\/[^)]+)\)/g + const images = [] + let match + + while ((match = imageRegex.exec(content)) !== null) { + const altText = match[1] + const imagePath = match[2] + const filename = path.basename(imagePath) + const varName = toVariableName(filename) + 'Img' + + // Check if we already have this image + if (!images.find((img) => img.varName === varName)) { + images.push({ + varName, + path: imagePath, + altText, + originalMatch: match[0], + }) + } + } + + if (images.length === 0) { + console.log(` No images found in ${path.basename(filePath)}`) + return + } + + console.log(` Found ${images.length} images`) + + // Find where to insert imports (after existing imports or frontmatter) + const frontmatterEnd = content.indexOf('---', content.indexOf('---') + 3) + 3 + let importInsertPosition = frontmatterEnd + + // Check if there are already imports + const existingImportRegex = /^import\s+.*$/gm + const imports = content.match(existingImportRegex) + + if (imports && imports.length > 0) { + // Find the last import + const lastImport = imports[imports.length - 1] + importInsertPosition = content.indexOf(lastImport) + lastImport.length + } + + // Generate import statements + const importStatements = images + .map((img) => `import ${img.varName} from '${img.path}';`) + .join('\n') + + // Insert imports + if (imports && imports.length > 0) { + // Add to existing imports + content = + content.slice(0, importInsertPosition) + + '\n' + + importStatements + + content.slice(importInsertPosition) + } else { + // Add new import section after frontmatter + content = + content.slice(0, frontmatterEnd) + + '\n\n' + + importStatements + + '\n' + + content.slice(frontmatterEnd) + } + + // Replace all image references with JSX img tags + images.forEach((img) => { + // Create regex for this specific image + const specificImageRegex = new RegExp( + `!\\[([^\\]]*)\\]\\(${img.path.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\)`, + 'g' + ) + + content = content.replace(specificImageRegex, (match, altText) => { + return `${altText || img.altText}` + }) + }) + + // Write the updated content back + fs.writeFileSync(filePath, content) + console.log(` ✓ Updated ${path.basename(filePath)}`) +} + +// Process all MDX files in the blog directory +function processAllBlogPosts() { + const files = fs.readdirSync(blogDir) + const mdxFiles = files.filter((file) => file.endsWith('.mdx')) + + console.log(`Found ${mdxFiles.length} MDX files in blog directory\n`) + + mdxFiles.forEach((file) => { + const filePath = path.join(blogDir, file) + try { + processMDXFile(filePath) + } catch (error) { + console.error(`Error processing ${file}:`, error.message) + } + }) + + console.log('\n✨ All blog posts processed!') +} + +// Run the script +processAllBlogPosts() diff --git a/website/src/assets/blog/3090s.jpg b/website/src/assets/blog/3090s.jpg new file mode 100644 index 000000000..3a62b3f6f Binary files /dev/null and b/website/src/assets/blog/3090s.jpg differ diff --git a/website/src/assets/blog/4070s.jpg b/website/src/assets/blog/4070s.jpg new file mode 100644 index 000000000..3d8622347 Binary files /dev/null and b/website/src/assets/blog/4070s.jpg differ diff --git a/website/src/assets/blog/4090s.png b/website/src/assets/blog/4090s.png new file mode 100644 index 000000000..2c49a3248 Binary files /dev/null and b/website/src/assets/blog/4090s.png differ diff --git a/website/src/assets/blog/ai-locally-llama.cpp.jpg b/website/src/assets/blog/ai-locally-llama.cpp.jpg new file mode 100644 index 000000000..967b63bf7 Binary files /dev/null and b/website/src/assets/blog/ai-locally-llama.cpp.jpg differ diff --git a/website/src/assets/blog/catastrophic-demo.png b/website/src/assets/blog/catastrophic-demo.png new file mode 100644 index 000000000..7c869fc0e Binary files /dev/null and b/website/src/assets/blog/catastrophic-demo.png differ diff --git a/website/src/assets/blog/chat-with-docs-prompt.jpg b/website/src/assets/blog/chat-with-docs-prompt.jpg new file mode 100644 index 000000000..df47dd4ef Binary files /dev/null and b/website/src/assets/blog/chat-with-docs-prompt.jpg differ diff --git a/website/src/assets/blog/chat-with-your-docs-offline-ai.jpg b/website/src/assets/blog/chat-with-your-docs-offline-ai.jpg new file mode 100644 index 000000000..efcda0f07 Binary files /dev/null and b/website/src/assets/blog/chat-with-your-docs-offline-ai.jpg differ diff --git a/website/src/assets/blog/chat-with-your-docs2.jpg b/website/src/assets/blog/chat-with-your-docs2.jpg new file mode 100644 index 000000000..1577b3f5c Binary files /dev/null and b/website/src/assets/blog/chat-with-your-docs2.jpg differ diff --git a/website/src/assets/blog/deepseek-r1-locally-jan.jpg b/website/src/assets/blog/deepseek-r1-locally-jan.jpg new file mode 100644 index 000000000..2168b8986 Binary files /dev/null and b/website/src/assets/blog/deepseek-r1-locally-jan.jpg differ diff --git a/website/src/assets/blog/download-jan.jpg b/website/src/assets/blog/download-jan.jpg new file mode 100644 index 000000000..f799260c7 Binary files /dev/null and b/website/src/assets/blog/download-jan.jpg differ diff --git a/website/src/assets/blog/egpu.jpg b/website/src/assets/blog/egpu.jpg new file mode 100644 index 000000000..9f631d4fd Binary files /dev/null and b/website/src/assets/blog/egpu.jpg differ diff --git a/website/src/assets/blog/gradient-decent.gif b/website/src/assets/blog/gradient-decent.gif new file mode 100644 index 000000000..9828f2fe9 Binary files /dev/null and b/website/src/assets/blog/gradient-decent.gif differ diff --git a/website/src/assets/blog/hugging-face-jan-model-download.jpg b/website/src/assets/blog/hugging-face-jan-model-download.jpg new file mode 100644 index 000000000..c6cfa8ea5 Binary files /dev/null and b/website/src/assets/blog/hugging-face-jan-model-download.jpg differ diff --git a/website/src/assets/blog/jan-hf-model-download.jpg b/website/src/assets/blog/jan-hf-model-download.jpg new file mode 100644 index 000000000..929acf2ff Binary files /dev/null and b/website/src/assets/blog/jan-hf-model-download.jpg differ diff --git a/website/src/assets/blog/jan-hub-deepseek-r1.jpg b/website/src/assets/blog/jan-hub-deepseek-r1.jpg new file mode 100644 index 000000000..12c0c6640 Binary files /dev/null and b/website/src/assets/blog/jan-hub-deepseek-r1.jpg differ diff --git a/website/src/assets/blog/jan-hub-download-deepseek-r1-2.jpg b/website/src/assets/blog/jan-hub-download-deepseek-r1-2.jpg new file mode 100644 index 000000000..24be4bd25 Binary files /dev/null and b/website/src/assets/blog/jan-hub-download-deepseek-r1-2.jpg differ diff --git a/website/src/assets/blog/jan-hub-download-deepseek-r1.jpg b/website/src/assets/blog/jan-hub-download-deepseek-r1.jpg new file mode 100644 index 000000000..83d9ab370 Binary files /dev/null and b/website/src/assets/blog/jan-hub-download-deepseek-r1.jpg differ diff --git a/website/src/assets/blog/jan-hub-for-ai-models.jpg b/website/src/assets/blog/jan-hub-for-ai-models.jpg new file mode 100644 index 000000000..a158499b4 Binary files /dev/null and b/website/src/assets/blog/jan-hub-for-ai-models.jpg differ diff --git a/website/src/assets/blog/jan-library-deepseek-r1.jpg b/website/src/assets/blog/jan-library-deepseek-r1.jpg new file mode 100644 index 000000000..6a54082dc Binary files /dev/null and b/website/src/assets/blog/jan-library-deepseek-r1.jpg differ diff --git a/website/src/assets/blog/jan-local-ai.jpg b/website/src/assets/blog/jan-local-ai.jpg new file mode 100644 index 000000000..2c8c145ff Binary files /dev/null and b/website/src/assets/blog/jan-local-ai.jpg differ diff --git a/website/src/assets/blog/jan-model-download.jpg b/website/src/assets/blog/jan-model-download.jpg new file mode 100644 index 000000000..7e949403d Binary files /dev/null and b/website/src/assets/blog/jan-model-download.jpg differ diff --git a/website/src/assets/blog/jan-model-selection.jpg b/website/src/assets/blog/jan-model-selection.jpg new file mode 100644 index 000000000..b630c800e Binary files /dev/null and b/website/src/assets/blog/jan-model-selection.jpg differ diff --git a/website/src/assets/blog/jan-runs-deepseek-r1-distills.jpg b/website/src/assets/blog/jan-runs-deepseek-r1-distills.jpg new file mode 100644 index 000000000..02ce847f4 Binary files /dev/null and b/website/src/assets/blog/jan-runs-deepseek-r1-distills.jpg differ diff --git a/website/src/assets/blog/jan-system-prompt-deepseek-r1.jpg b/website/src/assets/blog/jan-system-prompt-deepseek-r1.jpg new file mode 100644 index 000000000..f79e71af0 Binary files /dev/null and b/website/src/assets/blog/jan-system-prompt-deepseek-r1.jpg differ diff --git a/website/src/assets/blog/jan.ai.jpg b/website/src/assets/blog/jan.ai.jpg new file mode 100644 index 000000000..d635d1ab9 Binary files /dev/null and b/website/src/assets/blog/jan.ai.jpg differ diff --git a/website/src/assets/blog/local-ai-model-parameters.jpg b/website/src/assets/blog/local-ai-model-parameters.jpg new file mode 100644 index 000000000..1d26fc4a5 Binary files /dev/null and b/website/src/assets/blog/local-ai-model-parameters.jpg differ diff --git a/website/src/assets/blog/offline-chatgpt-alternative-ai-without-internet.jpg b/website/src/assets/blog/offline-chatgpt-alternative-ai-without-internet.jpg new file mode 100644 index 000000000..6dffb1e95 Binary files /dev/null and b/website/src/assets/blog/offline-chatgpt-alternative-ai-without-internet.jpg differ diff --git a/website/src/assets/blog/offline-chatgpt-alternatives-jan.jpg b/website/src/assets/blog/offline-chatgpt-alternatives-jan.jpg new file mode 100644 index 000000000..065b33636 Binary files /dev/null and b/website/src/assets/blog/offline-chatgpt-alternatives-jan.jpg differ diff --git a/website/src/assets/blog/og-4090s.webp b/website/src/assets/blog/og-4090s.webp new file mode 100644 index 000000000..6db1b10b2 Binary files /dev/null and b/website/src/assets/blog/og-4090s.webp differ diff --git a/website/src/assets/blog/open-source-ai-quantization.jpg b/website/src/assets/blog/open-source-ai-quantization.jpg new file mode 100644 index 000000000..fe605c3cd Binary files /dev/null and b/website/src/assets/blog/open-source-ai-quantization.jpg differ diff --git a/website/src/assets/blog/openchat-bench-0106.png b/website/src/assets/blog/openchat-bench-0106.png new file mode 100644 index 000000000..9fa37960f Binary files /dev/null and b/website/src/assets/blog/openchat-bench-0106.png differ diff --git a/website/src/assets/blog/qwen3-in-jan-hub.jpeg b/website/src/assets/blog/qwen3-in-jan-hub.jpeg new file mode 100644 index 000000000..e58c5beab Binary files /dev/null and b/website/src/assets/blog/qwen3-in-jan-hub.jpeg differ diff --git a/website/src/assets/blog/qwen3-settings-in-jan.jpeg b/website/src/assets/blog/qwen3-settings-in-jan.jpeg new file mode 100644 index 000000000..82d7540a7 Binary files /dev/null and b/website/src/assets/blog/qwen3-settings-in-jan.jpeg differ diff --git a/website/src/assets/blog/qwen3-settings-jan-ai.jpeg b/website/src/assets/blog/qwen3-settings-jan-ai.jpeg new file mode 100644 index 000000000..7fc432e38 Binary files /dev/null and b/website/src/assets/blog/qwen3-settings-jan-ai.jpeg differ diff --git a/website/src/assets/blog/replay.png b/website/src/assets/blog/replay.png new file mode 100644 index 000000000..8ada6ce84 Binary files /dev/null and b/website/src/assets/blog/replay.png differ diff --git a/website/src/assets/blog/run-ai-locally-with-jan.jpg b/website/src/assets/blog/run-ai-locally-with-jan.jpg new file mode 100644 index 000000000..942ab38ba Binary files /dev/null and b/website/src/assets/blog/run-ai-locally-with-jan.jpg differ diff --git a/website/src/assets/blog/run-deepseek-r1-locally-in-jan.jpg b/website/src/assets/blog/run-deepseek-r1-locally-in-jan.jpg new file mode 100644 index 000000000..aa6980585 Binary files /dev/null and b/website/src/assets/blog/run-deepseek-r1-locally-in-jan.jpg differ diff --git a/website/src/assets/blog/throughput_Comparison.png b/website/src/assets/blog/throughput_Comparison.png new file mode 100644 index 000000000..6bb63d03c Binary files /dev/null and b/website/src/assets/blog/throughput_Comparison.png differ diff --git a/website/src/components/Blog/BlogImage.astro b/website/src/components/Blog/BlogImage.astro new file mode 100644 index 000000000..cb3190d56 --- /dev/null +++ b/website/src/components/Blog/BlogImage.astro @@ -0,0 +1,230 @@ +--- +export interface Props { + src: string; + alt: string; + caption?: string; + width?: number; + height?: number; + loading?: 'lazy' | 'eager'; + class?: string; +} + +const { + src, + alt, + caption, + width, + height, + loading = 'lazy', + class: className = '' +} = Astro.props; + +// Handle different image path formats +let imageSrc = src; + +// If the path starts with ./ or ../, it's a relative path from the MDX file +if (src.startsWith('./') || src.startsWith('../')) { + // Remove the leading ./ or ../ + imageSrc = src.replace(/^\.\.?\//, ''); + + // Prepend the blog content path if it doesn't include it + if (!imageSrc.includes('/content/blog/')) { + imageSrc = `/src/content/blog/${imageSrc}`; + } +} else if (!src.startsWith('http') && !src.startsWith('/')) { + // For paths without ./ prefix, assume they're relative to blog content + imageSrc = `/src/content/blog/${src}`; +} +--- + +
+ {alt} + {caption && ( +
{caption}
+ )} +
+ + + + diff --git a/website/src/components/Blog/CTABlog.astro b/website/src/components/Blog/CTABlog.astro new file mode 100644 index 000000000..3d1ab1044 --- /dev/null +++ b/website/src/components/Blog/CTABlog.astro @@ -0,0 +1,87 @@ +--- +export interface Props { + title?: string; + description?: string; + buttonText?: string; + buttonLink?: string; + variant?: 'primary' | 'secondary' | 'gradient'; + align?: 'left' | 'center' | 'right'; +} + +const { + title = "Ready to get started?", + description = "Download Jan and start running AI models locally on your device.", + buttonText = "Download Jan", + buttonLink = "https://jan.ai", + variant = 'primary', + align = 'center' +} = Astro.props; + +const variantClasses = { + primary: 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800', + secondary: 'bg-gray-50 dark:bg-gray-900/20 border-gray-200 dark:border-gray-800', + gradient: 'bg-gradient-to-r from-blue-50 to-purple-50 dark:from-blue-900/20 dark:to-purple-900/20 border-purple-200 dark:border-purple-800' +}; + +const alignClasses = { + left: 'text-left', + center: 'text-center', + right: 'text-right' +}; + +const buttonVariantClasses = { + primary: 'bg-blue-600 hover:bg-blue-700 text-white', + secondary: 'bg-gray-800 hover:bg-gray-900 dark:bg-gray-200 dark:hover:bg-gray-300 text-white dark:text-gray-900', + gradient: 'bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700 text-white' +}; +--- + +
+
+ {title && ( +

+ {title} +

+ )} + + {description && ( +

+ {description} +

+ )} + + + {buttonText} + + + + +
+
+ + diff --git a/website/src/components/Callout.astro b/website/src/components/Callout.astro new file mode 100644 index 000000000..5329bf57a --- /dev/null +++ b/website/src/components/Callout.astro @@ -0,0 +1,85 @@ +--- +export interface Props { + type?: 'info' | 'warning' | 'error' | 'success' | 'note'; + emoji?: string; + children?: any; +} + +const { type = 'note', emoji } = Astro.props; + +const typeConfig = { + info: { + bgColor: 'bg-blue-50 dark:bg-blue-900/20', + borderColor: 'border-blue-200 dark:border-blue-800', + textColor: 'text-blue-900 dark:text-blue-200', + defaultEmoji: 'ℹ️' + }, + warning: { + bgColor: 'bg-yellow-50 dark:bg-yellow-900/20', + borderColor: 'border-yellow-200 dark:border-yellow-800', + textColor: 'text-yellow-900 dark:text-yellow-200', + defaultEmoji: '⚠️' + }, + error: { + bgColor: 'bg-red-50 dark:bg-red-900/20', + borderColor: 'border-red-200 dark:border-red-800', + textColor: 'text-red-900 dark:text-red-200', + defaultEmoji: '🚨' + }, + success: { + bgColor: 'bg-green-50 dark:bg-green-900/20', + borderColor: 'border-green-200 dark:border-green-800', + textColor: 'text-green-900 dark:text-green-200', + defaultEmoji: '✅' + }, + note: { + bgColor: 'bg-gray-50 dark:bg-gray-900/20', + borderColor: 'border-gray-200 dark:border-gray-800', + textColor: 'text-gray-900 dark:text-gray-200', + defaultEmoji: '📝' + } +}; + +const config = typeConfig[type] || typeConfig.note; +const displayEmoji = emoji || config.defaultEmoji; +--- + +
+
+ +
+ +
+
+
+ + diff --git a/website/src/components/Changelog/ChangelogHeader.astro b/website/src/components/Changelog/ChangelogHeader.astro new file mode 100644 index 000000000..57212fb9b --- /dev/null +++ b/website/src/components/Changelog/ChangelogHeader.astro @@ -0,0 +1,36 @@ +--- +export interface Props { + title: string; + date: string; + ogImage?: string; +} + +const { title, date, ogImage } = Astro.props; + +// Format the date nicely +const formattedDate = new Date(date).toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric' +}); +--- + +
+ {ogImage && ( +
+ {title} +
+ )} +
+ + diff --git a/website/src/components/CustomNav.astro b/website/src/components/CustomNav.astro index 8bc6698b4..62300644c 100644 --- a/website/src/components/CustomNav.astro +++ b/website/src/components/CustomNav.astro @@ -22,7 +22,7 @@ const isDocsPage = currentPath.startsWith('/jan/') ||
- + 👋 Jan @@ -31,12 +31,15 @@ const isDocsPage = currentPath.startsWith('/jan/') || Products + + Docs + + + Handbook + Blog - - Changelog -
@@ -49,7 +52,10 @@ const isDocsPage = currentPath.startsWith('/jan/') ||
- + + + Changelog + API Reference @@ -80,6 +86,8 @@ const isDocsPage = currentPath.startsWith('/jan/') ||
Products + Docs + Handbook Blog Changelog API Reference diff --git a/website/src/components/DownloadButton.astro b/website/src/components/DownloadButton.astro new file mode 100644 index 000000000..ba4a5d49a --- /dev/null +++ b/website/src/components/DownloadButton.astro @@ -0,0 +1,233 @@ +--- +export interface Props { + class?: string; + showStats?: boolean; + downloadCount?: string; +} + +const { class: className, showStats = false, downloadCount = '3.8M+' } = Astro.props; + +// Download links for different platforms +const downloadLinks = { + 'mac-intel': 'https://github.com/janhq/jan/releases/download/v0.5.14/jan-mac-x64-0.5.14.dmg', + 'mac-arm': 'https://github.com/janhq/jan/releases/download/v0.5.14/jan-mac-arm64-0.5.14.dmg', + 'windows': 'https://github.com/janhq/jan/releases/download/v0.5.14/jan-win-x64-0.5.14.exe', + 'linux-deb': 'https://github.com/janhq/jan/releases/download/v0.5.14/jan-linux-amd64-0.5.14.deb', + 'linux-appimage': 'https://github.com/janhq/jan/releases/download/v0.5.14/jan-linux-x86_64-0.5.14.AppImage' +}; +--- + +
+
+ + + + +
+ + + + + + + + +
+
+ + {showStats && ( +

+ {downloadCount} downloads | Free & Open Source +

+ )} +
+ + + + diff --git a/website/src/components/Steps.astro b/website/src/components/Steps.astro new file mode 100644 index 000000000..3abeff7e5 --- /dev/null +++ b/website/src/components/Steps.astro @@ -0,0 +1,112 @@ +--- +export interface Props { + class?: string; +} + +const { class: className } = Astro.props; +--- + +
+ +
+ + diff --git a/website/src/components/YouTube.astro b/website/src/components/YouTube.astro new file mode 100644 index 000000000..6459addcb --- /dev/null +++ b/website/src/components/YouTube.astro @@ -0,0 +1,60 @@ +--- +export interface Props { + id: string; + title?: string; + class?: string; +} + +const { id, title = 'YouTube video player', class: className } = Astro.props; + +// Extract video ID and handle both formats: +// - Simple ID: "4mvHgLy_YV8" +// - ID with params: "4mvHgLy_YV8?si=74cmdMmcH3gmpv0R" +const videoId = id.split('?')[0]; +const params = id.includes('?') ? '?' + id.split('?')[1] : ''; +--- + +
+ +
+ + diff --git a/website/src/content/blog/_assets/3090s.jpg b/website/src/content/blog/_assets/3090s.jpg new file mode 100644 index 000000000..3a62b3f6f Binary files /dev/null and b/website/src/content/blog/_assets/3090s.jpg differ diff --git a/website/src/content/blog/_assets/4070s.jpg b/website/src/content/blog/_assets/4070s.jpg new file mode 100644 index 000000000..3d8622347 Binary files /dev/null and b/website/src/content/blog/_assets/4070s.jpg differ diff --git a/website/src/content/blog/_assets/4090s.png b/website/src/content/blog/_assets/4090s.png new file mode 100644 index 000000000..2c49a3248 Binary files /dev/null and b/website/src/content/blog/_assets/4090s.png differ diff --git a/website/src/content/blog/_assets/ai-locally-llama.cpp.jpg b/website/src/content/blog/_assets/ai-locally-llama.cpp.jpg new file mode 100644 index 000000000..967b63bf7 Binary files /dev/null and b/website/src/content/blog/_assets/ai-locally-llama.cpp.jpg differ diff --git a/website/src/content/blog/_assets/catastrophic-demo.png b/website/src/content/blog/_assets/catastrophic-demo.png new file mode 100644 index 000000000..7c869fc0e Binary files /dev/null and b/website/src/content/blog/_assets/catastrophic-demo.png differ diff --git a/website/src/content/blog/_assets/chat-with-docs-prompt.jpg b/website/src/content/blog/_assets/chat-with-docs-prompt.jpg new file mode 100644 index 000000000..df47dd4ef Binary files /dev/null and b/website/src/content/blog/_assets/chat-with-docs-prompt.jpg differ diff --git a/website/src/content/blog/_assets/chat-with-your-docs-offline-ai.jpg b/website/src/content/blog/_assets/chat-with-your-docs-offline-ai.jpg new file mode 100644 index 000000000..efcda0f07 Binary files /dev/null and b/website/src/content/blog/_assets/chat-with-your-docs-offline-ai.jpg differ diff --git a/website/src/content/blog/_assets/chat-with-your-docs2.jpg b/website/src/content/blog/_assets/chat-with-your-docs2.jpg new file mode 100644 index 000000000..1577b3f5c Binary files /dev/null and b/website/src/content/blog/_assets/chat-with-your-docs2.jpg differ diff --git a/website/src/content/blog/_assets/deepseek-r1-locally-jan.jpg b/website/src/content/blog/_assets/deepseek-r1-locally-jan.jpg new file mode 100644 index 000000000..2168b8986 Binary files /dev/null and b/website/src/content/blog/_assets/deepseek-r1-locally-jan.jpg differ diff --git a/website/src/content/blog/_assets/download-jan.jpg b/website/src/content/blog/_assets/download-jan.jpg new file mode 100644 index 000000000..f799260c7 Binary files /dev/null and b/website/src/content/blog/_assets/download-jan.jpg differ diff --git a/website/src/content/blog/_assets/egpu.jpg b/website/src/content/blog/_assets/egpu.jpg new file mode 100644 index 000000000..9f631d4fd Binary files /dev/null and b/website/src/content/blog/_assets/egpu.jpg differ diff --git a/website/src/content/blog/_assets/gradient-decent.gif b/website/src/content/blog/_assets/gradient-decent.gif new file mode 100644 index 000000000..9828f2fe9 Binary files /dev/null and b/website/src/content/blog/_assets/gradient-decent.gif differ diff --git a/website/src/content/blog/_assets/hugging-face-jan-model-download.jpg b/website/src/content/blog/_assets/hugging-face-jan-model-download.jpg new file mode 100644 index 000000000..c6cfa8ea5 Binary files /dev/null and b/website/src/content/blog/_assets/hugging-face-jan-model-download.jpg differ diff --git a/website/src/content/blog/_assets/jan-hf-model-download.jpg b/website/src/content/blog/_assets/jan-hf-model-download.jpg new file mode 100644 index 000000000..929acf2ff Binary files /dev/null and b/website/src/content/blog/_assets/jan-hf-model-download.jpg differ diff --git a/website/src/content/blog/_assets/jan-hub-deepseek-r1.jpg b/website/src/content/blog/_assets/jan-hub-deepseek-r1.jpg new file mode 100644 index 000000000..12c0c6640 Binary files /dev/null and b/website/src/content/blog/_assets/jan-hub-deepseek-r1.jpg differ diff --git a/website/src/content/blog/_assets/jan-hub-download-deepseek-r1-2.jpg b/website/src/content/blog/_assets/jan-hub-download-deepseek-r1-2.jpg new file mode 100644 index 000000000..24be4bd25 Binary files /dev/null and b/website/src/content/blog/_assets/jan-hub-download-deepseek-r1-2.jpg differ diff --git a/website/src/content/blog/_assets/jan-hub-download-deepseek-r1.jpg b/website/src/content/blog/_assets/jan-hub-download-deepseek-r1.jpg new file mode 100644 index 000000000..83d9ab370 Binary files /dev/null and b/website/src/content/blog/_assets/jan-hub-download-deepseek-r1.jpg differ diff --git a/website/src/content/blog/_assets/jan-hub-for-ai-models.jpg b/website/src/content/blog/_assets/jan-hub-for-ai-models.jpg new file mode 100644 index 000000000..a158499b4 Binary files /dev/null and b/website/src/content/blog/_assets/jan-hub-for-ai-models.jpg differ diff --git a/website/src/content/blog/_assets/jan-library-deepseek-r1.jpg b/website/src/content/blog/_assets/jan-library-deepseek-r1.jpg new file mode 100644 index 000000000..6a54082dc Binary files /dev/null and b/website/src/content/blog/_assets/jan-library-deepseek-r1.jpg differ diff --git a/website/src/content/blog/_assets/jan-local-ai.jpg b/website/src/content/blog/_assets/jan-local-ai.jpg new file mode 100644 index 000000000..2c8c145ff Binary files /dev/null and b/website/src/content/blog/_assets/jan-local-ai.jpg differ diff --git a/website/src/content/blog/_assets/jan-model-download.jpg b/website/src/content/blog/_assets/jan-model-download.jpg new file mode 100644 index 000000000..7e949403d Binary files /dev/null and b/website/src/content/blog/_assets/jan-model-download.jpg differ diff --git a/website/src/content/blog/_assets/jan-model-selection.jpg b/website/src/content/blog/_assets/jan-model-selection.jpg new file mode 100644 index 000000000..b630c800e Binary files /dev/null and b/website/src/content/blog/_assets/jan-model-selection.jpg differ diff --git a/website/src/content/blog/_assets/jan-runs-deepseek-r1-distills.jpg b/website/src/content/blog/_assets/jan-runs-deepseek-r1-distills.jpg new file mode 100644 index 000000000..02ce847f4 Binary files /dev/null and b/website/src/content/blog/_assets/jan-runs-deepseek-r1-distills.jpg differ diff --git a/website/src/content/blog/_assets/jan-system-prompt-deepseek-r1.jpg b/website/src/content/blog/_assets/jan-system-prompt-deepseek-r1.jpg new file mode 100644 index 000000000..f79e71af0 Binary files /dev/null and b/website/src/content/blog/_assets/jan-system-prompt-deepseek-r1.jpg differ diff --git a/website/src/content/blog/_assets/jan.ai.jpg b/website/src/content/blog/_assets/jan.ai.jpg new file mode 100644 index 000000000..d635d1ab9 Binary files /dev/null and b/website/src/content/blog/_assets/jan.ai.jpg differ diff --git a/website/src/content/blog/_assets/local-ai-model-parameters.jpg b/website/src/content/blog/_assets/local-ai-model-parameters.jpg new file mode 100644 index 000000000..1d26fc4a5 Binary files /dev/null and b/website/src/content/blog/_assets/local-ai-model-parameters.jpg differ diff --git a/website/src/content/blog/_assets/offline-chatgpt-alternative-ai-without-internet.jpg b/website/src/content/blog/_assets/offline-chatgpt-alternative-ai-without-internet.jpg new file mode 100644 index 000000000..6dffb1e95 Binary files /dev/null and b/website/src/content/blog/_assets/offline-chatgpt-alternative-ai-without-internet.jpg differ diff --git a/website/src/content/blog/_assets/offline-chatgpt-alternatives-jan.jpg b/website/src/content/blog/_assets/offline-chatgpt-alternatives-jan.jpg new file mode 100644 index 000000000..065b33636 Binary files /dev/null and b/website/src/content/blog/_assets/offline-chatgpt-alternatives-jan.jpg differ diff --git a/website/src/content/blog/_assets/og-4090s.webp b/website/src/content/blog/_assets/og-4090s.webp new file mode 100644 index 000000000..6db1b10b2 Binary files /dev/null and b/website/src/content/blog/_assets/og-4090s.webp differ diff --git a/website/src/content/blog/_assets/open-source-ai-quantization.jpg b/website/src/content/blog/_assets/open-source-ai-quantization.jpg new file mode 100644 index 000000000..fe605c3cd Binary files /dev/null and b/website/src/content/blog/_assets/open-source-ai-quantization.jpg differ diff --git a/website/src/content/blog/_assets/openchat-bench-0106.png b/website/src/content/blog/_assets/openchat-bench-0106.png new file mode 100644 index 000000000..9fa37960f Binary files /dev/null and b/website/src/content/blog/_assets/openchat-bench-0106.png differ diff --git a/website/src/content/blog/_assets/qwen3-in-jan-hub.jpeg b/website/src/content/blog/_assets/qwen3-in-jan-hub.jpeg new file mode 100644 index 000000000..e58c5beab Binary files /dev/null and b/website/src/content/blog/_assets/qwen3-in-jan-hub.jpeg differ diff --git a/website/src/content/blog/_assets/qwen3-settings-in-jan.jpeg b/website/src/content/blog/_assets/qwen3-settings-in-jan.jpeg new file mode 100644 index 000000000..82d7540a7 Binary files /dev/null and b/website/src/content/blog/_assets/qwen3-settings-in-jan.jpeg differ diff --git a/website/src/content/blog/_assets/qwen3-settings-jan-ai.jpeg b/website/src/content/blog/_assets/qwen3-settings-jan-ai.jpeg new file mode 100644 index 000000000..7fc432e38 Binary files /dev/null and b/website/src/content/blog/_assets/qwen3-settings-jan-ai.jpeg differ diff --git a/website/src/content/blog/_assets/replay.png b/website/src/content/blog/_assets/replay.png new file mode 100644 index 000000000..8ada6ce84 Binary files /dev/null and b/website/src/content/blog/_assets/replay.png differ diff --git a/website/src/content/blog/_assets/run-ai-locally-with-jan.jpg b/website/src/content/blog/_assets/run-ai-locally-with-jan.jpg new file mode 100644 index 000000000..942ab38ba Binary files /dev/null and b/website/src/content/blog/_assets/run-ai-locally-with-jan.jpg differ diff --git a/website/src/content/blog/_assets/run-deepseek-r1-locally-in-jan.jpg b/website/src/content/blog/_assets/run-deepseek-r1-locally-in-jan.jpg new file mode 100644 index 000000000..aa6980585 Binary files /dev/null and b/website/src/content/blog/_assets/run-deepseek-r1-locally-in-jan.jpg differ diff --git a/website/src/content/blog/_assets/throughput_Comparison.png b/website/src/content/blog/_assets/throughput_Comparison.png new file mode 100644 index 000000000..6bb63d03c Binary files /dev/null and b/website/src/content/blog/_assets/throughput_Comparison.png differ diff --git a/website/src/content/blog/benchmarking-nvidia-tensorrt-llm.mdx b/website/src/content/blog/benchmarking-nvidia-tensorrt-llm.mdx new file mode 100644 index 000000000..75bb2099e --- /dev/null +++ b/website/src/content/blog/benchmarking-nvidia-tensorrt-llm.mdx @@ -0,0 +1,321 @@ +--- +title: Benchmarking NVIDIA TensorRT-LLM +description: This post compares the performance of TensorRT-LLM and llama.cpp on consumer NVIDIA GPUs, highlighting the trade-offs among speed, resource usage, and convenience. +tags: Nvidia, TensorRT-LLM, llama.cpp, rtx3090, rtx4090, "inference engine" +categories: research +ogImage: assets/images/general/og-throughput-benchmark.png +date: 2024-04-29 +--- + +import { Aside } from '@astrojs/starlight/components' + + +import throughputComparison from '@/assets/blog/throughput_Comparison.png'; +import img4090s from '@/assets/blog/4090s.png'; +import og4090s from '@/assets/blog/og-4090s.webp'; +import img3090s from '@/assets/blog/3090s.jpg'; +import img4070s from '@/assets/blog/4070s.jpg'; +import egpu from '@/assets/blog/egpu.jpg'; + + +Jan now supports [NVIDIA TensorRT-LLM](https://github.com/NVIDIA/TensorRT-LLM) in addition to [llama.cpp](https://github.com/ggerganov/llama.cpp), making Jan multi-engine and ultra-fast for users with Nvidia GPUs. + +We've been excited for TensorRT-LLM for a while, and [had a lot of fun implementing it](https://github.com/menloresearch/nitro-tensorrt-llm). As part of the process, we've run some benchmarks, to see how TensorRT-LLM fares on consumer hardware (e.g. [4090s](https://www.nvidia.com/en-us/geforce/graphics-cards/40-series/), [3090s](https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/)) we commonly see in the [Jan's hardware community](https://discord.com/channels/1107178041848909847/1201834752206974996). + + + + + +## Key Findings + +image + +TensorRT-LLM was: + +- **30-70% faster** than llama.cpp on the same hardware +- **Consumes less memory on consecutive runs** and **marginally more GPU VRAM utilization** than llama.cpp +- **20%+ smaller compiled model sizes** than llama.cpp +- **Less convenient** as models have to be compiled for a specific OS and GPU architecture, vs. llama.cpp's "Compile once, run everywhere" portability +- **Less accessible** as it does not support older-generation NVIDIA GPUs + +## Why TensorRT-LLM? + +[TensorRT-LLM](https://github.com/NVIDIA/TensorRT-LLM) is Nvidia's open-source inference library that incorporates Nvidia's proprietary optimizations beyond the open-source [cuBLAS](https://developer.nvidia.com/cublas) library. + +As compared to [llama.cpp](https://github.com/ggerganov/llama.cpp), which today dominates Desktop AI as a cross-platform inference engine, TensorRT-LLM is highly optimized for Nvidia GPUs. While llama.cpp compiles models into a [single, generalizable CUDA "backend"](https://github.com/ggerganov/llama.cpp/blob/master/ggml-cuda.cu) that can run on a wide range of Nvidia GPUs, TensorRT-LLM compiles models into a [GPU-specific execution graph](https://www.baseten.co/blog/high-performance-ml-inference-with-nvidia-tensorrt/) that is highly optimized for that specific GPU's Tensor Cores, CUDA cores, VRAM and memory bandwidth. + +TensorRT-LLM is typically used in datacenter-grade GPUs, where it produces a [face-melting 10,000 tokens/s](https://nvidia.github.io/TensorRT-LLM/blogs/H100vsA100.html) on [NVIDIA H100 Tensor Core GPUs](https://www.nvidia.com/en-us/data-center/h100/). We were curious for how TensorRT-LLM performs on consumer-grade GPUs, and gave it a spin. + +| Llama.cpp | TensorRT-LLM | +| ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| Baseline | Blazing fast (30-70% faster) | +| Compile once, run cross-platform | Compiled and highly optimized for specific GPU architecture | +| Generalizable and Portable | Highly-optimized | +| Model compiles to [single, generalizable CUDA "backend"](https://github.com/ggerganov/llama.cpp/blob/master/ggml-cuda.cu) | Model compiles to [GPU-specific execution graph](https://www.baseten.co/blog/high-performance-ml-inference-with-nvidia-tensorrt/) | + +## Experiment Setup + +We ran the experiment using standardized inference requests in a sandboxed environment: +- **Model**: Mistral 7b model, compiled and quantized at a comparable `int4` quantization. +- **Test runs**: 5 batches of 10 runs each, per inference engine, on a bare metal PC with no other applications. +- **Parameters**: User defaults, i.e. `batch_size 1`, `input_len 2048` and `output_len 512` +- **Measurements**: + - CPU, memory from Jan system monitor + - GPU VRAM utilization metrics from `nvidia-smi`, and taken over an interval of 14 seconds. + - Throughput (token/sec) using [Jan's built-in Tokens/sec perf stat](https://github.com/search?q=repo%3Ajanhq%2Fjan%20timeDiffInSeconds&type=code). + + + + + +### Hardware Selection + +We chose the following GPUs based on our users' preferences: + +| NVIDIA GPU | VRAM (GB) | CUDA Cores | Tensor Cores | Memory Bus Width (bit) | Memory Bandwidth (GB/s) | Connection (GB/s) | +| --------------------------------- | --------- | ---------- | ------------ | ---------------------- | ----------------------- | -------------------------------------------- | +| GeForce RTX 4090 (Ada) | 24 | 16,384 | 512 | 384 | ~1000 | PCIe4.0 x16 (~32) | +| GeForce RTX 3090 (Ampere) | 24 | 10,496 | 328 | 384 | 935.8 | PCIe4.0 x16 (~32) | +| GeForce RTX 4070 Laptop GPU (Ada) | 8 | 7680 | 144 | 192 | 272 | PCIe4.0 x4 (~8) | +| GeForce RTX 4090 eGPU (Ada) | 24 | 16,384 | 512 | 384 | ~1000 | Thunderbolt 3 connected to a USB4 USB-C port ([~1.25-5?](https://www.cablematters.com/Blog/Thunderbolt/usb4-vs-thunderbolt-3)) | + +### llama.cpp Setup + +- llama.cpp commit [15499eb](https://github.com/ggerganov/llama.cpp/commit/15499eb94227401bdc8875da6eb85c15d37068f7) +- We used `Mistral-7b-q4_k_m` in `GGUF` with `ngl` at `100` + + + +### TensorRT-LLM Setup + +- TensorRT-LLM version [0.7.1](https://github.com/NVIDIA/TensorRT-LLM/releases/tag/v0.7.1) and build on Windows +- For TensorRT-LLM, we used `Mistral-7b-int4 AWQ` +- We ran TensorRT-LLM with `free_gpu_memory_fraction` to test it with the lowest VRAM consumption +- Note: We picked AWQ for TensorRT-LLM to be a closer comparison to GGUF's Q4. + +## Results + +### NVIDIA GeForce RTX 4090 GPU + +image +*Jan is built on this Dual-4090 workstation, which recently got upgraded to a nice case* + +image +*The original case (or lack thereof) for our Dual-4090 cluster, as posted on [r/localllama](https://www.reddit.com/r/LocalLLaMA/comments/16lxt6a/case_for_dual_4090s/)* + + + +For this test, we used Jan's [Dual-4090 workstation](https://www.reddit.com/r/LocalLLaMA/comments/16lxt6a/case_for_dual_4090s/), which our engineers timeshare to build Jan. + +The [NVIDIA GeForce RTX 4090](https://www.nvidia.com/en-us/geforce/graphics-cards/40-series/) is the latest top-of-the-line desktop GPU, with an MSRP of $1,599, and uses the Ada architecture. It has a ~1000 GB/s memory bandwidth within VRAM, and a PCIe4 x16 lane (~32 GB/s) between the GPU and the CPU. + +| Metrics | GGUF (using CPU) | GGUF (using GPU) | TensorRT-LLM | How TensorRT-LLM Compares | +| ------------------------ | ---------------- | ---------------- | ------------ | ------------------------- | +| Throughput (token/s) | 14.0 | 100.43 | 170.63 | ✅ 69.89% faster | +| Max GPU Utilization (%) | N/A | 83.50 | 88.50 | 5.99% more | +| Max VRAM Utilization (%) | N/A | 64 | 72.1 | 12.66% more | +| Avg RAM Used (GB) | 0.611 | 7.105 | 4.98 | ✅ 29.88% less | +| Disk Size (GB) | 4.07 | 4.06 | 3.05 | ✅ 24.88% smaller | + +TensorRT-LLM was almost 70% faster than llama.cpp by building the model for the GeForce RTX 4090 GPU’s Ada architecture for optimal graph execution, fully utilizing the 512 Tensor Cores, 16,384 CUDA cores, and 1,000 GB/s of memory bandwidth. + +The intuition for why llama.cpp is slower is because it compiles a model into a [single, generalizable CUDA “backend”](https://github.com/ggerganov/llama.cpp/blob/master/ggml-cuda.cu) that can run on many NVIDIA GPUs. Doing so requires llama.cpp to sacrifice all the optimizations that TensorRT-LLM makes with its compilation to a GPU-specific execution graph. + +### NVIDIA GeForce RTX 3090 GPU + +image +*Our 3090 Machine, now used by one of our engineers to build Jan* + + + +The [NVIDIA's GeForce RTX 3090](https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3090-3090ti/) is a popular desktop GPU, and retails for approximately $1,500 (as of April 24). It uses the NVIDIA Ampere architecture. As compared to its successor GeForce RTX 4090, it has 33% fewer CUDA cores (10,496) and Tensor Cores (328) and 7% less memory bandwidth (~930 GB/s). + +| Metrics | GGUF (using CPU) | GGUF (using GPU) | TensorRT-LLM | How TensorRT-LLM Compares | +| ------------------------ | ---------------- | ---------------- | ------------ | ------------------------- | +| Throughput (token/s) | 11.42 | 88.70 | 144.19 | ✅ 62.57% faster | +| Max GPU Utilization (%) | N/A | 80.40 | 89.10 | 10.82% more | +| Max VRAM Utilization (%) | N/A | 66.80 | 76.20 | 14.07% more | +| Avg RAM Used (GB) | 0.611 | 2.60 | 0.98 | 62.41%% less | +| Disk Size (GB) | 4.07 | 4.06 | 3.05 | ✅ 24.88% smaller | + +Interestingly, the GeForce RTX 3090 was only 16.6% slower compared with the GeForce RTX 4090. On TPS, TensorRT-LLM outperformed llama.cpp by 62.57%. Curiously, it also used negligible RAM for subsequent inference requests after the initial model warmup. + +### NVIDIA GeForce RTX 4070 Laptop GPU + +image + + + +We also benchmarked an NVIDIA GeForce RTX 4070 Laptop GPU with 8gb of VRAM, which is a popular configuration among Jan users. Laptop GPUs are less powerful than their desktop counterparts, as they trade portability for reduced energy consumption and thermal constraints. + +| Metrics | GGUF (using CPU) | GGUF (using GPU) | TensorRT-LLM | Difference on GPU | +| ------------------------ | ---------------- | ---------------- | ------------ | ----------------- | +| Throughput (token/s) | 11.57 | 39.70 | 51.57 | ✅ 29.9% faster | +| Max GPU Utilization (%) | N/A | 80.00 | 84.67 | 5.83% more | +| Max VRAM Utilization (%) | N/A | 72.78 | 81.22 | 11.60% more | +| Avg RAM Used (GB) | 4.49 | 4.44 | 1.04 | ✅ 76.55%% less | +| Disk Size (GB) | 4.07 | 4.06 | 3.05 | ✅ 24.88% smaller | + +TensorRT-LLM on the laptop dGPU was 29.9% faster in tokens per second throughput than llama.cpp, but significantly slower than the desktop GPUs. + +The intuition for this is fairly simple: the GeForce RTX 4070 Laptop GPU has 53.1% fewer CUDA cores and Tensor Cores (compared to the 4090), and less VRAM (8gb vs. 24gb). This reduces the surface area for GPU-specific optimizations for TensorRT-LLM. + +The GeForce RTX 4070 Laptop GPU is also ~70% slower than the GeForce RTX 4090 desktop GPU, showing the hardware effect of less electricity draw, less VRAM, and thermal constraints on inference speed. + +### Laptop with NVIDIA GeForce RTX 4090 eGPU + +image + + + +Our last benchmark was to experiment with an [Asus RTX 4090 eGPU](https://www.gigabyte.com/Graphics-Card/GV-N4090IXEB-24GD), that was connected via a [Thunderbolt 3 port](https://www.gigabyte.com/Graphics-Card/GV-N4090IXEB-24GD) to the [Razer Blade 14's USB4 port](https://www.razer.com/sg-en/gaming-laptops/razer-blade-14). Theoretically, the results should be fairly similar to the GeForce RTX 4090 desktop GPU as they have identical underlying GPUs, but with very different connection speeds. + +We thought it would be an interesting to see how TensorRT-LLM handles a 68.4% reduction in communication bandwidth between the CPU and GPU: +- Thunderbolt 3 connection (1.25-5 GB/s?) for eGPUs +- PCIe 4.0 x4 (~8 GB/s) for "on device" desktops + + + +Overall, we used mid-to-high-end NVIDIA desktop GPUs for our tests, as TensorRT-LLM’s performance enhancements are most apparent on bigger VRAMs. For users with lower-spec machines, llama.cpp is better. + +| Metrics | GGUF (using CPU) | GGUF (using GPU) | TensorRT-LLM | Difference on GPU | +| ------------------------ | ---------------- | ---------------- | ------------ | ----------------- | +| Throughput (token/s) | 11.56 | 62.22 | 104.95 | ✅ 68.66% faster | +| Max VRAM Utilization (%) | 0 | 65 | 99 | 52.31% more | +| RAM Used (GB) | 0.611 | 5.38 | 4.11 | ✅ 23.61% less | +| Disk Size (GB) | 4.07 | 4.06 | 3.05 | ✅ 24.88% smaller | + +The Thunderbolt 3 eGPU had a 38.5% lower tokens/s as compared to the PCIe4.0 x16 connected GPU. But the % speedup vs. llama.cpp was similar, at around 69%. + +Interestingly, the VRAM used with the eGPU was variably higher. Our hypothesis is that the slower communication bandwidth results in more VRAM being allocated, as memory is released mostly slowly as well. + +## Conclusion + +### Token Speed + +image + +| Throughput (Higher is Better) | TensorRT-LLM | Llama.cpp | % Difference | +| ---------------------------------- | --------------- | ----------- | ------------- | +| GeForce RTX 4090 desktop GPU | ✅ 170.63t/s | 100.43t/s | 69.89% faster | +| GeForce RTX 3090 desktop GPU | ✅ 144.19t/s | 88.70t/s | 62.57% faster | +| GeForce RTX 4090 eGPU | ✅ 104.95t/s | 62.22t/s | 68.66% faster | +| GeForce RTX 4070 Laptop GPU | ✅ 51.57t/s | 39.70t/s | 29.90% faster | +| Laptop AMD Ryzen™ 9 8945HS, 8C/16T | (Not supported) | ✅ 11.57t/s | | + +- TensorRT-LLM is up to **70% faster** than llama.cpp on desktop GPUs (e.g. 3090 GPU, 4090 GPUs) while using less RAM & CPU (but more fully utilizing VRAM) +- TensorRT-LLM is up to **30% faster** on laptop GPUs (e.g. 4070 GPUs) with smaller VRAM + +### Max VRAM Utilization + +| Average VRAM utilization % | TensorRT-LLM | Llama.cpp | % Difference | +| ---------------------------- | ------------ | --------- | ------------ | +| GeForce RTX 4090 desktop GPU | 72.10 | 64.00 | 12.66% more | +| GeForce RTX 3090 desktop GPU | 76.20 | 66.80 | 14.07% more | +| GeForce RTX 4070 Laptop GPU | 81.22 | 72.78 | 11.06% more | +| GeForce RTX 4090 eGPU | N/A | N/A | N/A | + +- TensorRT-LLM used marginally more average VRAM utilization at peak utilization vs. llama.cpp (up to 14%). Though this could have interesting implications on consuming more electricity over time. +- Note: we used comparable (but not identical) quantizations, and TensorRT-LLM’s `AWQ INT4` is implemented differently from llama.cpp’s `q4_k_m` + +### Max RAM Usage + +| Max RAM utilization | TensorRT-LLM | Llama.cpp | % Difference | +| ---------------------------- | ------------ | --------- | ---------------- | +| GeForce RTX 4090 desktop GPU | ✅ 4.98 | 7.11 | ✅ 29.88% less | +| GeForce RTX 3090 desktop GPU | ✅ 0.98 | 2.60 | ✅ 62.41% less | +| GeForce RTX 4070 Laptop GPU | ✅ 1.04 | 4.44 | ✅ 76.55%% less | +| GeForce RTX 4090 eGPU | ✅ 4.11 | 5.38 | ✅ 23.61% less | + +TensorRT-LLM uses a lot less Max RAM vs. llama.cpp on slower connection (PCIe 3.0 or Thunderbolt 3) due to better memory management and efficient delegation to VRAM. On faster connection, it’s at least equal to llama.cpp. + +### Compiled Model Size and Number of Files +- Contrary to popular belief, TensorRT-LLM prebuilt models turned out to not be that huge +- Mistral 7b int4 was actually 25% smaller in TensorRT-LLM, at 3.05gb vs. 4.06gb +- Note: These are approximate comparisons, as TensorRT-LLM’s AWQ INT4 is implemented differently from llama.cpp’s q4_k_m +- The bigger takeaway is that the Compiled model sizes are roughly in the same ballpark, while the number of files for TensorRT-LLM is 7x the GGUF number of files. + +| Model size (Lower is better) | TensorRT-LLM AWQ int4 | Llama.cpp GGUF Q4 | % Difference | +| ---------------------------- | --------------------- | ----------------- | ----------------- | +| Mistral 7B | ✅ 3.05GB | 4.06GB | ✅ 24.88% smaller | + +### Convenience +- Llama.cpp still wins on cross-platform versatility and convenience of a “compile once, run everywhere” approach +- TensorRT-LLM still requires compilation to specific OS and architecture, though this could be solved by pre-compiling and publishing models on [Nvidia's NGC Model Catalog](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/ai-foundation/collections/codellama) + +### Accessibility +- Llama.cpp unsurprisingly beats TensorRT-LLM in terms of accessibility +- TensorRT-LLM does not support older NVIDIA GPUs and won’t work well on smaller VRAM cards (e.g. 2-4gb VRAM) + +## Final Notes + +Our benchmarking is not perfect. We evaluated over a dozen tools ([llmperf](https://github.com/ray-project/llmperf), [psutil](https://pypi.org/project/psutil/), [gpustat](https://github.com/wookayin/gpustat), native utilities, and more) and found that everyone measures TPS, common metrics differently. We eventually settled on using our own tools in Jan, which are consistent across any inference engine and hardware. As for runtime parameters, we went with default settings, likely representing the typical user experience. + +We also did not overclock for this benchmark , as it is not a default setting for most users. But we've measured in our tests that TensorRT-LLM can go even faster with a few tweaks. We see this as a pretty exciting future direction. + + + +We're also publishing the underlying [raw experimental data](https://drive.google.com/file/d/1rDwd8XD8erKt0EgIKqOBidv8LsCO6lef/view?usp=sharing), and would encourage the community to scrutinize and help us improve. + +Special thanks to Asli Sabanci Demiroz, Annamalai Chockalingam, Jordan Dodge from Nvidia, and Georgi Gerganov from llama.cpp for feedback, review and suggestions. diff --git a/website/src/content/blog/bitdefender.mdx b/website/src/content/blog/bitdefender.mdx new file mode 100644 index 000000000..27a28e4b2 --- /dev/null +++ b/website/src/content/blog/bitdefender.mdx @@ -0,0 +1,149 @@ +--- +title: 'Bitdefender False Positive Flag' +description: "10th January 2024, Jan's 0.4.4 Release on Windows triggered Bitdefender to incorrectly flag it as infected with Gen:Variant.Tedy.258323, leading to automatic quarantine warnings on users' computers." +date: 2024-01-10 +tags: postmortem, bitdefender +categories: building-jan +keywords: + [ + postmortem, + bitdefender, + false positive, + antivirus, + jan, + nitro, + incident, + incident response, + supply chain security, + user communication, + documentation, + antivirus compatibility, + cross-platform testing, + proactive incident response, + user education, + lessons learned, + ] +--- + +import CTABlog from '@/components/Blog/CTABlog.astro'; + + +# Bitdefender False Positive Flag + +Following the recent incident related to Jan version 0.4.4 triggering Bitdefender on Windows with Gen:Variant.Tedy.258323 on January 10, 2024, we wanted to provide a comprehensive postmortem and outline the necessary follow-up actions. + +## Incident Overview + +### Bug Description + +Jan 0.4.4 installation on Windows triggered Bitdefender to flag it as infected with Gen:Variant.Tedy.258323, leading to automatic quarantine. + +### Affected Antivirus + +- McAfee / Microsoft Defender was unaffected +- Bitdefender consistently flagged the issue. + +### Incident Timeline + +- _10 Jan, 2:18 am SGT:_ Hawke flags up Malware antivirus errors for 0.4.4 installation on Windows computers. +- _10 Jan, 2:21 am SGT:_ @0xSage responds in Discord. +- _10 Jan, 2:35 am SGT:_ Hawke confirms multiple people have experienced this error on fresh installs. +- _10 Jan, 2:41 am SGT:_ @louis-jan and @dan-jan revert 0.4.4 out of an abundance of caution. +- _Incident ongoing:_ To triage and investigate the next day. +- _10 Jan, 11:36 am SGT:_ @Hien has investigated all versions of Nitro and conducted scans using Bitdefender. Only the 2 latest versions raised warnings (0.2.7, 0.2.8). +- _10 Jan, 12:44 pm SGT:_ @Hien tested again for the 0.2.6 and suggested using 0.2.6 for now, the 2 remaining Nitro version (0.2.7, 0.2.8) will under further investigation. +- The team started testing on the fixed build. +- _10 Jan, 3:22 pm SGT:_ Diagnosis found that it's most likely a false positive. @Hien has only found a solution by attempting to build Nitro Windows CPU on a GitHub-hosted runner and hasn't identified the root cause yet. +- _10 Jan, 5:24 pm SGT:_ @Hien testing two scenarios and still trying to understand the workings of Bitdefender. +- _11 Jan, 5:46 pm SGT:_ Postmortem meeting + +## Investigation Update + +- @Hien has investigated all versions of Nitro and conducted scans using Bitdefender. and only the 2 latest versions raised warnings from Bitdefender. Nitro 0.2.6, which is the highest version without the issue, was tested again, and it no longer triggers a warning from Bitdefender. +- We have observed that Nitro versions up to 0.2.6 remain unaffected. However, Bitdefender flags versions 0.2.7 and 0.2.8 as infected, leading to the deletion. In order to proceed with the current release, Hien suggests downgrading Nitro to version 0.2.6 and conducting tests with this version. Simultaneously, he will investigate why Bitdefender is flagging versions 0.2.7 and 0.2.8. +- It's essential to note that between versions 0.2.6, 0.2.7, and 0.2.8, only minor changes were made, which should not trigger a malicious code warning. We can refer to the changelog between 0.2.7 and 0.2.8 to pinpoint these changes. +- Our primary message is to convey that we did not introduce malicious code into Jan (indicating a false positive), and the investigation aims to understand the root cause behind Bitdefender flagging versions 0.2.7 and 0.2.8. +- The current diagnosis looks like a false positive but it's still under investigation. Reference link: [here](https://stackoverflow.com/questions/75886428/fake-positive-bit-defender-problem-genvariant-tedy-304469), [here](https://stackoverflow.com/questions/58010466/bitdefender-detects-my-console-application-as-genvariant-ursu-56053), and [here](https://www.cisa.gov/sites/default/files/2023-06/mar-10365227.r1.v1.clear_.pdf). +- @Hien testing two scenarios and still trying to understand the workings of Bitdefender. Still under investigation: is the issue with the code or the CI? + - In Case 1, using the same CI agent for tags 0.2.6 and 0.2.8, after PRs by Alan and myself, Bitdefender flagged the Nitro CPU binary build. Naturally, one would conclude this is due to the code. + - However, I proceeded with a further experiment: for the 0.2.8 code, instead of using our CI agent, I used a GitHub hosted agent. This time, Bitdefender did not flag our binary build. +- We've identified the Bitdefender warning was not an attack. There is no malicious code +- We've isolated the event to originate from a CI agent, which resulted in a BitDefender false positive alert. + +## Follow-ups and Action Items + +1. **Reproduce Bitdefender Flag in Controlled Environment [Done]:** + + - _Objective:_ To replicate the issue in a controlled environment to understand the triggers and specifics of Bitdefender's detection. + +2. **Investigate Malicious Code or False Positive:** + + - _Objective:_ Determine whether the flagged issue is a result of actual malicious code or a false positive. If it's a false positive, work towards resolution while communicating with Bitdefender. + +3. **Supply Chain Attack Assessment:** + + - _Objective:_ Evaluate the possibility of a supply chain attack. Investigate whether the Nitro 0.4.4 distribution was compromised or tampered with during the release process. + +4. **Testing after the Hotfix:** + + - _Objective:_ In addition to verifying the issue after the fix, it is essential to conduct comprehensive testing across related areas, ensuring compatibility across different operating systems and antivirus software (latest version / free version only). + +5. **Process Improvement for Future Releases:** + + - _Objective:_ Identify and implement improvements to our release process to prevent similar incidents in the future. This may include enhanced testing procedures, code analysis, and collaboration with antivirus software providers during the pre-release phase. Additionally, we should add verifying the latest antivirus software in the release checklist. + +6. **Documentation of Tested Antivirus Versions:** + - _Objective:_ Create a document that outlines the testing conducted, including a matrix that correlates Jan versions with the tested antivirus versions. + - _Sample list:_ for consideration purpose + - Bitdefender + - McAfee + - Avira + - Kaspersky + - Norton + - Microsoft defender + - AVG + - TotalAV + +## Next Steps + +- The team should follow up on each action item with clear ownership priority, and deadlines. +- Communicate progress transparently with the community and clients through appropriate channels. If any insights or suggestions, share them within the dedicated channels. +- Update internal documentation and procedures based on the lessons learned from this incident. + +## Lessons Learned + +1. **Antivirus Compatibility Awareness:** + + - _Observation:_ The incident underscored the significance of recognizing and testing for antivirus compatibility, particularly with widely-used solutions like Bitdefender. + - _Lesson Learned:_ In the future, we will integrate comprehensive checks for compatibility with various antivirus software, including both antivirus and "Malicious Code Detection," into our CI or QA checklist. This proactive measure aims to minimize false positive detections during the release and testing processes. + +2. **Cross-Platform Testing:** + + - _Observation:_ The problem did not occur on MacOS and Linux systems, implying a potential oversight in cross-platform testing during our release procedures. + - _Lesson Learned:_ Clarification — This observation is not directly related to antivirus testing. Instead, it underscores the necessity to improve our testing protocols, encompassing multiple operating systems. This ensures a thorough evaluation of potential issues on diverse platforms, considering the various antivirus software and differences in architectures on Mac and Linux systems. + +3. **User Communication and Documentation:** + + - _Observation:_ Due to the timely response from Nicole, who was still active on Discord and Github at 2 am, this quick response facilitated our ability to assess the impact accurately. + - _Lesson Learned:_ While our communication with users was effective in this instance, it was mainly due to Nicole's presence during the incident. To improve our overall response capability, we should prioritize "24/7 rapid triage and response." This involves ensuring continuous availability or establishing a reliable rotation of team members for swift user communication and issue documentation, further enhancing our incident response efficiency. + +4. **Proactive Incident Response:** + + - _Observation:_ The incident response, while involving a prompt version rollback, experienced a slight delay due to the release occurring at midnight. This delay postponed the initiation of the investigation until the next working hours. + - _Lesson Learned:_ Recognizing the importance of swift incident response, particularly in time-sensitive situations, we acknowledge that releasing updates during off-hours can impact the immediacy of our actions. Moving forward, we will strive to optimize our release schedules to minimize delays and ensure that investigations can commence promptly regardless of the time of day. This may involve considering alternative release windows or implementing automated responses to critical incidents, ensuring a more proactive and timely resolution. + +5. **Supply Chain Security Measures:** + + - _Observation:_ While the incident prompted consideration of a potential supply chain attack, it's crucial to emphasize that this was not the case. Nonetheless, the incident underscored the importance of reviewing our supply chain security measures. + - _Lesson Learned:_ Going forward, we should strengthen supply chain security by introducing additional verification steps to uphold the integrity of our release process. Collaborating with distribution channels is essential for enhancing security checks and ensuring a robust supply chain. + - _Longer-term:_ Exploring options for checking Jan for malicious code and incorporating antivirus as part of our CI/CD pipeline should be considered for a more comprehensive and proactive approach. + +6. **User Education on False Positives:** + - _Observation:_ Users reported Bitdefender automatically "disinfecting" the flagged Nitro version without allowing any user actions. + - _Lesson Learned:_ Educate users about the possibility of false positives and guide them on how to whitelist or report such incidents to their antivirus provider (if possible). Provide clear communication on steps users can take in such situations. + +These lessons learned will serve as a foundation for refining our processes and ensuring a more resilient release and incident response framework in the future. Continuous improvement is key to maintaining the reliability and security of our software. + +Thank you for your dedication and cooperation in resolving this matter promptly. + + \ No newline at end of file diff --git a/website/src/content/blog/data-is-moat.mdx b/website/src/content/blog/data-is-moat.mdx new file mode 100644 index 000000000..9e0d9a76f --- /dev/null +++ b/website/src/content/blog/data-is-moat.mdx @@ -0,0 +1,116 @@ +--- +title: "The Invisible Moat around Open-Source LLM" +description: "Uncover the pivotal role of data ownership in training the next iteration of LLM." +tags: OpenAI has a moat, Catastrophic forgetting, ChatGPT +date: 2024-03-25 +unlisted: true +categories: research +--- + +import CTABlog from '@/components/Blog/CTABlog.astro'; + +import catastrophicDemo from '@/assets/blog/catastrophic-demo.png'; +import gradientDecent from '@/assets/blog/gradient-decent.gif'; +import replay from '@/assets/blog/replay.png'; +import openchatBench0106 from '@/assets/blog/openchat-bench-0106.png'; + + +# The Invisible Moat around Open-Source LLM + +In the crowded AI landscape, OpenAI's ChatGPT stands out, not just for its capabilities but for its unique access to the pre-trained dataset. This post explores the vital role of data in maintaining a competitive edge, focusing on OpenAI's strategic advantage through data ownership. + +## Data: The Secret Weapon +OpenAI, with ChatGPT, has carved a distinct advantage. By harnessing user interactions, it gains invaluable insights into diverse use cases, enabling precise model refinements. The cornerstone of this advantage lies in the "pre-trained dataset." This treasure trove of data empowers OpenAI to cater to specific needs, ensuring sustained improvement and differentiation. + +## The rise of the opensource + +``` +- How they/Mistral/Llama make money? +-> around having pretrained data -> finetuning +First para: +Rise of Open Source LLMs like Mistral, Llama2, Llama3 +People think they don't have a moat = everything is open source +Second para: +We actually think these guys have an "invisible moat" +Pre-training data is not released, and makes a huge difference in fine-tuning efficacy +``` + +### Why pretrained data is important? + +> *Owning the pre-trained dataset is crucial as it represents the original distribution.* +Access to the pre-trained dataset acts as a master key to address the critical issue of ["Catastrophic forgetting"](https://en.wikipedia.org/wiki/Catastrophic_interference) in Language Learning Models (LLMs). This phenomenon describes how LLMs lose hold of prior knowledge upon learning new information. Access to the foundational dataset allows for effective fine-tuning, balancing the introduction of new data with the retention of existing knowledge. + +Catastrophic forgetting + +**Figure 1.** Demonstrates the catastrophic forgetting issue: without mixing datasets, AI overfits on new tasks, impairing normal communication. + +### Illustrating Catastrophic Forgetting + +``` +What is fine-tuning +Process of Finetuning (pretrain, instruct, finetune) +Fine-tuning datasets +Risk of catastrophic forgetting +"Why is Pre-trained data important?" +What is pre-training dataset +How does fine-tuning with pre-training dataset differ from when you don't have it +How does it avoid catastrophic forgetting +``` + +Catastrophic forgetting can be visualized as a ball in a multidimensional landscape, where moving towards new knowledge risks losing grasp on the old. +Pre-trained data acts as a map, guiding fine-tuning in a way that incorporates new information while safeguarding existing knowledge. + +Gradient decent + +**Figure 2.** [Gradient decent demonstration](https://en.wikipedia.org/wiki/Gradient_descent) + +### Smoothing Distribution Shifts + +As described above, with the mixture of the pre-trained dataset ensures smoother distribution shifts when introducing new information, as it embodies a comprehensive spectrum of prior knowledge. + +This continuity in knowledge transition helps in maintaining the robustness of the model against sudden changes, akin to providing a more gradual learning curve where the new information is incrementally integrated with the existing knowledge base. + +This concept is supported by the [EleutherAI's research](https://arxiv.org/abs/2403.08763) highlighting the importance of how tasks are sequenced in the learning process, suggesting that introducing dissimilar tasks early on can expand the network's capacity for new information. + +**Table 1.** Final results for English-only 405M parameter models trained with different replay amounts show models with more replay perform better in balancing learning and forgetting (measured as AVG Loss). Notably, just 1% mix with a pre-trained dataset significantly lowers AVG loss, effectively shifting model knowledge from English (the Pile) to German. + +Replay method + +*Note:* **Replay** is the method involves combining the training dataset from the pre-trained model with new task datasets. + +### Acting as a Noise Mask + +The pre-trained data can also serve as a form of "noise masking", similar to techniques used in training [early computer vision models](https://arxiv.org/abs/1911.04252). + +This approach introduces a level of ["noise"](https://arxiv.org/abs/2310.05914) during training, which can prevent the model from overfitting to the new dataset. By retaining a mix of original and new data, the model is exposed to a broader range of scenarios, enhancing its generalization capabilities and robustness across tasks. + +## Solutions + +### Overwholming approach + +Overcoming these challenges requires a balanced approach. One partial method involves inundating the model with extensive, curated data, allowing for comprehensive fine-tuning. While effective, this approach demands significant computational resources, a comprehensive filtering process for low-quality inputs, and an extraordinarily high cost associated with gathering millions of high-quality responses. + +In the open-source community, 2 notable examples of fine-tuning with Mistral as a base model on large datasets collected from top-rated GPT-4 and human responses demonstrate a distribution shift that enhances model performance, including [OpenChat](https://huggingface.co/openchat/openchat-3.5-0106) and [Hermes-Pro](https://huggingface.co/teknium/OpenHermes-2.5-Mistral-7B). + +Openchat results + +**Figure 2.** After fine-tuning with a large amount of data samples, the model's performance improved, outperforming ChatGPT and Grok-1 in some benchmarks. + +### Fully open source model + +- Example: Dolma + olma from allenai + +## Conclusion + +The ownership and strategic use of pre-trained data serve as an invisible moat. It not only enables the tackling of complex challenges like catastrophic forgetting but also provides a baseline for continuous, targeted improvements. Although there is a solution to decomotralize, the cost remains reasonably high. + +Fully open pretrained + open weight + +## Reference +- [Catastrophic forgetting](https://arxiv.org/abs/2308.08747) +- [Simple and Scalable Strategies to Continually Pre-train Large Language Models](https://arxiv.org/abs/2403.08763) +- [Gradient descent](https://en.wikipedia.org/wiki/Gradient_descent) +- [Neftune](https://arxiv.org/abs/2310.05914) +- [Self-training with Noisy Student improves ImageNet classification](https://arxiv.org/abs/1911.04252) + + \ No newline at end of file diff --git a/website/src/content/blog/deepseek-r1-locally.mdx b/website/src/content/blog/deepseek-r1-locally.mdx index 417116b40..5c7ae8f8d 100644 --- a/website/src/content/blog/deepseek-r1-locally.mdx +++ b/website/src/content/blog/deepseek-r1-locally.mdx @@ -1,22 +1,42 @@ --- -title: "Run DeepSeek R1 locally on your device" +title: "Run DeepSeek R1 locally on your device (Beginner-Friendly Guide)" description: "A straightforward guide to running DeepSeek R1 locally regardless of your background." +tags: DeepSeek, R1, local AI, Jan, GGUF, Qwen, Llama +categories: guides date: 2025-01-31 -tags: "DeepSeek, R1, local AI, Jan, GGUF, Qwen, Llama" -categories: "guides" -featured: true -ogImage: "/assets/images/blog/deepseek-r1-locally-jan.jpg" +ogImage: assets/deepseek-r1-locally-jan.jpg +twitter: + card: summary_large_image + site: "@jandotai" + title: "Run DeepSeek R1 locally on your device (Beginner-Friendly Guide)" + description: "A straightforward guide to running DeepSeek R1 locally regardless of your background." + image: assets/deepseek-r1-locally-jan.jpg --- -# Run DeepSeek R1 locally on your device +import CTABlog from '@/components/Blog/CTABlog.astro'; +import { Aside } from '@astrojs/starlight/components' -DeepSeek R1 is one of the best open-source models in the market right now, and you can run DeepSeek R1 on your own computer! -> **New to running AI models locally?** Check out our guide on running AI models locally first. It covers essential concepts that will help you better understand this DeepSeek R1 guide. +import deepseekR1LocallyJan from '@/assets/blog/deepseek-r1-locally-jan.jpg'; +import downloadJan from '@/assets/blog/download-jan.jpg'; +import janLibraryDeepseekR1 from '@/assets/blog/jan-library-deepseek-r1.jpg'; +import janHubDeepseekR1 from '@/assets/blog/jan-hub-deepseek-r1.jpg'; +import janRunsDeepseekR1Distills from '@/assets/blog/jan-runs-deepseek-r1-distills.jpg'; + + +# Run DeepSeek R1 locally on your device (Beginner-Friendly Guide) + +DeepSeek R1 running locally in Jan AI interface, showing the chat interface and model settings + +DeepSeek R1 is one of the best open-source models in the market right now, and you can run DeepSeek R1 on your own computer! + + DeepSeek R1 requires data-center level computers to run at its full potential, and we'll use a smaller version that works great on regular computers. -## Why use an optimized version? +Why use an optimized version? - Efficient performance on standard hardware - Faster download and initialization - Optimized storage requirements @@ -33,49 +53,89 @@ Let's walk through each step with detailed instructions. ## Step 1: Download Jan [Jan](https://jan.ai/) is an open-source application that enables you to run AI models locally. It's available for Windows, Mac, and Linux. For beginners, Jan is the best choice to get started. +Jan AI interface, showing the download button + 1. Visit [jan.ai](https://jan.ai) 2. Download the appropriate version for your operating system -3. Install the application following the standard installation process for your OS +3. Install the app -## Step 2: Choose Your DeepSeek R1 Model +## Step 2: Choose Your DeepSeek R1 Version -Once Jan is installed, you'll need to select which version of DeepSeek R1 to download. Different versions have different system requirements: +To run AI models like DeepSeek R1 on your computer, you'll need something called VRAM (Video Memory). Think of VRAM as your computer's special memory for handling complex tasks like gaming or, in our case, running AI models. It's different from regular RAM - VRAM is part of your graphics card (GPU). -- **DeepSeek R1 7B**: Good for most computers (8GB+ RAM recommended) -- **DeepSeek R1 14B**: Better performance, needs more resources (16GB+ RAM) -- **DeepSeek R1 32B**: Best performance, requires powerful hardware (32GB+ RAM) + + +Let's first check how much VRAM your computer has. Don't worry if it's not much - DeepSeek R1 has versions for all kinds of computers! + +Finding your VRAM is simple: +- On Windows: Press `Windows + R`, type `dxdiag`, hit Enter, and look under the "Display" tab +- On Mac: Click the Apple menu, select "About This Mac", then "More Info", and check under "Graphics/Displays" +- On Linux: Open Terminal and type `nvidia-smi` for NVIDIA GPUs, or `lspci -v | grep -i vga` for other graphics cards + + + +Once you know your VRAM, here's what version of DeepSeek R1 will work best for you. If you have: +- 6GB VRAM: Go for the 1.5B version - it's fast and efficient +- 8GB VRAM: You can run the 7B or 8B versions, which offer great capabilities +- 16GB or more VRAM: You have access to the larger models with enhanced features + +Available versions and basic requirements for DeepSeek R1 distills: + +| Version | Model Link | Required VRAM | +|---------|------------|---------------| +| Qwen 1.5B | [DeepSeek-R1-Distill-Qwen-1.5B-GGUF](https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-1.5B-GGUF) | 6GB+ | +| Qwen 7B | [DeepSeek-R1-Distill-Qwen-7B-GGUF](https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF) | 8GB+ | +| Llama 8B | [DeepSeek-R1-Distill-Llama-8B-GGUF](https://huggingface.co/unsloth/DeepSeek-R1-Distill-Llama-8B-GGUF) | 8GB+ | +| Qwen 14B | [DeepSeek-R1-Distill-Qwen-14B-GGUF](https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-14B-GGUF) | 16GB+ | +| Qwen 32B | [DeepSeek-R1-Distill-Qwen-32B-GGUF](https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-32B-GGUF) | 16GB+ | +| Llama 70B | [DeepSeek-R1-Distill-Llama-70B-GGUF](https://huggingface.co/unsloth/DeepSeek-R1-Distill-Llama-70B-GGUF) | 48GB+ | + +To download your chosen model: + +Launch Jan and navigate to Jan Hub using the sidebar + +Jan AI interface, showing the model library + +3. Input the model link in this field: + +Jan AI interface, showing the model link input field ## Step 3: Configure Model Settings +When configuring your model, you'll encounter quantization options: -After downloading your chosen model, you can adjust settings to optimize performance: + -- **Context Length**: How much conversation history the model remembers -- **Temperature**: Controls creativity vs consistency (0.1-1.0) -- **Max Tokens**: Maximum response length +## Step 4: Configure Prompt Template +Final configuration step: -## Step 4: Set Up DeepSeek R1 Prompt Template +1. Access Model Settings via the sidebar +2. Locate the Prompt Template configuration +3. Use this specific format: -DeepSeek R1 works best with proper prompt formatting. Jan handles this automatically, but you can customize it for specific use cases. + -## Start Using DeepSeek R1 +This template is for proper communication between you and the model. -Once everything is set up, you can start chatting with DeepSeek R1! The model excels at: +You're now ready to interact with DeepSeek R1: -- Code generation and debugging -- Mathematical reasoning -- Technical writing -- Problem-solving -- General conversation +Jan interface, showing DeepSeek R1 running locally -## Tips for Best Results +## Need Assistance? -1. **Be specific**: Clear, detailed prompts get better responses -2. **Provide context**: Give the model relevant background information -3. **Experiment**: Try different temperature settings for different tasks -4. **Be patient**: Local models may take a moment to respond, especially on slower hardware + -## Conclusion - -Running DeepSeek R1 locally gives you powerful AI capabilities while maintaining complete privacy and control over your data. With Jan, the setup process is straightforward, and you can start experimenting with cutting-edge AI models in minutes. - -Ready to get started? [Download Jan](https://jan.ai/) and begin your local AI journey today! \ No newline at end of file + diff --git a/website/src/content/blog/offline-chatgpt-alternative.mdx b/website/src/content/blog/offline-chatgpt-alternative.mdx index b20666bbc..d6fa07e93 100644 --- a/website/src/content/blog/offline-chatgpt-alternative.mdx +++ b/website/src/content/blog/offline-chatgpt-alternative.mdx @@ -1,115 +1,125 @@ --- title: "Offline ChatGPT: You can't run ChatGPT offline, do this instead" description: "Learn how to use AI offline with Jan - a free, open-source alternative to ChatGPT that works 100% offline on your computer." +tags: AI, ChatGPT alternative, offline AI, Jan, local AI, privacy +categories: guides date: 2025-02-08 -tags: "AI, ChatGPT alternative, offline AI, Jan, local AI, privacy" -categories: "guides" -featured: true -ogImage: "/assets/images/blog/offline-chatgpt-alternatives-jan.jpg" +ogImage: _assets/offline-chatgpt-alternatives-jan.jpg +twitter: + card: summary_large_image + site: "@jandotai" + title: "Offline ChatGPT: You can't run ChatGPT offline, do this instead" + description: "Want to use ChatGPT offline? Learn how to run AI models locally with Jan - free, open-source, and works without internet." + image: _assets/offline-chatgpt-alternatives-jan.jpg --- +import CTABlog from '@/components/Blog/CTABlog.astro'; +import { Aside } from '@astrojs/starlight/components' + + +import offlineChatgptAlternativeAiWithoutInternet from '@/assets/blog/offline-chatgpt-alternative-ai-without-internet.jpg'; + + # Offline ChatGPT: You can't run ChatGPT offline, do this instead ChatGPT is a cloud-based service that requires internet access. However, it's not the only way to use AI. You can run AI models offline on your device with [Jan](https://jan.ai/). It's completely free, open-source, and gives you 100% offline capability. You can even use AI on a plane! -> **Quick Summary:** -> - ChatGPT always needs internet - it can't run offline -> - Jan lets you run AI models 100% offline on your computer -> - It's free and open-source -> - Works on Mac, Windows, and Linux + ## Jan as an offline ChatGPT alternative -Jan lets you use AI offline - no internet connection needed. Here's how to get started with offline AI in 3 simple steps: +Use Jan to chat with AI models without internet access +*Jan lets you use AI offline - no internet connection needed* + +Here's how to get started with offline AI in 3 simple steps: ### 1. Download Jan Go to [jan.ai](https://jan.ai) and download the version for your computer (Mac, Windows, or Linux). It's completely free. +![Download Jan for offline AI use](./_assets/jan.ai.jpg "Get Jan for free and start using AI offline") + ### 2. Download an AI model You'll need an AI model to use AI offline, so download a model from Jan. Once it's on your computer, you don't need internet anymore. -> **Recommended models for beginners:** -> - Llama 3.2 3B: Fast and efficient, works on most computers -> - Phi-3 Mini: Great balance of performance and resource usage -> - Qwen2.5 7B: More capable, needs more RAM +![Choose an AI model that works offline](./_assets/jan-model-selection.jpg "Find the perfect AI model for offline use") +*Select an AI model that matches your needs and computer capabilities* -### 3. Start chatting offline + -## Why choose Jan over ChatGPT for offline use? +### 3. Start using AI offline -| Feature | ChatGPT | Jan | -|---------|---------|-----| -| **Offline capability** | ❌ Requires internet | ✅ 100% offline | -| **Privacy** | ❌ Data sent to OpenAI | ✅ Everything stays local | -| **Cost** | 💰 $20/month for Plus | ✅ Completely free | -| **Customization** | ❌ Limited options | ✅ Full control over models | -| **Data ownership** | ❌ OpenAI owns conversations | ✅ You own everything | +![Chat with AI offline using Jan's interface](./_assets/run-ai-locally-with-jan.jpg "Experience ChatGPT-like interactions without internet") +*Use Jan's clean interface to chat with AI - no internet required* -## What can you do with offline AI? +Once downloaded, you can use AI anywhere, anytime: -With Jan running offline, you can: +- Chat like you do with ChatGPT +- Work on documents offline +- Get coding help without internet +- Keep your conversations private +- Use AI even when servers are down -- **Write and edit documents** without sending data to the cloud -- **Code and debug** while keeping your projects private -- **Brainstorm ideas** without worrying about data collection -- **Learn and research** with complete privacy -- **Use AI on flights** or anywhere without internet +## How to chat with your docs in Jan? -## Common questions about offline AI +To chat with your docs in Jan, you need to activate experimental mode. -### "Is offline AI as good as ChatGPT?" +![Activate experimental mode in Jan's settings](./_assets/chat-with-your-docs-offline-ai.jpg "Enable experimental features to chat with your documents") +*Turn on experimental mode in settings to chat with your docs* -For many tasks, yes! While the largest online models might have slight advantages in some areas, offline models have improved dramatically. Plus, you get: -- Complete privacy -- No internet dependency -- No monthly costs -- Full customization control +After activating experimental mode, simply add your files and ask questions about them. -### "Will it work on my computer?" +![Chat with your documents using Jan](./_assets/chat-with-docs-prompt.jpg "Ask questions about your documents offline") +*Chat with your documents privately - no internet needed* -Jan works on most modern computers: -- **Minimum**: 8GB RAM, 4GB free storage -- **Recommended**: 16GB RAM, 10GB free storage -- **Operating systems**: Windows 10+, macOS 10.15+, Linux +I did this for you and got a reply from a 7B parameter model. If you'd like to learn what "7B" means and understand other local AI terms, check our [guide on running AI models locally](/blog/run-ai-models-locally). -### "How much storage do I need?" +A response from AI, Qwen2.5 7B Instruct Q4: -AI models vary in size: -- Small models (3B parameters): 2-3GB -- Medium models (7B parameters): 4-5GB -- Large models (13B+ parameters): 8GB+ +`This document appears to be about the benefits and advantages of running artificial intelligence (AI) models locally on your device rather than using cloud-based or remote AI services. The key points it highlights include data privacy, offline functionality, freedom from paywalls and restrictions, and giving users full control over their AI models. Additionally, the text mentions that local AI is becoming a new trend and provides a link to a guide for beginners who want to learn more about this topic.` -## Getting started with your first offline AI model +Local AI makes possible offline AI use, so Jan is going to be your first step to get started. -1. **Install Jan** from [jan.ai](https://jan.ai) -2. **Browse the model library** and choose a model that fits your computer -3. **Download your chosen model** (this happens once) -4. **Start chatting** - completely offline! +## Why choose Jan over ChatGPT? -## Advanced tips for power users +1. **True Offline Use:** Unlike ChatGPT, Jan works without internet +2. **100% Private:** Your data never leaves your computer +3. **Free Forever:** No subscriptions or API costs +4. **No Server Issues:** No more "ChatGPT is at capacity" +5. **Your Choice of Models:** Use newer models as they come out -- **GPU acceleration**: If you have a graphics card, Jan can use it to run models faster -- **Multiple models**: Download different models for different tasks -- **Custom settings**: Adjust temperature, context length, and other parameters -- **Import custom models**: Use models from Hugging Face and other sources +**"Is it really free? What's the catch?"** +Yes, it's completely free and open source. Jan is built by developers who believe in making AI accessible to everyone. -## Privacy benefits of offline AI +**"How does it compare to ChatGPT?"** +Modern open-source models like DeepSeek and Mistral are very capable. While they might not match GPT-4, they're perfect for most tasks and getting better every month. -When you use Jan instead of cloud-based AI: -- **No data collection**: Your conversations never leave your device -- **No tracking**: No usage analytics or behavioral profiling -- **No breaches**: Your data can't be hacked if it's not online -- **No censorship**: Use AI without content restrictions -- **No downtime**: Works even when services are down +**"Do I need a powerful computer?"** +If your computer is from the last 5 years, it will likely work fine. You need about 8GB of RAM and 10GB of free space for comfortable usage. -## Conclusion +**"What about my privacy?"** +Everything stays on your computer. Your conversations, documents, and data never leave your device unless you choose to share them. -While you can't run ChatGPT offline, Jan provides an excellent alternative that works entirely on your computer. You get privacy, control, and zero ongoing costs - all while using powerful AI models. +Want to learn more about the technical side? Check our detailed [guide on running AI models locally](/blog/run-ai-models-locally). It's not required to [use AI offline](https://jan.ai/) but helps understand how it all works. -The best part? You can start using offline AI in just a few minutes. +## Need help? -**Ready to try offline AI?** [Download Jan](https://jan.ai/) and experience the freedom of local AI models today! \ No newline at end of file + + + diff --git a/website/src/content/blog/qwen3-settings.mdx b/website/src/content/blog/qwen3-settings.mdx new file mode 100644 index 000000000..0fee2ecc0 --- /dev/null +++ b/website/src/content/blog/qwen3-settings.mdx @@ -0,0 +1,131 @@ +--- +title: "Best Settings to Run Qwen3-30B-A3B Locally" +description: "If you're running Qwen3-30B-A3B locally, don't guess your way through the settings. This guide tells you what actually works based on Qwen's own documentation and what we've seen hold up in practice." +tags: Qwen3, local AI, model settings, Jan, offline AI +categories: guides +date: 2025-05-10 +ogImage: assets/images/general/qwen3-30b-settings.jpg +--- + +import CTABlog from '@/components/Blog/CTABlog.astro'; +import { Aside } from '@astrojs/starlight/components' + + +import qwen3SettingsJanAi from '@/assets/blog/qwen3-settings-jan-ai.jpeg'; +import qwen3InJanHub from '@/assets/blog/qwen3-in-jan-hub.jpeg'; +import qwen3SettingsInJan from '@/assets/blog/qwen3-settings-in-jan.jpeg'; + + +# Best Settings to Run Qwen3-30B-A3B Locally + +If you're running Qwen3-30B-A3B locally, don't guess your way through the settings. This guide tells you what actually works based on Qwen's own documentation and what we've seen hold up in practice. + + + +Qwen3 comes with a unique toggle: `enable_thinking`. When it's on, the model "thinks", it breaks down problems, reasons step-by-step, and wraps part of its output in a `...` block. When it's off, the model skips all that and just gives you an answer. + +That changes how you configure it. + +--- + +### Thinking mode (`enable_thinking=True`) + +This is the mode for reasoning, math, coding, logic — anything that benefits from step-by-step generation. + +**Use these generation settings:** + +``` +Temperature: 0.6 +TopP: 0.95 +TopK: 20 +Max tokens: 32,768 +Do not use greedy decoding +``` + + + + +## Quick summary + +Qwen3 settings + +### Non-thinking mode (`enable_thinking=False`) + +This is for fast, general-purpose replies. Instruction following, chat, creative writing — no `` block, no extra steps. + +**Use these settings:** + +```makefile +Temperature: 0.7 +TopP: 0.8 +TopK: 20 +``` + + + + + +## Soft vs. hard switch + +You can toggle thinking dynamically in the prompt using: + +``` +/think # turns thinking ON +/no_think # turns it OFF +``` + +This works only if `enable_thinking=True` is set in the code. If you set it to False, the soft switch won't do anything. + + + +### What most people miss + +- **Don't log the `think` block in chat history.** Qwen recommends keeping only the final answer. Otherwise, the next reply gets bloated and off-topic. +- **Greedy decoding is a trap.** It's tempting to use for consistency, but Qwen3's output gets worse - and sometimes broken - without sampling. +- **YaRN isn't always needed.** The model supports up to 32k context by default. Use YaRN only if you regularly go beyond that. + +--- + +## Running Qwen3 locally with Jan + +The easiest way to run Qwen3-30B-A3B locally is through Jan. + +1. Download and install [Jan](https://jan.ai) +2. Open Jan and navigate to Jan Hub +3. Find `Qwen3` and `Qwen3-30B-A3B` in the model list +4. Click "Download" to get the model + +### Qwen3 in Jan Hub + +You can easily find Qwen3 models in Jan Hub: + +Qwen3 in Jan Hub + +Once downloaded, Jan handles all the technical setup, so you can focus on using the model rather than configuring it. The settings we covered in this guide are automatically applied when you use Qwen3 through Jan. + +### How to customize Qwen3-30B-A3B settings in Jan + +You can also customize these settings anytime by opening the right panel in Jan and adjusting the parameters to match your needs. + +Qwen3 settings in Jan app + +## Bottom Line + +If you're running Qwen3-30B-A3B locally, treat it like two models in one. Flip the thinking mode based on the task, adjust the generation settings accordingly, and let it work how it was meant to. + +## Need help? + + diff --git a/website/src/content/blog/rag-is-not-enough.mdx b/website/src/content/blog/rag-is-not-enough.mdx new file mode 100644 index 000000000..8d86c3238 --- /dev/null +++ b/website/src/content/blog/rag-is-not-enough.mdx @@ -0,0 +1,134 @@ +--- +title: "RAG is not enough: Lessons from Beating GPT-3.5 on Specialized Tasks with Mistral 7B" +description: We present a straightforward approach to customizing small, open-source models using fine-tuning and RAG that outperforms GPT-3.5 for specialized use cases. +tags: RAG, opensource chatgpt alternative, outperform ChatGPT, Mistral +date: 2024-03-25 +unlisted: true +categories: research +--- + +import CTABlog from '@/components/Blog/CTABlog.astro'; + + +# RAG is not enough: Lessons from Beating GPT-3.5 on Specialized Tasks with Mistral 7B + +## Abstract + +We present a straightforward approach to customizing small, open-source models using fine-tuning and RAG that outperforms GPT-3.5 for specialized use cases. With it, we achieved superior Q&A results of [technical documentation](https://nitro.jan.ai/docs) for a small codebase [codebase](https://github.com/menloresearch/nitro). + +In short, (1) extending a general foundation model like [Mistral](https://huggingface.co/mistralai/Mistral-7B-v0.1) with strong math and coding, and (2) training it over a high-quality, synthetic dataset generated from the intended corpus, and (3) adding RAG capabilities, can lead to significant accuracy improvements. + +Problems still arise with catastrophic forgetting in general tasks, commonly observed during specilizied domain fine-tuning. In our case, this is likely exacerbated by our lack of access to Mistral’s original training dataset and various compression techniques used in our approach to keep the model small. + +## Selecting a strong foundation model + +[Mistral 7B](https://huggingface.co/mistralai/Mistral-7B-v0.1) outshines both [Meta's Llama-2 7B](https://huggingface.co/meta-llama/Llama-2-7b) and [Google's Gemma 7B](https://huggingface.co/google/gemma-7b) in key benchmarks, making it our choice for a base model. Starting with a strong foundation like Mistral allowed us to achieve greater accuracy in our specialized adaptations. + +![image](https://hackmd.io/_uploads/S1TN64kTa.png) + +*Figure 1. Mistral 7B excels in benchmarks, ranking among the top foundational models.* + +*Note: We are not sponsored by the Mistral team, though lots of folks like to run Mistral locally using [Jan](https://jan.ai/)., our desktop client.* + +## Cost effectively improving the base model + +Our technical use case required excellent math capabilities, an area where Mistral can underperform. Thus, we tested a number of Mistral model variants, from foundation models to finetunes to model merges, to find a stronger base model before proceeding to finetuning. + +![image](https://hackmd.io/_uploads/SkYBaVk6a.png) + +*Figure 2: The merged model, Stealth, doubles the mathematical capabilities of its foundational model while retaining the performance in other tasks.* + +We found merging models is quick and cost-effective, enabling fast adjustments based on the result of each iteration. + +We ended up with [Stealth 7B v1.1](https://huggingface.co/jan-hq/stealth-v1.1), a [SLERP](https://github.com/Digitous/LLM-SLERP-Merge) merge of Mistral with the following: + +- [WizardMath](https://huggingface.co/WizardLM/WizardMath-7B-V1.1) for its math capabilities. +- [WizardCoder](https://huggingface.co/WizardLM/WizardCoder-Python-7B-V1.0) for its coding capabilities. +- Our own [Trinity](https://huggingface.co/jan-hq/trinity-v1.2) model for its versatility across general tasks. + +This particular combination yielded the best tradeoff across mathematical & technical reasoning while retaining the most pre-merge performance on general tasks. + +## **DPO finetuning** + +Merging different LLMs can lead to a mixed answering style because each model was originally trained on different types of data. + +Thus, we applied Direct Preference Optimization ([DPO](https://arxiv.org/abs/2305.18290)) using the [Intel's Orca DPO pairs](https://huggingface.co/datasets/Intel/orca_dpo_pairs) dataset, chosen for its helpful answering style in general, math and coding concentration. + +This approach produced a final model - [Stealth 7B v1.2](https://huggingface.co/jan-hq/stealth-v1.2), aligned to our technical preferences and demonstrating minimal loss. + +## **Using our own technical documentation** + +With the base model ready, we started on our specific use case. + +Jan is an open-source project enjoying strong growth, but at one point we began receiving a new support ticket every minute, which quickly overwhelmed our bootstrapped resources. + +So, we directed our efforts toward training a model to answer user questions based on existing technical documentation. + +Specifically, we trained it on on the [Nitro documentation](https://nitro.jan.ai/docs). For context, Nitro is the default inference engine for Jan. It’s a enterprise-ready server implementation of LlamaCPP, written in C++, with multimodal, queues, and other production-level server capabilities. + +It made an interesting corpus because it was rife with post-2023 technical jargon, edge cases, and poor informational layout. + +## Generating training data + +The first step was to transform Nitro’s unstructured format into a synthetic Q&A dataset designed for [instruction tuning](https://arxiv.org/pdf/2109.01652.pdf). + +The text was split into chunks of 300-token segments with 30-token overlaps. This helped to avoid a [lost-in-the-middle](https://arxiv.org/abs/2307.03172) problem where LLM can’t use context efficiently to answer given questions. + +The chunks were then given to GPT-4 with 8k context length to generate 3800 Q&A pairs. The [training dataset](https://huggingface.co/datasets/jan-hq/nitro_binarized_v2) is available on HuggingFace. + +## **Training** + +Training was done with supervised finetuning (SFT) from the [Hugging Face's alignment-handbook](https://github.com/huggingface/alignment-handbook), per [Huggingface's Zephyr Beta](https://github.com/huggingface/alignment-handbook/tree/main/recipes/zephyr-7b-beta) guidelines. + +We used consumer-grade, dual Nvidia RTX 4090s for the training. The end-to-end training took 18 minutes. We found optimal hyperparameters in LoRA for this specific task to be `r = 256` and `alpha = 512`. + +This final model can be found [here on Huggingface](https://huggingface.co/jan-hq/nitro-v1.2-e3). + +![image](https://hackmd.io/_uploads/SJyDTVk6p.png) + +*Figure 3. Using the new finetuned model in [Jan](https://jan.ai/)* + +## Improving results with RAG + +As an additional step, we also added [Retrieval Augmented Generation (RAG)](https://blogs.nvidia.com/blog/what-is-retrieval-augmented-generation/) as an experiment parameter. + +A simple RAG setup was done using **[Llamaindex](https://www.llamaindex.ai/)** and the **[bge-en-base-v1.5 embedding](https://huggingface.co/BAAI/bge-base-en-v1.5)** model for efficient documentation retrieval and question-answering. You can find the RAG implementation [here](https://github.com/menloresearch/open-foundry/blob/main/rag-is-not-enough/rag/nitro_rag.ipynb). + +## Benchmarking the Results + +We curated a new set of [50 multiple-choice questions](https://github.com/menloresearch/open-foundry/blob/main/rag-is-not-enough/rag/mcq_nitro.csv) (MCQ) based on the Nitro docs. The questions had varying levels of difficulty and had trick components that challenged the model's ability to discern misleading information. + +![image](https://hackmd.io/_uploads/By9vaE1Ta.png) + +*Figure 4. Comparation between finetuned model and OpenAI's GPT* + +**Results** + +- GPT-3.5 with RAG: 56.7% +- GPT-4 with RAG: 64.3% +- Merged 7B Model ([Stealth 7B](https://huggingface.co/jan-hq/stealth-v1.3)) with RAG: 47.7% +- Finetuned 7B Model (Nitro 7B) with RAG: 57.8% + +This indicates that with task-specific training, we can improve an open-source, Small Language Model to the level of GPT-3.5 on domain knowledge. + +Notably, the finetuned + RAG approach also demonstrated more consistency across benchmarking, as indicated by its lower standard deviation. + +## Conclusion + +We conclude that this combination of model merging + finetuning + RAG yields promise. This finding is relevant for teams and individuals that need specialized, technical small language models that need to run in resource-constrained or highly secured environments, where GPT may not be an option. + +Anecdotally, we’ve had some success using this model in practice to onboard new team members to the Nitro codebase. + +A full research report with more statistics can be found [here](https://github.com/menloresearch/open-foundry/blob/main/rag-is-not-enough/README.md). + +# References + +- [Catastrophic forgetting](https://arxiv.org/abs/2308.08747) +- [Math specialization](https://arxiv.org/abs/2308.09583) +- [Code specialization](https://arxiv.org/abs/2306.08568) +- [Search specialization](https://github.com/SciPhi-AI/agent-search) +- [Evol Instruct](https://github.com/nlpxucan/WizardLM) +- [Lost in the middle](https://arxiv.org/abs/2307.03172) +- [Instruction tuning](https://arxiv.org/pdf/2109.01652.pdf) + + \ No newline at end of file diff --git a/website/src/content/blog/run-ai-models-locally.mdx b/website/src/content/blog/run-ai-models-locally.mdx new file mode 100644 index 000000000..99934dfab --- /dev/null +++ b/website/src/content/blog/run-ai-models-locally.mdx @@ -0,0 +1,228 @@ +--- +title: "How to run AI models locally as a beginner?" +description: "A straightforward guide to running AI models locally on your computer, regardless of your background." +tags: AI, local models, Jan, GGUF, privacy, local AI +categories: guides +date: 2025-01-31 +ogImage: assets/run-ai-locally-with-jan.jpg +twitter: + card: summary_large_image + site: "@jandotai" + title: "How to run AI models locally as a beginner?" + description: "Learn how to run AI models locally on your computer for enhanced privacy and control. Perfect for beginners!" + image: assets/run-ai-locally-with-jan.jpg +--- + +import CTABlog from '@/components/Blog/CTABlog.astro'; + +import { Aside } from '@astrojs/starlight/components' + + +# How to run AI models locally as a beginner? + +Most people think running AI models locally is complicated. It's not. Anyone can run powerful AI models like DeepSeek, Llama, and Mistral on their own computer. This guide will show you how, even if you've never written a line of code. + +## Quick steps: +### 1. Download [Jan](https://jan.ai) + +![Jan AI's official website showing the download options](./_assets/jan.ai.jpg "Download Jan from the official website - it's free and open source") +*Download Jan from [jan.ai](https://jan.ai) - it's free and open source.* + +### 2. Choose a model that fits your hardware + +![Jan's model selection interface showing various AI models](./_assets/jan-model-selection.jpg "Jan helps you pick the right AI model for your computer") +*Jan helps you pick the right AI model for your computer.* + +### 3. Start using AI locally + +That's all to run your first AI model locally! + +![Jan's simple and clean chat interface for local AI](./_assets/run-ai-locally-with-jan.jpg "Jan's easy-to-use chat interface after installation") +*Jan's easy-to-use chat interface after installation.* + +Keep reading to learn key terms of local AI and the things you should know before running AI models locally. + +## How Local AI Works + +Before diving into the details, let's understand how AI runs on your computer: + + + +![llama.cpp GitHub repository showing its popularity and wide adoption](./_assets/ai-locally-llama.cpp.jpg "llama.cpp is widely used and trusted in the AI community") +*llama.cpp helps millions of people run AI locally on their computers.* + + + +## Understanding AI Models + +Think of AI models like apps on your computer - some are light and quick to use, while others are bigger but can do more things. When you're choosing an AI model to run on your computer, you'll see names like "Llama-3-8B" or "Mistral-7B". Let's break down what this means in simple terms. + + + +![Jan Hub interface showing model sizes and types](./_assets/jan-hub-for-ai-models.jpg "Jan Hub makes it easy to understand different model sizes and versions") +*Jan Hub makes it easy to understand different model sizes and versions* + +**Good news:** Jan helps you pick the right model size for your computer automatically! You don't need to worry about the technical details - just choose a model that matches what Jan recommends for your computer. + +## What You Can Do with Local AI + + + +## Hardware Requirements + +Before downloading an AI model, consider checking if your computer can run it. Here's a basic guide: + +**The basics your computer needs:** +- A decent processor (CPU) - most computers from the last 5 years will work fine +- At least 8GB of RAM - 16GB or more is better +- Some free storage space - at least 5GB recommended + +### What Models Can Your Computer Run? + +| | | | +|---|---|---| +| Regular Laptop | 3B-7B models | Good for chatting and writing. Like having a helpful assistant | +| Gaming Laptop | 7B-13B models | More capable. Better at complex tasks like coding and analysis | +| Powerful Desktop | 13B+ models | Better performance. Great for professional work and advanced tasks | + + + +## Getting Started with Models + +### Model Versions + +When browsing models in Jan, you'll see terms like "Q4", "Q6", or "Q8". Here's what that means in simple terms: + + + +**Pro tip**: Start with Q4 versions - they work great for most people and run smoothly on regular computers! + +### Getting Models from Hugging Face + +You'll often see links to "Hugging Face" when downloading AI models. Think of Hugging Face as the "GitHub for AI" - it's where the AI community shares their models. Jan makes it super easy to use: + +1. Jan has a built-in connection to Hugging Face +2. You can download models right from Jan's interface +3. No need to visit the Hugging Face website unless you want to explore more options + +## Setting up your local AI + +### Getting Models from Hugging Face + +You'll often see links to "Hugging Face" when downloading AI models. Think of Hugging Face as the "GitHub for AI" - it's where the AI community shares their models. This sounds technical, but Jan makes it super easy to use: + +1. Jan has a built-in connection to Hugging Face +2. You can download models right from Jan's interface +3. No need to visit the Hugging Face website unless you want to explore more options + + + +### 1. Get Started +Download Jan from [jan.ai](https://jan.ai) - it sets everything up for you. + +### 2. Get an AI Model + +You can get models two ways: + +#### 1. Use Jan Hub (Recommended): + - Click "Download Model" in Jan + - Pick a recommended model + - Choose one that fits your computer + +![AI model parameters explained](./_assets/jan-model-download.jpg "Jan Hub makes it easy to download AI models") +*Use Jan Hub to download AI models* + +#### 2. Use Hugging Face: + + + +##### Step 1: Get the model link +Find and copy a GGUF model link from [Hugging Face](https://huggingface.co) + +![Finding a GGUF model on Hugging Face](./_assets/hugging-face-jan-model-download.jpg "Find GGUF models on Hugging Face") +*Look for models with "GGUF" in their name* + +##### Step 2: Open Jan +Launch Jan and go to the Models tab + +![Opening Jan's model section](./_assets/jan-library-deepseek-r1.jpg "Navigate to the Models section in Jan") +*Navigate to the Models section in Jan* + +##### Step 3: Add the model +Paste your Hugging Face link into Jan + +![Adding a model from Hugging Face](./_assets/jan-hub-deepseek-r1.jpg "Paste your GGUF model link here") +*Paste your GGUF model link here* + +##### Step 4: Download +Select your quantization and start the download + +![Downloading the model](./_assets/jan-hf-model-download.jpg "Choose your preferred model size and download") +*Choose your preferred model size and download* + +### Common Questions + +**"My computer doesn't have a graphics card - can I still use AI?"** + +Yes! It will run slower but still work. Start with 7B models. + +**"Which model should I start with?"** + +Try a 7B model first - it's the best balance of smart and fast. + +**"Will it slow down my computer?"** + +Only while you're using the AI. Close other big programs for better speed. + +## Need help? + + diff --git a/website/src/content/changelog/2023-12-21-faster-inference-across-platform.mdx b/website/src/content/changelog/2023-12-21-faster-inference-across-platform.mdx new file mode 100644 index 000000000..fba4f1b3e --- /dev/null +++ b/website/src/content/changelog/2023-12-21-faster-inference-across-platform.mdx @@ -0,0 +1,17 @@ +--- +title: "Faster inference across: Mac, Windows, Linux, and GPUs" +version: 0.4.3 +description: "" +date: 2023-12-21 +ogImage: "/assets/images/changelog/Jan_v0.4.3.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +### Highlights 🎉 + +- Custom models: `Trinity`, `Pandora` (great for general use). +- Faster inference across: Mac, Windows, Linux, and GPUs. +- Connect to remote OpenAI models like GPT4 via API key. \ No newline at end of file diff --git a/website/src/content/changelog/2024-01-16-settings-options-right-panel.mdx b/website/src/content/changelog/2024-01-16-settings-options-right-panel.mdx new file mode 100644 index 000000000..b48fd4601 --- /dev/null +++ b/website/src/content/changelog/2024-01-16-settings-options-right-panel.mdx @@ -0,0 +1,20 @@ +--- +title: "Thread settings options in the right panel" +version: 0.4.4 +description: "" +date: 2024-01-16 +ogImage: "" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +### Highlights 🎉 + +- You can now see whether the model is compatible with running on your device. +- You can switch model mid-threads. +- More thread settings options in the right panel. +- CI automation, anti-virus checks. +- Social media access to Jan's Discord & Github from the app for further user support. +- Fixed major bugs, more stability. \ No newline at end of file diff --git a/website/src/content/changelog/2024-01-29-local-api-server.mdx b/website/src/content/changelog/2024-01-29-local-api-server.mdx new file mode 100644 index 000000000..d90ae00b2 --- /dev/null +++ b/website/src/content/changelog/2024-01-29-local-api-server.mdx @@ -0,0 +1,23 @@ +--- +title: "Local API server" +version: 0.4.5 +description: "" +date: 2024-01-29 +ogImage: "/assets/images/changelog/Jan_v0.4.5.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +### Highlights 🎉 + +- Local API Server: Experience Jan's dashboard for the local API server to make your data processing smoother and more efficient. +- HTTP Proxy Support: Now, downloading and connecting are seamless, just like browsing Hugging Face in your browser. +- Updated Settings Page: Find what you need faster! We've updated the settings page. + +### Fixes 💫 + +- Auto Update: Enjoy smoother updates. We've fixed the glitches. +- Swagger API Page: Full documentation, no more blanks. +- GPU for Models: Your imported models now fully leverage GPU power. \ No newline at end of file diff --git a/website/src/content/changelog/2024-02-05-jan-data-folder.mdx b/website/src/content/changelog/2024-02-05-jan-data-folder.mdx new file mode 100644 index 000000000..caf9dec98 --- /dev/null +++ b/website/src/content/changelog/2024-02-05-jan-data-folder.mdx @@ -0,0 +1,22 @@ +--- +title: "Jan Data Folder" +version: 0.4.6 +description: "" +date: 2024-02-05 +ogImage: "/assets/images/changelog/jan_product_update_feature.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +### Highlights 🎉 + +- `Changing Jan Data Folder`: Now, moving your data across different folders is just a click away, making organization simpler. So you can even use an external drive. +- Factory Settings: You can reset all of Jan's usage data for a fresh start. + +### Fixes 💫 + +- Easily see each thread's last update time, like WhatsApp, keeping you informed. +- A new loading screen during data migration ensures the app is responsive. +- Enhanced notifications for clearer feedback on model runs or errors. diff --git a/website/src/content/changelog/2024-02-10-jan-is-more-stable.mdx b/website/src/content/changelog/2024-02-10-jan-is-more-stable.mdx new file mode 100644 index 000000000..35e96f35f --- /dev/null +++ b/website/src/content/changelog/2024-02-10-jan-is-more-stable.mdx @@ -0,0 +1,27 @@ +--- +title: "Jan is more stable 👋" +version: 0.5.5 +description: "Jan supports Llama 3.2 and Qwen 2.5" +date: 2024-10-02 +ogImage: "/assets/images/changelog/jan-v0.5.5.jpeg" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +Highlights 🎉 + +- Meta's Llama 3.2 and Alibaba's Qwen 2.5 added to the hub +- Improved starter screen +- Better local vs. cloud model navigation + +Fixes 💫 + +- Solved GPU acceleration for GGUF models +- Improved model caching & threading +- Resolved input & toolbar overlaps + +Update your product or download the latest: https://jan.ai + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.5). \ No newline at end of file diff --git a/website/src/content/changelog/2024-02-26-home-servers-with-helm.mdx b/website/src/content/changelog/2024-02-26-home-servers-with-helm.mdx new file mode 100644 index 000000000..768c3f7bd --- /dev/null +++ b/website/src/content/changelog/2024-02-26-home-servers-with-helm.mdx @@ -0,0 +1,24 @@ +--- +title: "Run Jan on your home-servers with Helm" +version: 0.4.7 +description: "" +date: 2024-02-26 +ogImage: "" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +### Highlights 🎉 + +- Run Jan on your `home-servers` with `Helm` +- Use Jan headless or with a Web UI +- `Intel Arc` & `AMD GPU` support through `Vulkan` & `LlamaCPP` + + +### Features & Fixes 💫 + +- 48 fixes, refactoring and stability improvements. +- Conversation threads are auto-summarized & messages are editable. +- Encountering an error? We've replaced vague alerts with a troubleshooting assistant. \ No newline at end of file diff --git a/website/src/content/changelog/2024-03-06-ui-revamp-settings.mdx b/website/src/content/changelog/2024-03-06-ui-revamp-settings.mdx new file mode 100644 index 000000000..dd48c7fbb --- /dev/null +++ b/website/src/content/changelog/2024-03-06-ui-revamp-settings.mdx @@ -0,0 +1,27 @@ +--- +title: "New UI & Codestral Support" +version: 0.5.0 +description: "Revamped Jan's UI to make it clearer and more user-friendly" +date: 2024-06-03 +ogImage: "/assets/images/changelog/jan_v0.5.0.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +Revamped Jan's UI to make it clearer and more user-friendly. + +- Updated Assistant, Model, and Tools sections +- Categorized customization options for easier control +- New settings for models, APIs, and experimental features + +## New Model: Codestral + +Jan now supports Mistral's new model Codestral. Thanks [Bartowski](https://huggingface.co/bartowski) for the GGUF model. You can download the model from the hub. + +## More GGUF models + +More GGUF models can run in Jan - we rebased to llama.cpp b3012.Big thanks to [ggerganov](https://github.com/ggerganov) + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.0). diff --git a/website/src/content/changelog/2024-03-11-import-models.mdx b/website/src/content/changelog/2024-03-11-import-models.mdx new file mode 100644 index 000000000..1d51fe087 --- /dev/null +++ b/website/src/content/changelog/2024-03-11-import-models.mdx @@ -0,0 +1,22 @@ +--- +title: "Import models directly using the UI" +version: 0.4.8 +description: "" +date: 2024-03-11 +ogImage: "" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +### Highlights 🎉 + +- Import models directly using the UI +- A revamped system monitor + +### Features & Fixes 💫 + +- Install Jan using Homebrew on Mac Silicon (thanks to https://github.com/chenrui333 (I'll tag you when I find your Discord handle! :D)). +- Fixed an HTTP Proxy issue causing download errors. +- UI Improvements and more. \ No newline at end of file diff --git a/website/src/content/changelog/2024-03-19-nitro-tensorrt-llm-extension.mdx b/website/src/content/changelog/2024-03-19-nitro-tensorrt-llm-extension.mdx new file mode 100644 index 000000000..817c5a091 --- /dev/null +++ b/website/src/content/changelog/2024-03-19-nitro-tensorrt-llm-extension.mdx @@ -0,0 +1,18 @@ +--- +title: "Nitro-Tensorrt-LLM Extension" +version: 0.4.9 +description: "" +date: 2024-03-19 +ogImage: "" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +### Highlights 🎉 + +- Nitro-Tensorrt-LLM Extension. +- Update models.json. +- Move tensorrt executable to the engine. + diff --git a/website/src/content/changelog/2024-04-02-groq-api-integration.mdx b/website/src/content/changelog/2024-04-02-groq-api-integration.mdx new file mode 100644 index 000000000..aabcb0ef1 --- /dev/null +++ b/website/src/content/changelog/2024-04-02-groq-api-integration.mdx @@ -0,0 +1,22 @@ +--- +title: "Groq API Integration" +version: 0.4.10 +description: "" +date: 2024-04-02 +ogImage: "/assets/images/changelog/jan_update_groq.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +### Highlights 🎉 + +- Groq API Integration +- Enhanced hardware troubleshooting guide + +### Features & Fixes 💫 + +- Improved Jan data folder's functionality. +- Fixed URI malformed and `stop` parameter error. +- VRAM-aware model recommendations. \ No newline at end of file diff --git a/website/src/content/changelog/2024-04-15-new-mistral-extension.mdx b/website/src/content/changelog/2024-04-15-new-mistral-extension.mdx new file mode 100644 index 000000000..97fd9541e --- /dev/null +++ b/website/src/content/changelog/2024-04-15-new-mistral-extension.mdx @@ -0,0 +1,18 @@ +--- +title: "New Mistral Extension" +version: 0.4.11 +description: "Jan has a new Mistral Extension letting you chat with larger Mistral models via Mistral API" +date: 2024-04-15 +ogImage: "/assets/images/changelog/jan_mistral_api.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +### Highlights 🎉 + +- Jan has a new `Mistral Extension` letting you chat with larger Mistral models via Mistral API. You can still run smaller Mistral models locally, but now there's a remote option. +- 3rd party extensions can register their own settings pages in the app without any code. +- You can now change set API Prefix for the local API server. +- You can now customize your Assistant's name in Thread Settings. diff --git a/website/src/content/changelog/2024-04-25-llama3-command-r-hugginface.mdx b/website/src/content/changelog/2024-04-25-llama3-command-r-hugginface.mdx new file mode 100644 index 000000000..a2cbdc5b3 --- /dev/null +++ b/website/src/content/changelog/2024-04-25-llama3-command-r-hugginface.mdx @@ -0,0 +1,31 @@ +--- +title: 'Jan now supports Llama3 and Command R+' +version: 0.4.12 +description: "Jan has added compatibility with Llama3 & Command R+" +date: 2024-04-25 +ogImage: "/assets/images/changelog/jan_llama3.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +Jan has added compatibility with Meta’s open-source language model, `Llama3`, through the integration with `llamacpp` (thanks to [@ggerganov](https://github.com/ggerganov)). + +Additionally, `Command R+` is now supported. It is the first open-source model to surpass GPT-4 on the [LMSys leaderboard](https://chat.lmsys.org/?leaderboard). + +![Commandr](/assets/images/changelog/jan_cohere_commandr.gif) + +## Import Huggingface models directly + +Users can now import Huggingface models into Jan. Simply copy the model’s link from Huggingface and paste it into the search bar on Jan Hub. + +![HugginFace](/assets/images/changelog/jan_hugging_face.gif) + +## Enhanced LaTeX understanding + +Jan now understands LaTeX, allowing users to process and understand complex mathematical expressions more effectively. + +![Latex](/assets/images/changelog/jan_update_latex.gif) + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.4.12). diff --git a/website/src/content/changelog/2024-05-20-llamacpp-upgrade-new-remote-models.mdx b/website/src/content/changelog/2024-05-20-llamacpp-upgrade-new-remote-models.mdx new file mode 100644 index 000000000..531e5948e --- /dev/null +++ b/website/src/content/changelog/2024-05-20-llamacpp-upgrade-new-remote-models.mdx @@ -0,0 +1,31 @@ +--- +title: "Jan now supports more GGUF models" +version: 0.4.13 +description: "We rebased to llamacpp b2865." +date: 2024-05-20 +ogImage: "/assets/images/changelog/jan_v0.4.13_update.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +With this release, more GGUF models should work now! We rebased to llamacpp b2865! + +## New remote models: Anthropic & Cohere APIs + +Jan now supports `Anthropic API` models `Command R` and `Command R+`, along with `Cohere`'s `Claude 3 Opus`, `Claude 3 Sonnet`, and `Claude 3 Haiku`. + +## New integrations: Martian and OpenRouter + +Jan supports `Martian`, a dynamic LLM router that routes between multiple models and allows users to reduce costs by 20% to 97%. Jan also supports `OpenRouter`, helping users select the best model for each query. + +![New_Integrations](/assets/images/changelog/jan_v0.4.13_update.gif) + +## GPT-4o Access + +Users can now connect to OpenAI's new model GPT-4o. + +![GPT4o](/assets/images/changelog/jan_v0_4_13_openai_gpt4o.gif) + +For more details, see the [GitHub release notes.](https://github.com/menloresearch/jan/releases/tag/v0.4.13) diff --git a/website/src/content/changelog/2024-05-28-cohere-aya-23-8b-35b-phi-3-medium.mdx b/website/src/content/changelog/2024-05-28-cohere-aya-23-8b-35b-phi-3-medium.mdx new file mode 100644 index 000000000..8c976106a --- /dev/null +++ b/website/src/content/changelog/2024-05-28-cohere-aya-23-8b-35b-phi-3-medium.mdx @@ -0,0 +1,19 @@ +--- +title: "Jan now compatible with Aya 23 8B & 35B and Phi-3-Medium" +version: 0.4.14 +description: "Jan now supports Cohere's Aya 23 8B & 35B and Microsoft's Phi-3-Medium." +date: 2024-05-28 +ogImage: "/assets/images/changelog/jan-v0-4-14-phi3.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +Jan now supports `Cohere`'s new models `Aya 23 (8B)` & `Aya 23 (35B)` and `Microsoft`'s `Phi-3-Medium`. + +More GGUF models can run in Jan - we rebased to llama.cpp b2961. + +Huge shoutouts to [ggerganov](https://github.com/ggerganov) and contributors for llama.cpp, and [Bartowski](https://huggingface.co/bartowski) for GGUF models. + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.4.14). diff --git a/website/src/content/changelog/2024-06-21-nvidia-nim-support.mdx b/website/src/content/changelog/2024-06-21-nvidia-nim-support.mdx new file mode 100644 index 000000000..13191a869 --- /dev/null +++ b/website/src/content/changelog/2024-06-21-nvidia-nim-support.mdx @@ -0,0 +1,29 @@ +--- +title: "Jan supports NVIDIA NIM" +version: 0.5.1 +description: "Jan has integrated NVIDIA NIM and supports Qwen 2 7B" +date: 2024-06-21 +ogImage: "/assets/images/changelog/jan_nvidia_nim_support.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +## NVIDIA NIM + +We've integrated NVIDIA NIM support. + +## Qwen 2 7B + +You can now access Qwen 2 7B directly in the Jan Hub. + +We've updated to llama.cpp b3088 for better performance - thanks to [GG](https://github.com/ggerganov) + +## Fixes + +- Fixed Anthropic API error +- Reduced chat font weight (back to normal!) +- Restored the maximize button + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.1). diff --git a/website/src/content/changelog/2024-07-15-claude-3-5-support.mdx b/website/src/content/changelog/2024-07-15-claude-3-5-support.mdx new file mode 100644 index 000000000..d13228a43 --- /dev/null +++ b/website/src/content/changelog/2024-07-15-claude-3-5-support.mdx @@ -0,0 +1,35 @@ +--- +title: "Jan supports Claude 3.5 Sonnet" +version: 0.5.2 +description: "You can run Claude 3.5 Sonnet in Jan" +date: 2024-07-15 +ogImage: "/assets/images/changelog/jan_supports_claude_3_5.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +## Claude 3.5 Sonnet + +We've integrated support for Claude 3.5 Sonnet, you can run Anthropic's latest model in Jan. + +Plus, You can now use optional spell check for chats. There's also a new shortcut for app logs in System Monitor. + +## Fixes + +In this hotfix, we've addressed several issues to improve your Jan experience: + +### Gemma 2B Stability + +Gemma 2B now runs without any issues. + +### Tooltip Hover Functionality + +We've restored the tooltip hover functionality, which makes it easier to access helpful information without any glitches. + +### Right-click Options for Thread Settings + +The right-click options for thread settings are now fully operational again. You can now manage your threads with this fix. + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.2). diff --git a/website/src/content/changelog/2024-09-01-llama3-1-gemma2-support.mdx b/website/src/content/changelog/2024-09-01-llama3-1-gemma2-support.mdx new file mode 100644 index 000000000..debe207bf --- /dev/null +++ b/website/src/content/changelog/2024-09-01-llama3-1-gemma2-support.mdx @@ -0,0 +1,26 @@ +--- +title: "v0.5.3 is out with stability improvements!" +version: 0.5.3 +description: "You can run Llama 3.1 and Gemma 2 in Jan" +date: 2024-08-29 +ogImage: "/assets/images/changelog/janv0.5.3.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +## Llama 3.1 and Gemma 2 Support + +Jan finally supports Meta's Llama 3.1 and Google's Gemma 2. Thanks for the patience folks! + +We've been working on stability issues over the last few weeks. Jan is now more stable. + +### Additional Notes + +- Upgraded the inference engine for better performance +- Model settings now persist across new threads +- Fixed the GPU memory utilization bar +- Some UX and copy improvements + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.3). diff --git a/website/src/content/changelog/2024-09-17-improved-cpu-performance.mdx b/website/src/content/changelog/2024-09-17-improved-cpu-performance.mdx new file mode 100644 index 000000000..6951c8647 --- /dev/null +++ b/website/src/content/changelog/2024-09-17-improved-cpu-performance.mdx @@ -0,0 +1,35 @@ +--- +title: "Jan is faster now" +version: 0.5.4 +description: "Jan has faster CPU inference." +date: 2024-09-17 +ogImage: "/assets/images/changelog/jan-v0.5.4.jpg" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +Over the last few weeks, we've been working on improving Jan's stability. Every update helps us make Jan's experience faster and smoother. +With version 0.5.4, you’ll notice AI running quicker on CPU - better performance all around. + +### Model Downloads +You can now download models directly from the model selector in Threads. No more jumping between different tabs – just pick, download, and get started. + +### Fast CPU Inference +We've addressed the slower inference speeds on CPU, so you'll notice faster processing times, especially when using larger models. + +### Model Starts +We tackled the notorious "model can't start / The specified module could not be found" error. +Plus, Phi-3 models are now working smoothly even if you're using an outdated version. + +### Consistent Warnings +Performance warnings are now aligned between Model Hub and Threads, giving you more reliable insights no matter where you're working. + +### Persistent Thread Settings +Switching between threads used to reset your instruction settings. That’s fixed now! Your settings will stay intact as you jump between old and new threads. + +### Minor UI Tweaks & Bug Fixes +We’ve also resolved issues with the input slider on the right panel and tackled several smaller bugs to keep everything running smoothly. + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.4). diff --git a/website/src/content/changelog/2024-10-24-jan-stable.mdx b/website/src/content/changelog/2024-10-24-jan-stable.mdx new file mode 100644 index 000000000..9acc7f31e --- /dev/null +++ b/website/src/content/changelog/2024-10-24-jan-stable.mdx @@ -0,0 +1,26 @@ +--- +title: "Jan has Stable, Beta and Nightly versions" +version: 0.5.7 +description: "This release is mostly focused on bug fixes." +date: 2024-10-24 +ogImage: "/assets/images/changelog/jan-v0.5.7.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +Highlights 🎉 + +- Jan has Stable, Beta and Nightly versions +- Saving instructions for new threads is now stable + +Fixes 💫 + +- Fixed broken links, hardware issues, and multi-modal download +- Resolved text overlap, scrolling, and multi-monitor reset problems +- Adjusted LLava model EOS token and context input + +Update your product or download the latest: https://jan.ai + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.7). \ No newline at end of file diff --git a/website/src/content/changelog/2024-11-22-jan-bugs.mdx b/website/src/content/changelog/2024-11-22-jan-bugs.mdx new file mode 100644 index 000000000..24044abbb --- /dev/null +++ b/website/src/content/changelog/2024-11-22-jan-bugs.mdx @@ -0,0 +1,25 @@ +--- +title: "Model downloads & running issues fixed" +version: 0.5.9 +description: "Jan v0.5.9 is here: fixing what needed fixing." +date: 2024-11-22 +ogImage: "/assets/images/changelog/jan-v0.5.9.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +Jan v0.5.9 is here: fixing what needed fixing + +### Highlights 🎉 + +- Model downloads & running issues fixed +- Document upload bugs resolved +- System glitches addressed: Factory Reset, HTTP Proxy, Hugging Face tokens +- Fixed issues with code blocks in streaming responses +- Improved the UX of the Local API Server page + +Update your product or download the latest: https://jan.ai + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.9). \ No newline at end of file diff --git a/website/src/content/changelog/2024-11.14-jan-supports-qwen-coder.mdx b/website/src/content/changelog/2024-11.14-jan-supports-qwen-coder.mdx new file mode 100644 index 000000000..5f0604cce --- /dev/null +++ b/website/src/content/changelog/2024-11.14-jan-supports-qwen-coder.mdx @@ -0,0 +1,25 @@ +--- +title: "Jan supports Qwen2.5-Coder 14B & 32B" +version: 0.5.8 +description: "Jan v0.5.8 is out: Jan supports Qwen2.5-Coder 14B & 32B through Cortex" +date: 2024-11-14 +ogImage: "/assets/images/changelog/jan-v0.5.8.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +Jan v0.5.8 is out: Jan supports Qwen2.5-Coder 14B & 32B through Cortex + +### Highlights 🎉 + +- A new engine: Jan now run models via [Cortex](https://cortex.so) +- SupportsAlibaba_Qwen's Coder 14B & 32B Support +- Supports markdown rendering on user messages + +and various UI/UX enhancements 💫 + +Update your product or download the latest: https://jan.ai + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.8). \ No newline at end of file diff --git a/website/src/content/changelog/2024-12-03-jan-is-faster.mdx b/website/src/content/changelog/2024-12-03-jan-is-faster.mdx new file mode 100644 index 000000000..79f05b12d --- /dev/null +++ b/website/src/content/changelog/2024-12-03-jan-is-faster.mdx @@ -0,0 +1,22 @@ +--- +title: "Jan v0.5.10 is live" +version: 0.5.10 +description: "Jan is faster, smoother, and more reliable." +date: 2024-12-03 +ogImage: "/assets/images/changelog/jan-v0.5.10.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +Jan v0.5.10 is live: Jan is faster, smoother, and more reliable. + +### Highlights 🎉 + +- Resolved model startup issues, memory leaks, and improved token limits +- Clearer error messages and subtle UX improvements + +Update your product or download the latest: https://jan.ai + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.10). \ No newline at end of file diff --git a/website/src/content/changelog/2024-12-05-jan-hot-fix-mac.mdx b/website/src/content/changelog/2024-12-05-jan-hot-fix-mac.mdx new file mode 100644 index 000000000..d79c77b03 --- /dev/null +++ b/website/src/content/changelog/2024-12-05-jan-hot-fix-mac.mdx @@ -0,0 +1,26 @@ +--- +title: "Jan v0.5.11 is here!" +version: 0.5.11 +description: "Critical issues fixed, Mac installation updated." +date: 2024-12-05 +ogImage: "/assets/images/changelog/jan-v0.5.11.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +Jan v0.5.11 is here - critical issues fixed, Mac installation updated. + +### Highlights 🎉 + +- Crashes (markdown & code highlighting) +- Thread switching & auto-scroll +- Syntax highlighting bugs +- API issues (Anthropic, OpenRouter) +- Title glitches with special characters +- Model settings inconsistencies + +Update your product or download the latest: https://jan.ai + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.11). \ No newline at end of file diff --git a/website/src/content/changelog/2024-12-30-jan-new-privacy.mdx b/website/src/content/changelog/2024-12-30-jan-new-privacy.mdx new file mode 100644 index 000000000..0730d6577 --- /dev/null +++ b/website/src/content/changelog/2024-12-30-jan-new-privacy.mdx @@ -0,0 +1,28 @@ +--- +title: "Jan gives you full control over your privacy" +version: 0.5.12 +description: "Improved Privacy settings to give full control over analytics" +date: 2024-12-30 +ogImage: "/assets/images/changelog/jan-v0.5.12.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +Jan v0.5.11 is here - critical issues fixed, Mac installation updated. + +### Highlights 🎉 + +- Updated privacy settings with opt-in/out options for Jan Analytics +- Adjustable chat width +- The right sidebar and input box are now optimized for new users + +### Fixes 💫 +- Updated privacy settings with opt-in/out options for Jan Analytics +- Adjustable chat width +- The right sidebar and input box are now optimized for new users + +Update your product or download the latest: https://jan.ai + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.12). \ No newline at end of file diff --git a/website/src/content/changelog/2025-01-06-key-issues-resolved.mdx b/website/src/content/changelog/2025-01-06-key-issues-resolved.mdx new file mode 100644 index 000000000..40e541c2a --- /dev/null +++ b/website/src/content/changelog/2025-01-06-key-issues-resolved.mdx @@ -0,0 +1,23 @@ +--- +title: "A few key issues have been solved!" +version: 0.5.13 +description: "Jan v0.5.13 is here: A few key issues have been solved." +date: 2025-01-06 +ogImage: "/assets/images/changelog/jan-v0-5-13.jpg" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +👋 Jan v0.5.13 is here: A few key issues have been solved! + +### Highlights 🎉 + +- Resolved model loading issues on MacOS Intel +- Fixed app resetting max_tokens to 8192 on new threads - now uses model settings +- Fixed Vulkan settings visibility for some users + +Update your product or download the latest: https://jan.ai + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.13). diff --git a/website/src/content/changelog/2025-01-23-deepseek-r1-jan.mdx b/website/src/content/changelog/2025-01-23-deepseek-r1-jan.mdx new file mode 100644 index 000000000..3006588b8 --- /dev/null +++ b/website/src/content/changelog/2025-01-23-deepseek-r1-jan.mdx @@ -0,0 +1,36 @@ +--- +title: "Run DeepSeek R1 Distills error-free!" +version: 0.5.14 +description: "Jan v0.5.14 is out: Run DeepSeek R1 Distills error-free!" +date: 2025-01-23 +ogImage: "/assets/images/changelog/jan-v0-5-14-deepseek-r1.jpg" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +👋 Jan v0.5.14 is out: Run DeepSeek R1 Distills error-free! + +You can run DeepSeek R1 distills in Jan error-free. Follow our [step-by-step guide to run DeepSeek R1 locally](/blog/deepseek-r1-locally) and get this AI model running on your device in minutes. + +llama.cpp version updated via Cortex—thanks to GG & llama.cpp community! + +- Paste GGUF links into Jan Hub to download +- Already downloaded the model but facing issues? Update Jan. + +Models: + +Qwen +- DeepSeek-R1-Distill-Qwen-1.5B-GGUF: https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-1.5B-GGUF +- DeepSeek-R1-Distill-Qwen-7B-GGUF: https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF +- DeepSeek-R1-Distill-Qwen-14B-GGUF: https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-14B-GGUF +- DeepSeek-R1-Distill-Qwen-32B-GGUF: https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-32B-GGUF + +Llama +- DeepSeek-R1-Distill-Llama-8B-GGUF: https://huggingface.co/bartowski/DeepSeek-R1-Distill-Llama-8B-GGUF +- DeepSeek-R1-Distill-Llama-70B-GGUF: https://huggingface.co/bartowski/DeepSeek-R1-Distill-Llama-70B-GGUF + +Update your Jan or [download the latest](https://jan.ai/). + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.14). diff --git a/website/src/content/changelog/2025-02-18-advanced-llama.cpp-settings.mdx b/website/src/content/changelog/2025-02-18-advanced-llama.cpp-settings.mdx new file mode 100644 index 000000000..ef2cddacf --- /dev/null +++ b/website/src/content/changelog/2025-02-18-advanced-llama.cpp-settings.mdx @@ -0,0 +1,28 @@ +--- +title: "You can now tweak llama.cpp settings, and add any cloud model!" +version: 0.5.15 +description: "Jan v0.5.15 is out: Advanced llama.cpp settings and cloud model support" +date: 2025-02-18 +ogImage: "/assets/images/changelog/jan-v0-5-15-llamacpp-settings.jpg" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +👋 Jan v0.5.15 is out with exciting new features and improvements! + +## Highlights 🎉 + +- Improved llama.cpp settings for better model control and performance +- Install and use any cloud model seamlessly +- Enhanced hardware controls for better resource management +- New models supported: + - DeepSeek AI + - Google Gemini + - OpenAI o3-mini + - R1 distills + +Update your Jan or [download the latest](https://jan.ai/). + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.15). diff --git a/website/src/content/changelog/2025-03-14-jan-security-patch.mdx b/website/src/content/changelog/2025-03-14-jan-security-patch.mdx new file mode 100644 index 000000000..19d5bbf9e --- /dev/null +++ b/website/src/content/changelog/2025-03-14-jan-security-patch.mdx @@ -0,0 +1,29 @@ +--- +title: "Security fixes and UI improvements" +version: 0.5.16 +description: "Jan v0.5.16 is out: Security fixes and major improvements to Model Hub and chat experience" +date: 2025-03-14 +ogImage: "/assets/images/changelog/jan-v0-5-16-security-patch.jpg" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +👋 Jan v0.5.16 is out: Security fixes (found in Cortex) and a few improvements! + +## Highlights 🎉 + +- Redesigned Model Hub for better user experience +- Faster chat response times +- Cleaner layout and improved model picker +- New model support: + - GPT-4.5 preview + - Claude 3.7 Sonnet + - Gemma 3 + +⚠️ Important: This release includes critical security fixes. We'll share more details about these security improvements soon. + +Update your Jan or [download the latest](https://jan.ai/). + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.16). diff --git a/website/src/content/changelog/2025-05-14-jan-qwen3-patch.mdx b/website/src/content/changelog/2025-05-14-jan-qwen3-patch.mdx new file mode 100644 index 000000000..24d784153 --- /dev/null +++ b/website/src/content/changelog/2025-05-14-jan-qwen3-patch.mdx @@ -0,0 +1,23 @@ +--- +title: "Qwen3 support is now more reliable." +version: 0.5.17 +description: "Jan v0.5.17 is out: Qwen3 support is now more reliable" +date: 2025-05-14 +ogImage: "/assets/images/changelog/jan-v0-5-17-gemm3-patch.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +👋 Jan v0.5.17 is out: Qwen3 support is now more reliable + +## Highlights 🎉 + +- Improved Qwen3 support with cleaner token output +- Clearer install and quickstart docs +- UI polish and bug fixes throughout + +Update your Jan or [download the latest](https://jan.ai/). + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.5.17). diff --git a/website/src/content/changelog/2025-06-15-mcp-revolution.mdx b/website/src/content/changelog/2025-06-15-mcp-revolution.mdx index f25f28860..3bf1b03e4 100644 --- a/website/src/content/changelog/2025-06-15-mcp-revolution.mdx +++ b/website/src/content/changelog/2025-06-15-mcp-revolution.mdx @@ -3,7 +3,7 @@ title: "Jan v0.6.5: MCP Revolution - Connect AI to Everything" version: 0.6.5 description: "Introducing Model Context Protocol support, browser automation, and powerful tool integrations" date: 2025-06-15 -image: "/assets/images/changelog/mcp-revolution.gif" +image: "../../assets/images/changelog/mcp-revolution.gif" featured: true --- @@ -15,7 +15,7 @@ Jan v0.6.5 introduces groundbreaking Model Context Protocol (MCP) support, trans MCP opens up infinite possibilities: - **Universal Tool Access**: Connect to any service that supports MCP -- **Real-time Data**: Access live information from APIs and databases +- **Real-time Data**: Access live information from APIs and databases - **Browser Automation**: Control web browsers directly through AI commands - **File System Access**: Read, write, and manipulate files with AI assistance - **Custom Tools**: Build your own MCP servers for specialized workflows @@ -33,7 +33,7 @@ Launch with powerful integrations: Jan automatically discovers and configures MCP tools: - **Auto-detection**: Finds available MCP servers on your system -- **One-click Setup**: Enable tools with simple toggle switches +- **One-click Setup**: Enable tools with simple toggle switches - **Permission Control**: Fine-grained control over tool access - **Usage Analytics**: Track which tools your AI uses most @@ -85,4 +85,4 @@ The MCP ecosystem is just getting started: Transform how you work with AI. Download Jan v0.6.5 and enter the MCP era. -For technical details, see our [MCP documentation](/docs/mcp) and [GitHub release](https://github.com/menloresearch/jan/releases/tag/v0.6.5). \ No newline at end of file +For technical details, see our [MCP documentation](/docs/mcp) and [GitHub release](https://github.com/menloresearch/jan/releases/tag/v0.6.5). diff --git a/website/src/content/changelog/2025-06-19-jan-ui-revamp.mdx b/website/src/content/changelog/2025-06-19-jan-ui-revamp.mdx new file mode 100644 index 000000000..ae9e2d4f0 --- /dev/null +++ b/website/src/content/changelog/2025-06-19-jan-ui-revamp.mdx @@ -0,0 +1,21 @@ +--- +title: "Jan v0.6.1 is here: It's a whole new vibe!" +version: 0.6.1 +description: "Are you ready for the sexiest UI ever?" +date: 2025-06-19 +ogImage: "/assets/images/changelog/jan-v0.6.1-ui-revamp.png" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +## Highlights 🎉 + +- Jan's been redesigned to be faster, cleaner, and easier to use. +- You can now create assistants with custom instructions and settings from a dedicated tab. +- You can now use Jan with Menlo's models. + +Update your Jan or [download the latest](https://jan.ai/). + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.6.1). \ No newline at end of file diff --git a/website/src/content/changelog/2025-06-26-jan-nano-mcp.mdx b/website/src/content/changelog/2025-06-26-jan-nano-mcp.mdx new file mode 100644 index 000000000..9380c2272 --- /dev/null +++ b/website/src/content/changelog/2025-06-26-jan-nano-mcp.mdx @@ -0,0 +1,21 @@ +--- +title: "Jan v0.6.3 brings new features and models!" +version: 0.6.3 +description: "Unlocking MCP for everyone and bringing our latest model to Jan!" +date: 2025-06-26 +ogImage: "/assets/images/changelog/jn128.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +## Highlights 🎉 + +- We have added Model Context Protocol (MCP) support to the stable build of Jan. It needs to be enabled in the General Settings tab. +- Jan now supports Menlo's latest model, Jan-Nano-128k. +- Some hot fixes and improvements. + +Update your Jan or [download the latest](https://jan.ai/). + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.6.3). \ No newline at end of file diff --git a/website/src/content/changelog/2025-07-17-responsive-ui.mdx b/website/src/content/changelog/2025-07-17-responsive-ui.mdx new file mode 100644 index 000000000..ac27d3630 --- /dev/null +++ b/website/src/content/changelog/2025-07-17-responsive-ui.mdx @@ -0,0 +1,26 @@ +--- +title: "Jan v0.6.5 brings responsive UI and MCP examples!" +version: 0.6.5 +description: "New MCP examples, updated pages, and bug fixes!" +date: 2025-07-17 +ogImage: "/assets/images/changelog/release_v0_6_5.gif" +--- + +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + +## Highlights 🎉 + +Jan v0.6.5 brings responsive UI improvements, enhanced model provider management, and better Linux compatibility alongside +new MCP examples. + +- Support responsive UI on Jan +- Rework of Model Providers UI +- Bump version of llama.cpp +- Fix the bug where fetching models from custom provider can cause app to crash +- AppImage can now render on wayland + mesa + +Update your Jan or [download the latest](https://jan.ai/). + +For more details, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.6.5). \ No newline at end of file diff --git a/website/src/content/changelog/2025-07-31-llamacpp-tutorials.mdx b/website/src/content/changelog/2025-07-31-llamacpp-tutorials.mdx index 7b7c1bc43..fc0310174 100644 --- a/website/src/content/changelog/2025-07-31-llamacpp-tutorials.mdx +++ b/website/src/content/changelog/2025-07-31-llamacpp-tutorials.mdx @@ -3,10 +3,13 @@ title: "Jan v0.6.6: Enhanced llama.cpp integration and smarter model management" version: 0.6.6 description: "Major llama.cpp improvements, Hugging Face provider support, and refined MCP experience" date: 2025-07-31 -image: "/assets/images/changelog/changelog0.6.6.gif" -featured: true +ogImage: "/assets/images/changelog/changelog0.6.6.gif" --- +import ChangelogHeader from '@/components/Changelog/ChangelogHeader.astro' + + + ## Highlights 🎉 Jan v0.6.6 delivers significant improvements to the llama.cpp backend, introduces Hugging Face as a @@ -113,4 +116,4 @@ integrations. Stay tuned! Update your Jan or [download the latest](https://jan.ai/). -For the complete list of changes, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.6.6). \ No newline at end of file +For the complete list of changes, see the [GitHub release notes](https://github.com/menloresearch/jan/releases/tag/v0.6.6). diff --git a/website/src/content/docs/handbook/brand/index.mdx b/website/src/content/docs/handbook/brand/index.mdx new file mode 100644 index 000000000..74f723dc7 --- /dev/null +++ b/website/src/content/docs/handbook/brand/index.mdx @@ -0,0 +1,4 @@ +--- +title: Brand & Identity +asIndexPage: true +--- \ No newline at end of file diff --git a/website/src/content/docs/handbook/comp/bonus.mdx b/website/src/content/docs/handbook/comp/bonus.mdx new file mode 100644 index 000000000..e30321579 --- /dev/null +++ b/website/src/content/docs/handbook/comp/bonus.mdx @@ -0,0 +1,5 @@ +--- +title: "Handbook" +description: "Jan Team Handbook" +--- + diff --git a/website/src/content/docs/handbook/comp/esop.mdx b/website/src/content/docs/handbook/comp/esop.mdx new file mode 100644 index 000000000..7229763d0 --- /dev/null +++ b/website/src/content/docs/handbook/comp/esop.mdx @@ -0,0 +1,23 @@ +--- +title: "ESOP" +description: "Employee Stock Options" +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Shares and Equity + +Jan is [employee-owned](/handbook/why/ownership). The people building Jan own a meaningful percentage of the company over time. + +### Distributions + +Every 6 months, Jan distributes 1% of company equity among its team members: + +- Dec 2023: 1% distributed among 10 team members (1 part-time) +- June 2024: 1% distributed among 15 team members (4 part-time) +- Dec 2024: 1% distributed among 18 team members (5 part-time) + +Distributions are performance-based, and cover both full-time and part-time team members and open source contributors. + +This schedule is subject to change based on the discretion of the board. \ No newline at end of file diff --git a/website/src/content/docs/handbook/comp/index.mdx b/website/src/content/docs/handbook/comp/index.mdx new file mode 100644 index 000000000..99995d129 --- /dev/null +++ b/website/src/content/docs/handbook/comp/index.mdx @@ -0,0 +1,38 @@ +--- +title: "Compensation" +description: "Payment and benefits schemes." +asIndexPage: true +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Compensation + +### Pay + +Everyone at Jan is on the same payscale, with cost of living adjustments based on [location](#location). + +Your base cash pay is determined based on realized impact, not titles. Workstream owners, responsible for the success/failure of a project & team, are compensated more than individual contributors. Folks at the same contribution levels receive equitable base pay. + +Based on your [progression](progression) speed, we have been known to adjust pay frequently and aggressively. + +### Location + +We provide a location adjustment for folks living in a high cost of living area. We use the [Numbeo](https://www.numbeo.com/cost-of-living/) index to arrive at a fair & equitable total. + +### Bonus + +Depending on location, we pay a discretionary cash bonus twice per year. The bonus typically ranges from 5-17% of your base pay, and is based on the company's performance and your individual contribution. + +### ESOP + +We offer an employee stock ownership plan to all full-time employees. The ESOP is a key part of our compensation package and is designed to align everyone's incentives with the long-term success of the company. Read our [ESOP policy](esop). + +### Benefits + +- **Equipment**: After the probation period, you get a $1000-$1500 USD budget for equipment. Eligible items inlude: laptop, monitors, keyboard, mouse, and noise cancelling headphones. Please see our [spending policy](spending) for more details. + +- **AI Subscriptions**: We are an AI native team - the expectation is to use AI to 100x your productivity. You get $100/month towards AI subscriptions and tools. Search `AI API Key Access Instructions` in Discord to get access. + +- **Language & Presentation Skills**: We grant a $100 yearly budget to improve in language skills (eg [Italki](https://www.italki.com/), [Elsa](https://elsaspeak.com/en/), [Cambly](https://www.cambly.com/english?lang=en) tutors, classes and books) diff --git a/website/src/content/docs/handbook/culture/communicate.mdx b/website/src/content/docs/handbook/culture/communicate.mdx new file mode 100644 index 000000000..97455b04d --- /dev/null +++ b/website/src/content/docs/handbook/culture/communicate.mdx @@ -0,0 +1,219 @@ +--- +title: How We Communicate +description: Building a global AI platform requires clear, open communication +--- + +# How We Communicate + +We're a fully-remote team building open superintelligence across continents and cultures. Clear communication isn't just nice to have—it's how we ship fast, stay aligned, and build trust with millions of users. + +## Core Communication Principles + +### Default to Open + +- **Build in Public**: Development discussions happen in open GitHub issues +- **Share Progress**: Daily updates in Discord keep everyone informed +- **Document Decisions**: Important choices are recorded for future reference +- **Learn Together**: Share discoveries, failures, and insights with the team + +### Async First, Sync When Needed + +As a global team, we optimize for asynchronous communication: + +- **GitHub**: Technical discussions, code reviews, feature planning +- **Discord**: Quick questions, daily updates, community engagement +- **Documentation**: Long-form thinking, architectural decisions +- **Meetings**: Only when real-time collaboration adds value + +### Write for Clarity + +With team members from different linguistic backgrounds: + +- **Simple English**: Clear over clever, direct over diplomatic +- **Context Included**: Assume readers lack your specific context +- **Examples Help**: Show, don't just tell +- **Visual Aids**: Diagrams, screenshots, and code samples + +> Good: "The model fails to load on M1 Macs. Here's the error log and steps to reproduce..." +> Bad: "It's broken on Mac." + +## Communication Channels + +### Where to Communicate What + +| Type | Channel | Examples | +|------|---------|----------| +| **Feature Development** | GitHub Issues | New features, bug reports, technical discussions | +| **Daily Updates** | Discord #daily-updates | What you worked on, blockers, discoveries | +| **Quick Questions** | Discord team channels | "Anyone know why X happens?" | +| **Long-form Thinking** | GitHub Discussions / Docs | Architecture proposals, post-mortems | +| **User Support** | Discord #support | Helping users with Jan | +| **Urgent Issues** | Discord + @mention | Production bugs, security issues | + +### Response Time Expectations + +- **GitHub Issues**: Within 24-48 hours +- **Discord Questions**: Best effort, timezone dependent +- **User Bug Reports**: Acknowledge within 24 hours +- **Security Issues**: Immediate escalation + +## Communication Best Practices + +### For Engineers + +``` +✅ DO: +- Comment your code like someone will read it at 3am +- Update documentation when you change behavior +- Share WIP early for feedback +- Close the loop: report back on solutions + +❌ DON'T: +- Assume context that isn't written down +- DM technical discussions (keep them public) +- Wait until perfect to share progress +- Leave PRs without description +``` + +### For Everyone + +**Assume Positive Intent** +- We're all working toward the same goal +- Language barriers can cause misunderstandings +- Ask for clarification before assuming + +**Be Specific** +- "The download button doesn't work" → "The download button on Windows returns 404 for model X" +- "It's slow" → "Model loading takes 45 seconds on 8GB RAM" +- "Users want this" → "15 users requested this in issue #123" + +**Close Loops** +- Follow up on questions you ask +- Update issues with solutions +- Thank people who help you +- Share outcomes of discussions + +## Meetings That Work + +We minimize meetings but when we have them: + +### Before the Meeting +- Share agenda 24 hours prior +- Include pre-read materials +- State desired outcome clearly +- Invite only necessary people + +### During the Meeting +- Start with 5-minute silent reading of materials +- Stick to agenda +- Assign action items with owners +- End 5 minutes early + +### After the Meeting +- Post summary in relevant channel +- Create GitHub issues for action items +- Share recording if applicable + +## Writing Culture + +### Pull Requests + +```markdown +## What +Brief description of changes + +## Why +Context and motivation + +## How +Technical approach + +## Testing +How to verify it works + +## Screenshots +If UI changes +``` + +### Daily Updates + +Keep them brief but informative: + +``` +**Yesterday**: Shipped GGUF loader optimization (30% faster) +**Today**: Working on Windows installer bug #456 +**Blockers**: Need review on PR #789 +**TIL**: Quantization affects different models differently +``` + +### Documentation + +- Write docs as you code +- Include examples users can copy +- Explain the why, not just the how +- Keep it up to date or delete it + +## Community Communication + +When engaging with our open-source community: + +### Be Helpful +- No question is too basic +- Provide context and examples +- Point to relevant documentation +- Follow up on issues + +### Be Humble +- We don't have all the answers +- Users often have great ideas +- Mistakes happen, own them +- Thank contributors publicly + +### Be Human +- Personality is welcome +- Celebrate wins together +- Share the journey +- Build relationships + +## Global Team Considerations + +### Time Zones +- Post updates at consistent times +- Record important discussions +- Rotate meeting times fairly +- Respect off hours + +### Cultural Awareness +- Direct feedback styles vary by culture +- Silence doesn't mean agreement +- Ask if unsure about interpretation +- Celebrate diverse perspectives + +### Language +- English is second language for many +- Avoid idioms and slang +- Use simple, clear language +- Be patient with communication + +## Red Flags to Avoid + +- **Information Hoarding**: Share knowledge freely +- **Private Discussions**: Keep technical talk public +- **Assuming Context**: Document everything +- **Delayed Responses**: Acknowledge even if you can't solve immediately +- **Unclear Communication**: If confused, ask for clarification + +## The Jan Way + +Our communication style reflects our values: +- **Open**: Like our code +- **Inclusive**: Like our community +- **Clear**: Like our mission +- **Async**: Like our architecture +- **Global**: Like our vision + +Good communication at Jan isn't about perfection—it's about clarity, openness, and building together across any distance. + +--- + +*"The best code is documented code. The best decisions are documented decisions. The best team is one that communicates openly."* \ No newline at end of file diff --git a/website/src/content/docs/handbook/culture/fight.mdx b/website/src/content/docs/handbook/culture/fight.mdx new file mode 100644 index 000000000..86fae1b20 --- /dev/null +++ b/website/src/content/docs/handbook/culture/fight.mdx @@ -0,0 +1,3 @@ +--- +title: How We Fight +--- \ No newline at end of file diff --git a/website/src/content/docs/handbook/how/analytics.mdx b/website/src/content/docs/handbook/how/analytics.mdx new file mode 100644 index 000000000..24196379c --- /dev/null +++ b/website/src/content/docs/handbook/how/analytics.mdx @@ -0,0 +1,3 @@ +--- +title: Analytics +--- \ No newline at end of file diff --git a/website/src/content/docs/handbook/how/discord.mdx b/website/src/content/docs/handbook/how/discord.mdx new file mode 100644 index 000000000..e88586341 --- /dev/null +++ b/website/src/content/docs/handbook/how/discord.mdx @@ -0,0 +1,39 @@ +--- +title: "Handbook" +description: "Jan Team Handbook" +--- + +## Internal Tools + +We like to make AI do the boring stuff. We also automate and dogfood our own tools as much as possible. + +### Tools + +- **Github**: For engineering specs, sprint planning, and documentation. +- **Discord**: For chat, voice, and video calls. +- **Google Hangouts**: For a short, daily standup. +- **Gmail**: For external communication. +- **HackMD/Obsidian**: For ad hoc ideas and meeting notes. +- **Excalidraw**: For whiteboarding. +- **Password Manager**: You will be invited. +- **Jan/Cortex**: A personal, private copilot. + +### Infrastructure + +We use a mix of cloud providers and build our on-premises hardware to cut costs and optimize performance. + +- Singapore Cluster: For training and inference. +- Hanoi Cluster: For CI/CD and data pipelines. +- Burst Compute: We like Runpod for larger training runs. + +See [Infra](/handbook/infra/infra) for more details. + +### CI/CD + +We have a dedicated devops/mlops team. Ping in the `infra-internal` channel for any requests. + +### Automations + +We have a dedicated automations engineer. Her goal is to automate yesterday's tasks today, so that you are doing something different tomorrow. + +Ping in the `#automations` channel for any requests. \ No newline at end of file diff --git a/website/src/content/docs/handbook/how/github.mdx b/website/src/content/docs/handbook/how/github.mdx new file mode 100644 index 000000000..30119f188 --- /dev/null +++ b/website/src/content/docs/handbook/how/github.mdx @@ -0,0 +1,18 @@ +--- +title: "Handbook" +description: "Jan Team Handbook" +--- + +## Github + +Building in public is in our organizational DNA. + +We open-source our code, share our learnings, and contribute back to the community. Sometimes it may feel like we're giving away our secret sauce, but we believe that the benefits of transparency and collaboration far outweigh the costs. + +### Build in Public + +- [Daily updates](https://discord.gg/AxypHJRQxd) +- [Project management](https://github.com/orgs/menloresearch/projects/5/views/25) +- [Open weights, open data](https://huggingface.co/homebrewltd) +- [Live training runs](https://discord.gg/BmA5DbxeEb) +- [Monthly community calls](https://discord.gg/J4aQxRUddD?event=1337239895755853846) \ No newline at end of file diff --git a/website/src/content/docs/handbook/how/infra.mdx b/website/src/content/docs/handbook/how/infra.mdx new file mode 100644 index 000000000..d085d5b27 --- /dev/null +++ b/website/src/content/docs/handbook/how/infra.mdx @@ -0,0 +1,3 @@ +--- +title: Infra +--- \ No newline at end of file diff --git a/website/src/content/docs/handbook/how/okrs.mdx b/website/src/content/docs/handbook/how/okrs.mdx new file mode 100644 index 000000000..e30321579 --- /dev/null +++ b/website/src/content/docs/handbook/how/okrs.mdx @@ -0,0 +1,5 @@ +--- +title: "Handbook" +description: "Jan Team Handbook" +--- + diff --git a/website/src/content/docs/handbook/how/sprints.mdx b/website/src/content/docs/handbook/how/sprints.mdx new file mode 100644 index 000000000..b2ae51f5d --- /dev/null +++ b/website/src/content/docs/handbook/how/sprints.mdx @@ -0,0 +1,10 @@ +--- +title: "Handbook" +description: "Jan Team Handbook" +--- + +## Sprints + +[Jan sprints](https://github.com/orgs/menloresearch/projects/5/views/25) are every 2 weeks. + +Releases are QA'd prior to release. We never release on Fridays, unless ya'll wanna come back on Saturday. diff --git a/website/src/content/docs/handbook/hr/1-on-1s.mdx b/website/src/content/docs/handbook/hr/1-on-1s.mdx new file mode 100644 index 000000000..dfa8c914f --- /dev/null +++ b/website/src/content/docs/handbook/hr/1-on-1s.mdx @@ -0,0 +1,25 @@ +--- +title: "One on Ones" +description: "One on Ones." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## 1-on-1s + +We don't schedule recurring 1-on-1s, because in our experience, engineers and researchers [hate it](https://www.reddit.com/r/cscareerquestions/comments/14rkbwv/does_anybody_else_hate_their_11_meetings/). We believe it's better to address issues and provide feedback as they arise. + +If you need to discuss something with us, simply book a time on the founder or team lead's calendar. **We're always available to chat.** + +✅ Do: +- Schedule check-ins as soon as you need them +- Provide honest feedback and criticism (we appreciate it!) + +❌ Don't: +- Wait for a scheduled one-on-one to raise issues +- Ask for confirmation before scheduling a check-in + +### Exceptions + +If you'd like to establish regular check-ins, please let us know and we're very happy to set one up. \ No newline at end of file diff --git a/website/src/content/docs/handbook/hr/interviewing.mdx b/website/src/content/docs/handbook/hr/interviewing.mdx new file mode 100644 index 000000000..4c72dab70 --- /dev/null +++ b/website/src/content/docs/handbook/hr/interviewing.mdx @@ -0,0 +1,51 @@ +--- +title: "Interviewing" +description: "How to interview and hire outliers." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Interviewing + +Our talent pipeline is an organizational moat. This guide walks you through our interviewing process. + +### Process + +Jan's interview process is designed to be self-serve. + +1. **Application**: Candidates apply through our [careers page](https://homebrew.bamboohr.com/careers). We use a combination of AI and human review to shortlist candidates. +2. **Initial Screening**: Shortlisted candidates are invited to a 30-minute initial screening, usually with HR/founder. +3. **2-3 Interviews**: Candidates are interviewed by 2-3 team members. Each interview is 30-45 minutes long. +4. **Founder interview**: The final interview is with one of the founders. This is a 30-minute interview. +5. **Deliberation**: Candidates are evaluated based on their interviews and portfolio. We aim to make a decision within 1 week. + +We aim to be data-driven, and each open role is tracked in our ATS (BambooHR). We use this data to improve our hiring process. + +> Historically, our acceptance rate has been less than 1% of all applications. For direct referrals, this rate is higher at >10%. + +### Preparing for Interviews + +To start interviewing, please follow these steps: + +- [ ] Indicate your interest in helping with interviews to HR. +- [ ] Shadow existing interviews (2-3) to understand our process and ask questions. +- [ ] Create a [Google Appointments link](https://workspace.google.com/intl/en_sg/resources/appointment-scheduling/) for your interviews. Make sure to set a default Google Hangouts link. Share the link with HR. +- [ ] New candidates will automatically schedule interviews with you using the Google Appointments link. +- [ ] If you have an upcoming interview, review their resume and prepare thoughtful questions. +- [ ] Input **detailed evaluations in BambooHR ATS** after each interview. + +### Evaluation + +We do not use a scoring system for interviews and prefer to encourage natural conversation. + +However, if you do need an evaluation template, you can use the following: + +| Criteria | Description | Response | Notes | +|--------------|----------------------------------------|--------------|--------------------------------------------| +| Technical Skills | Proficiency in relevant technical areas (AI, robotics, programming, etc.) indicated in the resume ||| +| Fundamentals | Understanding of core concepts in the candidate's field of expertise (math, statistics, ML, physics, etc.) | | | +| Problem-Solving Ability | Ability to approach and solve complex problems ||| +| Communication Skills | Clarity and effectiveness in communication ||| +| Cultural Fit | Alignment with company [values](/handbook/philosophy/humanity) and [culture](/handbook/who/curiosity) ||| +| Overall Impression | General impression of the candidate's suitability for the role ||| \ No newline at end of file diff --git a/website/src/content/docs/handbook/hr/leave.mdx b/website/src/content/docs/handbook/hr/leave.mdx new file mode 100644 index 000000000..93706bd41 --- /dev/null +++ b/website/src/content/docs/handbook/hr/leave.mdx @@ -0,0 +1,28 @@ +--- +title: "Time Off" +description: "Vacation and unplanned leave policy." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Time Off + +We offer 14 base vacation days, unlimited sick leave, and additional public holidays based on your respective region. + +### Planning Leave + +1. Submit the days in BambooHR at least 1-2 weeks in advance +2. Inform your team as early as possible + +### Public Holidays + +We observe public holidays in our respective countries of residence. You do not need to use vacation days. + +### Illness & Unplanned Leave + +Please submit all sick leave requests in BambooHR with a medical certificate (when applicable). For sick leave longer than 1 week, please inform HR and your team. + +### Parental + +We offer parental leave for eligible staff. Please inform HR to coordinate parental leave. diff --git a/website/src/content/docs/handbook/hr/progression.mdx b/website/src/content/docs/handbook/hr/progression.mdx new file mode 100644 index 000000000..536323854 --- /dev/null +++ b/website/src/content/docs/handbook/hr/progression.mdx @@ -0,0 +1,25 @@ +--- +title: "One on Ones" +description: "One on Ones." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Career Progression + +### Promotions + +We don't believe in titles. We believe in fair compensation and fast progression. + +> Previously, we have been known to organically promote team members 2x within 6 months of joining. + +### Perks + +- Your contributions are Open Source and public +- Speaking opportunities at conferences (we get invited often) +- Direct access to a large network of advisors +- No shortage of hard problems (you don't need to "prove" yourself before working on something interesting) +- Visibility across our hardware, software, and research projects +- Real, blunt feedback, at scale (our users are not shy!) +- Hard, tough, evergreen problems diff --git a/website/src/content/docs/handbook/hr/retreats.mdx b/website/src/content/docs/handbook/hr/retreats.mdx new file mode 100644 index 000000000..06f297be6 --- /dev/null +++ b/website/src/content/docs/handbook/hr/retreats.mdx @@ -0,0 +1,20 @@ +--- +title: "Retreats" +description: "Annual Team Retreat." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Retreats + +We host an annual team retreat to bring the team together, bond, and plan for the year ahead. + +Previous retreats have been held in: +- 2023 (8 people): Ho Chi Minh City, Vietnam +- 2024 (16 people): Singapore +- 2025: TBA! + +## Meetups + +We encourage team members to meet up in person whenever possible. Remote work can get lonely, and we offer a small budget for regional get-togethers. \ No newline at end of file diff --git a/website/src/content/docs/handbook/hr/side-gigs.mdx b/website/src/content/docs/handbook/hr/side-gigs.mdx new file mode 100644 index 000000000..1379e3856 --- /dev/null +++ b/website/src/content/docs/handbook/hr/side-gigs.mdx @@ -0,0 +1,31 @@ +--- +title: "Side Gigs" +description: "Best practices around external engagements." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Side Gigs + +We have a permissive policy regarding side gigs, similar to [Posthog's](https://posthog.com/handbook/people/side-gigs). + +However, our main ask is for Jan to be your "main gig", as you will be taking a crucial role in success/failure of Jan. Manage your time in a way that is fair to the company and your colleagues. + +At the end of the day, you all own (or will own) shares of the company. Handle company IP as you would your own property. + +### Declaration + +**For work in related industries, we do ask for an upfront declaration**, so that we can clear potential conflicts of interest. + +Please fill out the following form and submit it to: `hr@menlo.ai` + +| Dates | Organization | Nature of Work | Hours/week | +|-------------|--------------|----------------|------------| +| | | | | +| | | | | +| | | | | + +### A Note on IP + +Startups & careers die because of IP disputes from moonlighting employees. Please respect all party's IP - never intermingle assets (like laptops and logins) between engagements. \ No newline at end of file diff --git a/website/src/content/docs/handbook/hr/spending.mdx b/website/src/content/docs/handbook/hr/spending.mdx new file mode 100644 index 000000000..145a8b125 --- /dev/null +++ b/website/src/content/docs/handbook/hr/spending.mdx @@ -0,0 +1,40 @@ +--- +title: "Spending" +description: "Spending and reimbursement policy." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Spending + +We are incredibly frugal and intend to be around in 50 years. However, we avoid being "penny-wise & pound-foolish" and spend when it matters. + +### Expenses + +#### Software + +For software subscriptions and other expenses incurred as a part of [benefits](compensation#benefits), please save receipts and submit it as a reimbursement [request](#reimbursements). + +#### Large Purchases + +For larger purchases like equipment, please first submit a purchase request through `#admin-requests` in Discord. + +We can directly order for you or reimburse you for the purchase. + +#### Incidentals + +We don't have a policy for incidentals. We trust you to make the right decisions, while keeping in mind that we are a startup and every dollar counts. + +### Reimbursements + +Reimbursements are processed at the end of every month with payroll. + +Email all receipts (required) & the following form to `finance@menlo.ai`: + +| Date | Description | Amount | Currency | Exchange Rate | Total (USD) | +|------------|-------------|--------|----------|---------------|-------------| +| | | | | | | +| | | | | | | +| | | | | | | +| | | | | Grand Total | | \ No newline at end of file diff --git a/website/src/content/docs/handbook/hr/travel.mdx b/website/src/content/docs/handbook/hr/travel.mdx new file mode 100644 index 000000000..1c2738ad4 --- /dev/null +++ b/website/src/content/docs/handbook/hr/travel.mdx @@ -0,0 +1,23 @@ +--- +title: "Travel" +description: "Travel policy." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Travel + +We encourage team members to represent Jan at conferences and travel for in-person alignment + +For all work travel, we ask that you get approval from HR before confirming your trip & booking flights/hotels. + +### Bookings + +We prefer to directly book flights & hotels on your behalf, through our travel portals. + +If you need to arrange travel by yourself, please obtain a travel budget first. Save all receipts for reimbursement. + +### Per Diem + +Depending on the location, we provide a USD$20 per diem for meals and incidentals. This is incrementable based on the location. \ No newline at end of file diff --git a/website/src/content/docs/handbook/index.mdx b/website/src/content/docs/handbook/index.mdx new file mode 100644 index 000000000..cb68c4790 --- /dev/null +++ b/website/src/content/docs/handbook/index.mdx @@ -0,0 +1,48 @@ +--- +title: "Jan Team Handbook" +description: "Jan is building an open superintelligence platform that runs locally, privately, and offline." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Jan Handbook + +> Jan's Handbook is inspired by [Posthog](https://posthog.com/handbook) and [Gitlab](https://handbook.gitlab.com/). +> Thank you for showing us the way 🙏 + +### Welcome! + +This handbook explains how [Jan](https://jan.ai) works, and is public. + +Jan's Handbook is a [living document](https://en.wikipedia.org/wiki/Living_document), as Jan is constantly evolving. + +## 1. Chapter 1: Why does Jan exist? + +- [What problem are we solving?](/handbook/why/problem) +- [Who we are building for](/handbook/why/icp) +- [Our vision for open superintelligence](/handbook/why/ownership) + +## 2. Chapter 2: How we make money + +- [How we make money](/handbook/money/how) +- [What is our moat](/handbook/money/moat) + +## 3. Chapter 3: Who we hire + +- [The Fast and the Curious](/handbook/who/curiosity) +- [Underdogs Welcome](/handbook/who/underdogs) +- [dy/dx > y-intercept](/handbook/who/dydx) + +## 4. Chapter 4: How we work + +- [Remote-first](/handbook/how/remote) +- [Open-source](/handbook/how/open-source) +- [How we coordinate](/handbook/how/tools) +- [Sprints](/handbook/how/sprints) + +## 5. Chapter 5: Jan's Philosophy + +- [Open Superintelligence Platform](/handbook/philosophy/open-superintelligence) +- [Humanity-aligned](/handbook/philosophy/humanity) +- [Perpetual Optimism is a Force Multiplier](/handbook/philosophy/optimism) \ No newline at end of file diff --git a/website/src/content/docs/handbook/lifecycle/interviewing.mdx b/website/src/content/docs/handbook/lifecycle/interviewing.mdx new file mode 100644 index 000000000..d9a4f3883 --- /dev/null +++ b/website/src/content/docs/handbook/lifecycle/interviewing.mdx @@ -0,0 +1,4 @@ +--- +title: Interviewing at Jan +asIndexPage: true +--- \ No newline at end of file diff --git a/website/src/content/docs/handbook/lifecycle/offboarding.mdx b/website/src/content/docs/handbook/lifecycle/offboarding.mdx new file mode 100644 index 000000000..8e0637e05 --- /dev/null +++ b/website/src/content/docs/handbook/lifecycle/offboarding.mdx @@ -0,0 +1,31 @@ +--- +title: "Offboarding from Jan" +description: "Offboarding Checklist." +asIndexPage: true +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Offboarding + +We are grateful for the time you spent with us. In many cases, you have moved on to start your own companies or to pursue your life's work. We'll be cheering you on from the sidelines and hope you remain part of the Jan community. + +To ensure a seamless transition, we've outlined our offboarding process below. + +### Notice Period + +For voluntary departures past the probation period, we ask for 45 days notice both ways. This is to ensure a smooth transition for the team. We understand that this may not always be possible and will work with you to find a solution. + +### Final Pay + +Final pay & reimbursements will be processed at the end of the month with regular payroll. Unused vacations, equipment, and other considerations will also be netted in the final pay. + +In terms of ESOP, we understand that most people are not in a position to exercise their options within a 90 day period. As a gesture of goodwill, we often grant a lengthy exercise period for good leavers. This is at the discretion of the board and is not guaranteed. + +### Checklist + +- Arrange to return equipment. If you wish to keep your equipment at a discounted rate, please inform HR. +- Assign all ongoing projects & Github issues to a team member. +- Optional: good leavers may request a recommendation letter from HR. +- Optional: request an exit interview to provide feedback on your experience at Jan. \ No newline at end of file diff --git a/website/src/content/docs/handbook/lifecycle/onboarding.mdx b/website/src/content/docs/handbook/lifecycle/onboarding.mdx new file mode 100644 index 000000000..cc19b91d9 --- /dev/null +++ b/website/src/content/docs/handbook/lifecycle/onboarding.mdx @@ -0,0 +1,78 @@ +--- +title: "Onboarding to Jan" +description: "Onboarding Checklist for New Hires." +asIndexPage: true +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +## Onboarding + +Welcome to Jan! We are excited to have you join our team. This guide walks you through the onboarding process. + +> You will receive an onboarding invitation morning of your first day. Prior to the scheduled onboarding call, please send your Github & Discord handles to `hr@menlo.ai`. + +### Expectations + +| Expectation | Description | +|-------------|-------------| +| **Take Initiative** | Take ownership of an area. If you see a problem, take it and own it to completion. Your work will often not be defined. Take the initiative to figure out what needs to be done, seek clarification, and then communicate what your plan to the team. | +| **Bias to Action** | There are many problems to solve. Don't ask for permission or try to build consensus - just take action. After 2-3 months, you should be able to show clear results having turned around a problem-filled area. | +| **Communication** | Clear and timely communication is key. If unsure, ask questions. We are a global team and respect is paramount. Disrespectful behavior is not tolerated. Focus on problem-solving, not personal attacks. Assume Hanlon’s Razor: “Never attribute to malice that which is adequately explained by lack of ~~stupidity~~ communication or ambiguity.” | +| **Mastery** | In this frontier industry, expertise comes from doing. Own your area and build mastery. | + +For more details, see our guides on [remote work](/handbook/how/remote). + +### Code of Conduct + +- **Availability and Communication**: Ensure you are available and engaged during designated work hours and scheduled meetings. +- **Work Environment**: Strive to create a quiet and distraction-free workspace whenever possible, especially on video calls. +- **Video Participation**: Video participation is expected unless there are exceptional circumstances. +- **Dress Code**: Casual attire is perfectly acceptable for meetings, but please exercise good judgment (e.g. no pajamas). +- **Vacations:** Communicate leave at least 2 weeks (1 sprint) in advance via Bamboo. +- **Emergency Leave:** Please inform Daniel, Nicole and HR in your #hr-channel if you require emergency leave. +- **Side Gigs Policy**: See [side-gigs](side-gigs). Please consult with HR on engagements with potential legal & IP implications. +- **Sexual harassment:** We have a zero tolerance policy against behavior of a sexual nature that could reasonably be expected to cause offense or humiliation, e.g. verbal, nonverbal, or physical conduct, via written and electronic communications. + +### Tools + +As much as possible, we build-in-public and use the following tools to asynchronously collaborate: + +- [Github](https://github.com/menloresearch) +- [Jan Discord](https://discord.gg/VSbRN3vwCD) +- [Google Workspace](https://workspace.google.com) +- [Hugging Face](https://huggingface.co/menloresearch) +- Password Manager: You will be invited +- AI Tools and API keys: Coding with AI is heavily encouraged + +### Checklists + +#### Day 1 + +- Sign all HR documents. +- Download and access all tools. +- Check calendar invites: daily standups and TGIF. +- Introduce yourself in the [`#welcome`](https://discord.gg/VSbRN3vwCD) Discord channel. +- Set up your [BambooHR](https://homebrew.bamboohr.com/home) account. +- Set up VPN. Search `VPN access instructions` in Discord for the latest instructions. +- Check out the current sprint in [Github](https://github.com/orgs/menloresearch/projects/5) +- Ask questions in your private `#hr-NAME` channel. + +
+Import **Who's out** (on leave) calendar from BambooHR + +- Go to https://homebrew.bamboohr.com/calendar. Login if needed. +- Click on the gear icon, select **iCal Feeds...** +- Select **Create Calendar Feed** under **Who's Out**. Copy the generated link. +- In Google Calendar, you can import the new calendar from URL. + +
+ +#### Week 1 + +- Post daily updates in the [`#daily-updates`](https://discord.gg/AxypHJRQxd) channel prior to standup. +- Review this [Jan Handbook](https://menlo.ai/handbook). +- Push 1 PR into this Handbook. This a living document! +- Disclose side gigs with potential legal & IP implications to HR. +- Attend TGIF demos on Friday afternoon (6PM GMT+8). diff --git a/website/src/content/docs/handbook/money/how.mdx b/website/src/content/docs/handbook/money/how.mdx new file mode 100644 index 000000000..b88fe5591 --- /dev/null +++ b/website/src/content/docs/handbook/money/how.mdx @@ -0,0 +1,144 @@ +--- +title: "How we make money" +description: "Building a sustainable business around open superintelligence" +--- + +# How we make money + +Jan is building a sustainable business that aligns our incentives with our users' success. We believe the best way to build beneficial AI is to ensure our business model reinforces our values: privacy, ownership, and universal access. + +## Our Business Model + +### 1. Open Core Foundation + +**Jan Desktop is free forever** +- Download and run AI models locally +- No subscriptions, no accounts required +- Full privacy and ownership of your data +- Community-driven development + +This isn't a loss leader—it's our foundation. A thriving open-source community creates: +- Trust through transparency +- Innovation through collaboration +- Distribution without marketing spend +- Feedback loops that improve the product + +### 2. Premium Features & Services + +We monetize through optional add-ons that enhance the Jan experience: + +**Jan Cloud (Coming Soon)** +- Optional cloud sync across devices +- Managed model hosting for teams +- Advanced collaboration features +- Pay only for what you use + +**Enterprise Support** +- Priority support and SLAs +- Custom model deployment +- Air-gapped installations +- Compliance and audit tools + +**Professional Tools** +- Advanced model fine-tuning interfaces +- Team management and permissions +- Analytics and usage insights +- API rate limit increases + +### 3. Model Marketplace + +**Curated Model Hub** +- Premium access to specialized models +- Early access to new model releases +- Commercial licensing for enterprise models +- Revenue sharing with model creators + +We use **Jan Exam** to ensure quality—whether models are free or paid, they must meet our standards. + +### 4. Hardware Integration + +**Optimized Hardware Solutions** +- Pre-configured devices for AI inference +- Plug-and-play AI workstations +- Edge deployment solutions +- Partnership with hardware manufacturers + +### 5. Training & Certification + +**Jan Certified Program** +- Professional certification for developers +- Enterprise training workshops +- Educational institution partnerships +- Community education initiatives + +## Revenue Philosophy + +### What We'll Never Do + +- **Sell your data**: Your conversations remain private +- **Lock you in**: Always provide export and migration tools +- **Paywall core features**: Local AI remains free +- **Compromise on privacy**: No ads, no tracking, no surveillance + +### What We Always Do + +- **Align incentives**: We succeed when you succeed with AI +- **Transparent pricing**: Clear, predictable costs +- **Community first**: Free tier remains fully functional +- **Open standards**: No proprietary lock-in + +## Unit Economics + +Our approach creates sustainable unit economics: + +1. **Zero marginal cost** for open-source users +2. **High-margin** cloud and enterprise services +3. **Network effects** as community grows +4. **Reduced CAC** through open-source distribution + +## The Flywheel + +``` +Open Source Adoption → Community Growth → Better Models → +More Users → Enterprise Adoption → Revenue → Investment in Open Source +``` + +Each turn of the wheel strengthens the next: +- More users improve models through feedback +- Better models attract enterprise customers +- Enterprise revenue funds open development +- Open development attracts more users + +## Long-term Vision + +We're building for a future where: + +- Every organization runs their own AI +- Privacy is the default, not premium +- Open models outperform closed ones +- AI infrastructure is as common as web servers + +Our business model ensures we'll be here to see it through. + +## Current Status + +As of 2024: +- ✅ Sustainable open-source project +- ✅ Growing community adoption +- 🚧 Enterprise features in development +- 🚧 Cloud services in beta +- 📅 Hardware partnerships planned + +## Join Our Mission + +Whether you're a: +- **User**: Your adoption drives our mission +- **Contributor**: Your code shapes our platform +- **Customer**: Your success funds development +- **Partner**: Your integration expands possibilities + +You're part of building the open superintelligence economy. + +--- + +*"The best business model is one where doing the right thing is also the profitable thing. That's what we're building at Jan."* \ No newline at end of file diff --git a/website/src/content/docs/handbook/money/moat.mdx b/website/src/content/docs/handbook/money/moat.mdx new file mode 100644 index 000000000..6c4d0bc34 --- /dev/null +++ b/website/src/content/docs/handbook/money/moat.mdx @@ -0,0 +1,169 @@ +--- +title: "What is our moat?" +description: "Building defensibility through community, trust, and aligned incentives" +--- + +# What is our moat? + +Traditional moats rely on keeping secrets, locking in users, or maintaining technical advantages. Jan's moat is different—it's built on openness, community, and aligned values that are impossible to replicate with a closed approach. + +## Community as Competitive Advantage + +Our strongest moat is our community. While others guard their code, we share everything: + +### Network Effects at Scale +- Every user improves Jan for everyone else +- Bug reports, feature requests, and contributions compound +- Community support scales infinitely +- Local communities solve local problems + +### Trust Through Transparency +- Open source code earns trust closed systems can't buy +- Users verify our privacy claims themselves +- No hidden agendas or dark patterns +- Mistakes are public, fixes are collaborative + +### Innovation Velocity +- Thousands of contributors vs hundreds of employees +- Global perspectives vs Silicon Valley groupthink +- 24/7 development across time zones +- Passionate users become passionate builders + +## Technical Moats + +### Local-First Architecture +While others race to build bigger data centers, we're optimizing for edge computing: +- Years of optimization for consumer hardware +- Deep integration with local systems +- Efficient model quantization expertise +- Cross-platform compatibility knowledge + +### Privacy-Preserving Design +Privacy isn't a feature we added—it's our foundation: +- Architecture that makes surveillance impossible +- No user data to monetize or leak +- Local-first eliminates attack surfaces +- Trust that compounds over time + +### Model Agnostic Platform +We're not tied to any single model: +- Support for all open models +- Jan Exam ensures quality across providers +- Users aren't locked to our models +- Best-in-class always available + +## Business Model Alignment + +Our moat strengthens because our business model reinforces our values: + +### No Conflict of Interest +- We don't profit from user data +- No ads means no perverse incentives +- Success comes from user success +- Premium features enhance, not gatekeep + +### Sustainable Growth +- Open source distribution = zero CAC +- Community support = reduced support costs +- User contributions = free R&D +- Word of mouth = organic growth + +## Cultural Moats + +### Values Alignment +Users choose Jan because they share our values: +- Privacy is non-negotiable +- Ownership matters +- Local-first is the future +- Community over corporation + +### Mission-Driven Team +- We attract talent that believes in the mission +- Lower salaries offset by meaningful work +- Equity alignment with long-term vision +- Cultural fit over pure technical skills + +## The Anti-Moat Strategy + +Paradoxically, our moat comes from not trying to build traditional moats: + +### No Lock-In Creates Loyalty +- Easy to leave = users choose to stay +- Export everything = trust in the platform +- No switching costs = genuine preference +- Freedom of choice = actual choice + +### Open Source as Defense +- Can't be acquired and shut down +- Can't be feature-frozen by new management +- Community can fork if we lose our way +- Immortal through decentralization + +## Compounding Advantages + +Our moats compound over time: + +``` +Year 1: Build trust through transparency +Year 2: Community starts contributing significantly +Year 3: Network effects accelerate development +Year 4: Ecosystem becomes self-sustaining +Year 5: Platform effect makes leaving costly (by choice) +``` + +## What Can't Be Copied + +Competitors can't replicate: + +### Time and Trust +- Years of consistent privacy-first decisions +- Track record of putting users first +- Community relationships built over time +- Reputation for reliability and openness + +### Community Culture +- Shared values and mission +- Collaborative problem-solving approach +- Global perspective on AI needs +- Bottom-up innovation mindset + +### Architectural Decisions +- Local-first can't be bolted onto cloud-first +- Privacy can't be added to surveillance systems +- Community-driven can't be faked by corporations +- Open source commitment can't be half-hearted + +## The Ultimate Moat + +Our ultimate moat is simple: **we're building what we'd want to use**. + +- We're users of our own platform +- We feel the pain points personally +- We can't betray users without betraying ourselves +- Our incentives perfectly align with our community + +## Sustainable Defensibility + +Traditional moats erode: +- Patents expire +- Technical advantages get copied +- Network effects can shift platforms +- Regulations can break monopolies + +Jan's moats strengthen: +- Trust compounds daily +- Community grows stronger +- Values attract like-minded people +- Open source ensures immortality + +## Conclusion + +Our moat isn't about keeping others out—it's about bringing everyone in. By building in the open, aligning our incentives with users, and creating genuine value, we're building defensibility that transcends traditional business strategy. + +The question isn't "How do we prevent competition?" but rather "How do we make competition irrelevant by building something that can't exist any other way?" + +That's our moat: being the platform that puts users first, not because it's good business, but because it's the only way to build the AI future we want to live in. + +--- + +*"The strongest moat is a community that would rebuild you if you disappeared."* \ No newline at end of file diff --git a/website/src/content/docs/handbook/philosophy/humanity.mdx b/website/src/content/docs/handbook/philosophy/humanity.mdx new file mode 100644 index 000000000..e3353dafa --- /dev/null +++ b/website/src/content/docs/handbook/philosophy/humanity.mdx @@ -0,0 +1,68 @@ +--- +title: "Humanity-aligned" +description: "Jan exists because technology lets humanity work as one." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +# Humanity-aligned + +
+ +Our Blessed Kingdom + +> "The imagined community of the nation is always limited and sovereign, yet human connections and cooperation stretch far beyond borders." — Benedict Anderson + +## Why this matters + +- AI is geopolitical. Nation-states compete to control it +- We are concerned about those using AI to stoke division, profit from lies, and spur conflict +- Some of us come from places where war isn't distant—it's family history +- Technology should unite, not divide + +## Who we are + +- Remote team across 7 countries +- Diverse backgrounds, united by mission +- Many of us are [third culture kids](https://en.wikipedia.org/wiki/Third_culture_kid)—growing up between worlds +- We often find ourselves misunderstood: an Asian-majority team, English-speaking, influenced by global philosophies +- Crossroad cultures shape us: + - Turkiye: Europe, Asia, Middle East converge + - Singapore: Trade hub bridging worlds +- We respect each other's cultures and build on shared values + +## Jan's stance + +- Humanity first. We build for people, not governments or factions +- AI should enable: + - Shared prosperity + - Universal education + - Peaceful collaboration +- Technology **must** empower humanity to do more—together + +## The bigger picture + +- Human history is one of scaling cooperation: + - Small-scale [kin groups](https://www.sciencedirect.com/science/article/pii/S0960982219303343) → diverse political formations → [modern nation-states](https://en.wikipedia.org/wiki/Westphalian_system) → global networks + - Empires rose and fell. Nationalism united and divided. Globalization connected and excluded +- History doesn't progress. It moves—messy, cyclical, and full of contradiction +- Technology changes the terrain: + - Like ant colonies forming complex systems from simple interactions, humans have always built networks beyond central control + - Complexity emerges from countless small decisions—but unlike ants, we carry ideologies, ambitions, and fears +- AI is another fork in the road. It can reinforce old hierarchies or dismantle them. It can be used to surveil or to liberate + +## Why we exist + +- 30 people, from different countries, met online to build together +- The internet enables connections that were impossible a generation ago +- Ideas cross borders: an anthropologist in Turkiye collaborates with a roboticist in Saigon +- Jan exists because technology lets humanity work as one + +## Our vision + +- AI can accelerate global coordination and shared progress +- Our goal: help humanity align, collaborate, and solve collective challenges +- Success = contributing to humanity's long arc toward unity + +If our work helps the world coordinate better—even slightly—we've done something that matters diff --git a/website/src/content/docs/handbook/philosophy/lateral.mdx b/website/src/content/docs/handbook/philosophy/lateral.mdx new file mode 100644 index 000000000..98bd17fe3 --- /dev/null +++ b/website/src/content/docs/handbook/philosophy/lateral.mdx @@ -0,0 +1,151 @@ +--- +title: "Lateral Thinking with Proven Technology" +description: "Building the future with battle-tested tools" +--- + +import YouTube from '@/components/YouTube.astro' + +# Lateral Thinking with Proven Technology + +> "Innovation is not about using the newest technology, but about using technology in new ways." — Adapted from Nintendo's philosophy + +## Our Approach + +At Jan, we don't chase the bleeding edge for its own sake. We take proven, battle-tested technologies and combine them in innovative ways to solve real problems. This philosophy shapes everything we build. + +## Why Proven Technology Wins + +### Stability Over Novelty +- **GGUF Format**: We didn't invent a new model format. We adopted the community standard that already works across platforms +- **llama.cpp**: Years of optimization by brilliant minds—why reinvent when we can build upon? +- **Electron + Web Tech**: Proven UI stack that works everywhere, letting us focus on AI innovation +- **SQLite**: The world's most deployed database for local data—perfect for privacy-first architecture + +### Accessibility Through Maturity +When we use proven technology: +- Hardware requirements are well understood +- Optimization paths are clear +- Community knowledge exists +- Documentation is comprehensive +- Edge cases are known + +This means Jan works on more devices, for more people, with fewer surprises. + +## Lateral Innovation Examples + +### Local AI That Actually Works +**Traditional approach**: Build massive cloud infrastructure, require constant internet +**Our approach**: Use proven quantization techniques to run powerful models on consumer hardware + +### Privacy Without Compromise +**Traditional approach**: Complex encryption and privacy theater +**Our approach**: Simply don't collect data. Use local SQLite. Problem solved. + +### Universal Model Support +**Traditional approach**: Proprietary model formats and exclusive partnerships +**Our approach**: Support the open GGUF standard that the community already uses + +### Cross-Platform Without Complexity +**Traditional approach**: Native apps for each platform, massive development overhead +**Our approach**: One codebase using Electron, works everywhere, ships faster + +## The Power of Constraints + +Working with proven technology creates healthy constraints: + +### Resource Efficiency +- Can't throw infinite compute at problems +- Must optimize for consumer hardware +- Forces elegant solutions over brute force +- Makes us accessible globally, not just in rich markets + +### Clear Boundaries +- Known limitations guide design decisions +- Realistic about what's possible today +- Focus on solving real problems now +- Build stepping stones to the future + +### Community Alignment +- Use formats the community knows +- Build on protocols people trust +- Contribute improvements back upstream +- Stand on the shoulders of giants + +## Innovation Through Integration + +Our innovation comes from how we combine proven pieces: + +``` +llama.cpp (proven inference) + + GGUF (standard format) + + Electron (cross-platform UI) + + SQLite (local data) + + MCP (extensibility) + = Jan (accessible AI for everyone) +``` + +Each component is battle-tested. The magic is in the combination. + +## Real Problems, Real Solutions + +This philosophy keeps us grounded: + +### What We Build +- AI that runs on the laptop you already own +- Privacy that doesn't require a PhD to understand +- Tools that work offline in rural areas +- Features users actually need today + +### What We Don't Build +- Exotic architectures that need exotic hardware +- Complex systems that break in simple ways +- Features that demo well but fail in practice +- Solutions looking for problems + +## The Compound Effect + +Using proven technology creates compounding benefits: + +1. **Faster Development**: Less time debugging novel approaches +2. **Better Reliability**: Years of battle-testing by others +3. **Easier Adoption**: Users already understand the patterns +4. **Stronger Ecosystem**: Can leverage existing tools and knowledge +5. **Lower Costs**: Commodity hardware and proven optimizations + +## Learning from History + +Great innovations often use "old" technology in new ways: +- The iPhone used existing touchscreen tech +- Tesla started with laptop batteries +- SpaceX used proven rocket designs more efficiently +- The web succeeded using simple protocols + +Jan follows this tradition: proven AI inference, standard formats, and simple principles—combined in a way that makes AI accessible to everyone. + +## Building for the Long Term + +Proven technology has staying power: +- Standards that last decades +- Protocols that survive company failures +- Formats that outlive their creators +- Communities that maintain forever + +By building on these foundations, Jan can focus on what matters: making AI useful, private, and accessible to everyone. + +## Our Commitment + +We commit to: +- **Practical over Perfect**: Ship what works today +- **Simple over Sophisticated**: Elegant solutions to real problems +- **Proven over Promising**: Build on solid foundations +- **Accessible over Advanced**: Reach everyone, not just enthusiasts + +## The Future is Already Here + +The technologies needed for private, local AI already exist. They're proven, optimized, and ready. Our job isn't to invent new technology—it's to combine what exists in ways that serve humanity. + +That's lateral thinking. That's how we build the future: not by reaching for tomorrow's technology, but by using today's technology in tomorrow's ways. + +--- + +*"The best technology is invisible. It just works, everywhere, for everyone."* \ No newline at end of file diff --git a/website/src/content/docs/handbook/philosophy/open-superintelligence.mdx b/website/src/content/docs/handbook/philosophy/open-superintelligence.mdx new file mode 100644 index 000000000..58003e2a9 --- /dev/null +++ b/website/src/content/docs/handbook/philosophy/open-superintelligence.mdx @@ -0,0 +1,213 @@ +--- +title: "Open Superintelligence Platform" +description: "Building AI that augments humanity through openness, privacy, and universal access" +--- + +import YouTube from '@/components/YouTube.astro' + +# Open Superintelligence Platform + +> "The best way to predict the future is to invent it. The best way to invent it is to do it together." — Alan Kay (adapted) + +## What is Open Superintelligence? + +Open superintelligence isn't just about making AI models public. It's a fundamental belief that the most powerful technologies in human history should be: + +- **Owned by users**, not rented from corporations +- **Privacy-preserving**, not surveillance tools +- **Universally accessible**, not gated by geography or wealth +- **Community-driven**, not dictated by boardrooms + +At Jan, we're building the platform where this vision becomes reality. + +## Why Openness Matters + +### The Closed AI Problem + +Today's AI landscape is dominated by a few companies who: +- Control what models you can use +- Decide what conversations are acceptable +- Store and analyze everything you type +- Can revoke access at any time +- Use your data to train their models + +This isn't just inconvenient—it's dangerous. When a handful of corporations control humanity's access to intelligence augmentation, they control our collective future. + +### The Open Alternative + +Open superintelligence offers a different path: + +**Transparency**: Know exactly how your AI works +- Inspect the code +- Verify the claims +- Understand the limitations +- Contribute improvements + +**Ownership**: Your AI belongs to you +- Download and run forever +- No subscription fees +- No terms of service changes +- No sudden deprecations + +**Privacy**: Your thoughts remain yours +- Local execution +- No cloud dependencies +- Zero data collection +- Complete confidentiality + +**Innovation**: Thousands of minds are better than hundreds +- Global collaboration +- Diverse perspectives +- Rapid iteration +- Community-driven features + +## The Platform Philosophy + +Jan isn't just an app—it's a platform for open superintelligence: + +### 1. Best Models Win + +We don't play favorites. Whether it's: +- Our own Jan v1 model +- Community contributions +- Open-source breakthroughs +- Specialized domain models + +If it performs well on **Jan Exam**, it belongs on our platform. Quality is our only metric. + +### 2. Composable Intelligence + +Intelligence isn't monolithic. Our platform enables: +- **Multiple models** working together +- **Specialized capabilities** (vision, voice, reasoning) +- **Tool integration** via MCP +- **Custom workflows** for specific needs + +Users compose their own superintelligence from best-in-class components. + +### 3. Progressive Enhancement + +Start simple, grow sophisticated: +- **Day 1**: Chat with a local model +- **Week 1**: Add tools and attachments +- **Month 1**: Fine-tune for your needs +- **Year 1**: Deploy across your organization + +The platform grows with you. + +### 4. Permissionless Innovation + +Build whatever you imagine: +- No API keys to request +- No approval processes +- No platform restrictions +- No revenue sharing + +Your innovation, your rules. + +## Building in the Open + +Our development process embodies our values: + +### Public by Default +- Open roadmaps +- Public discussions +- Transparent decisions +- Community input + +### Fail Fast, Learn Faster +- Ship early and often +- Learn from users +- Iterate based on feedback +- Celebrate failed experiments + +### Global Collaboration +- Contributors from everywhere +- Diverse perspectives valued +- Local needs addressed +- Universal solutions built + +## The Network Effect of Openness + +Open systems create compounding benefits: + +``` +More Users → Better Feedback → Improved Models → +More Contributors → Faster Innovation → More Users +``` + +Every user makes Jan better for everyone: +- Bug reports improve stability +- Feature requests guide development +- Model feedback enhances quality +- Community support helps newcomers + +## Our North Star: Jan Exam + +Quality matters more than origin. **Jan Exam** ensures: +- Objective performance metrics +- Transparent benchmarking +- Fair model comparison +- User-relevant testing + +Whether a model comes from us, the community, or anywhere else—if it excels at helping users, it belongs on Jan. + +## The Future We're Building + +Imagine a world where: + +### AI Enhances Without Exploiting +- Your AI assistant knows you deeply but tells no one +- Intelligence augmentation without surveillance capitalism +- Productivity without privacy compromise + +### Access Equals Opportunity +- A student in rural India has the same AI as Silicon Valley +- Language models speak every language, not just English +- Costs approach zero as technology improves + +### Communities Shape Their Tools +- Local models for local needs +- Cultural values embedded in AI +- Bottom-up innovation, not top-down control + +### Intelligence Multiplies +- Every breakthrough benefits everyone +- Models improve through collaboration +- Knowledge compounds across communities + +## Join the Movement + +Open superintelligence isn't built by companies—it's built by communities. Every person who: + +- **Uses Jan** validates our mission +- **Reports bugs** improves the platform +- **Shares feedback** shapes development +- **Contributes code** accelerates progress +- **Tells others** grows the movement + +Is building the future with us. + +## Our Promise + +We promise to: + +1. **Stay Open**: Jan's core will always be open source +2. **Respect Privacy**: Your data is yours alone +3. **Embrace Community**: Your voice matters in our decisions +4. **Pursue Quality**: Only the best for our users +5. **Think Long-term**: Building for decades, not quarters + +## The Time is Now + +The race for AI dominance has begun. But while others race to lock users in, we're racing to set them free. + +Open superintelligence isn't just possible—it's inevitable. The question is whether we build it together, or let it be built for us. + +At Jan, we've made our choice. We're building it together. + +**Will you join us?** + +--- + +*"The future of intelligence is too important to leave to a few companies. It belongs to all of us."* \ No newline at end of file diff --git a/website/src/content/docs/handbook/philosophy/optimism.mdx b/website/src/content/docs/handbook/philosophy/optimism.mdx new file mode 100644 index 000000000..5b8c2f3c1 --- /dev/null +++ b/website/src/content/docs/handbook/philosophy/optimism.mdx @@ -0,0 +1,42 @@ +--- +title: "Perpetual Optimism is a Force Multiplier" +description: "We believe in perpetual optimism." +--- + +import YouTube from '@/components/YouTube.astro' + +# Perpetual Optimism is a Force Multiplier + +
+ + + +> "Success consists of going from failure to failure without loss of enthusiasm." — Winston Churchill + +In 1903, [we barely left the ground](https://en.wikipedia.org/wiki/Wright_Flyer). By 1969, [we stood on the moon](https://en.wikipedia.org/wiki/Apollo_11). What once seemed impossible became reality through persistence and optimism. + +## Augmenting Humanity + +- We reject AI doomerism. Focus on possibilities, not fear +- Children represent our hope. We build for their future +- Humanity progresses faster than it feels +- AI is a tool—like electricity or the telephone. It's not the first revolution, nor the last +- History shows resilience. We adapt, mitigate risks, and move forward +- Airplanes once terrified—yet they helped humanity reach the moon and connect the world + +## AI Safety + +- Safety is non-negotiable. Protecting people is the baseline + - AI safety == human safety. If we haven’t solved human safety, we haven’t solved AI safety. + - AI alignment == human alignment. Misaligned societies can’t build aligned systems. +- AI safety requires human alignment first +- Fear and progress must be balanced—panic stalls; awareness guides +- Building for our kids ensures safety is built-in, purpose drives caution +- Airplanes once terrified—yet they helped humanity reach the moon and connect the world + +## Why we believe in optimism + +- Optimism drives solutions; fear paralyzes +- Hope fuels persistence. Failures aren't endpoints +- Every breakthrough began as a dream. We build toward better because we believe in it +- Perpetual optimism multiplies effort and impact diff --git a/website/src/content/docs/handbook/sell/marketing.mdx b/website/src/content/docs/handbook/sell/marketing.mdx new file mode 100644 index 000000000..a152696f4 --- /dev/null +++ b/website/src/content/docs/handbook/sell/marketing.mdx @@ -0,0 +1,98 @@ +--- +title: "Marketing" +description: "How we structure marketing to drive revenue and growth" +asIndexPage: true +--- + +import Steps from '@/components/Steps.astro'; +import YouTube from '@/components/YouTube.astro'; + +# Marketing + +> "Marketing is about values." - Steve Jobs + +
+ + +Without a strategy, marketing is: +- throwing social media posts with reach anxiety +- starting podcasts that no one listens +- writing newsletter that even team members don't read + +Marketing is telling your own words in some channels for a purpose. Without a purpose, it's just noise - like how some do. + +Before starting we should align on some terms: + +- **Framework**: The blueprint that organizes our marketing efforts +- **Purpose**: The fundamental reason behind our marketing activities +- **Campaign**: Marketing actions +- **Goal**: The specific, measurable result we aim to achieve through our marketing activities +- **Brief**: The document outlining how we're executing a campaign + +## Framework(s) + +Marketings looks like art, must be managed like math. At Jan, we follow some frameworks for alignment. + +Our marketing efforts consist of 3 purposes and each marketing action must target at least one: + +1. Grow the market +2. Increase the market share +3. Capture market share in a more efficient way + +Each purpose requires campaigns with clear goals. Goal types: + +- KPI Goals +- Project & Campaign Goals +- Experiment Goals +- Hiring Goals + +Campaign executions must leave no questions, so each marketing campaign requires a brief format: + +- **Goals**: KPIs, timeline, relevant OKRs +- **Audience**: Who we're targeting +- **Creatives**: Messaging & creative assets +- **Channels**: Distribution +- **Ownership**: Who is involved + +## Positioning + +Marketing starts with positioning - we always think thorough where to sit in the market before new launches. + +No one cares about product functions, it's all about what you provide. If your positioning requires explanation, it isn't working. We never talk about what our product does until we've established what problem it eliminates. + +We start with a positioning: + +- What is our product/service/platform? + - In customer language, what is it? + - What pain point do we eliminate? + - What we improve? +- Who is this for? + - Who benefits most from this solution? + - What characteristics define this segment? +- Why is it better? + - What are the other players? + - How do we outperform alternatives? + - What makes us uniquely valuable here? + +## Big no's on marketing + +We're playing our game, not theirs. + +- Throwing out marketing activities to see what sticks +- Burning money at Ads +- Random posts +- Copying what others do +- Actions without planning or goals +- Prioritizing paid activities over organic +- Jumping on hypes over strategy + +## Big yes's on marketing + +- Growing together with others +- Playing our game in the highest level +- Listening selectively - Absorb market feedback, but filter it through strategy +- Adding value to what we're working on +- Repurposing content +- Being opinionated about the differentiation and why we're doing +- Understanding the technical aspects at a level that explains a child +- Being aware of the target audience and the messaging \ No newline at end of file diff --git a/website/src/content/docs/handbook/team/index.mdx b/website/src/content/docs/handbook/team/index.mdx new file mode 100644 index 000000000..52ef4bcc9 --- /dev/null +++ b/website/src/content/docs/handbook/team/index.mdx @@ -0,0 +1,63 @@ +--- +title: "Team Structure" +description: "How Jan's team is organized" +--- + +# Team Structure + +Jan is an open-source AI platform built by a distributed team focused on making AI accessible, private, and locally-run. + +Jan is currently ~20 people working across different areas to build the open superintelligence platform. + +## Jan Desktop & Platform + +Building the core Jan application and platform infrastructure. + +### Engineering +- **Core Platform**: Building Jan Desktop and core infrastructure +- **Dev Relations**: Ramon - Community engagement and developer experience +- **QA & Release**: Ensuring quality and stability across releases + +### Model Team + +Focused on making the best models available to Jan users. + +| Focus Area | Team Members | Description | +|------------|--------------|-------------| +| **Inference Optimization** | Gau | Leading model quantization and evaluation for Jan's Local Model Hub - ensuring Jan supports the latest and best open source models | +| **Jan v1 Model** | Alan, Alex, Bách, Warren | Developing Jan's flagship model to be the default in Jan Desktop | +| **Advanced Features** | Thinh, Norapat | Working with Ramon to spec and implement:
• Jan Attachments
• Jan DeepResearch
• Jan Voice Mode | + +## Infrastructure & Operations + +### Technical Infrastructure +- **Jan Cloud**: Cloud infrastructure for optional services +- **Hardware**: Optimizing for local hardware performance +- **CI/CD**: Continuous integration and deployment + +### Business Operations + +| Team | Focus | Members | +|------|-------|---------| +| **Marketing** | Brand, growth, and community | Emre | +| **Product** | Product strategy and roadmap | Ramon | +| **Finance & HR** | Operations and people | Nicole, finance team | + +## Working Groups + +Cross-functional teams that form around specific initiatives: + +- **Model Evaluation**: Jan Exam benchmarking and quality assurance +- **Community Features**: Building based on user feedback +- **Open Standards**: MCP and other protocol development + +## Our Approach + +- **Open Development**: Build in public with community input +- **Quality First**: Jan Exam as our north star for model quality +- **User Focused**: Every role ultimately serves our users' need for private, local AI +- **Flexible Structure**: Teams adapt based on current priorities and user needs + +## Join Us + +Interested in joining our mission to build open superintelligence? Check out our [careers page](https://jan.ai/careers) or contribute to our [open source projects](https://github.com/janhq). \ No newline at end of file diff --git a/website/src/content/docs/handbook/who/curiosity.mdx b/website/src/content/docs/handbook/who/curiosity.mdx new file mode 100644 index 000000000..d02195fbe --- /dev/null +++ b/website/src/content/docs/handbook/who/curiosity.mdx @@ -0,0 +1,144 @@ +--- +title: "The Fast and the Curious" +description: "We hire people who move quickly and never stop learning" +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +# The Fast and the Curious + +> "In the AI age, the ability to learn faster than the rate of change is the only sustainable advantage." — Adapted from Eric Ries + +We hire people who are both fast and curious—those who ship today while learning for tomorrow. + +## Ship Fast, Ship Often + +Speed is our advantage in the rapidly evolving AI landscape: + +- **Weekly Releases**: We ship updates to Jan every week, not every quarter +- **Rapid Experimentation**: Test ideas with real users, not focus groups +- **Fail Fast, Learn Faster**: Kill features that don't work, double down on what does +- **User Feedback Loop**: From idea to user's hands in days, not months + +### What Fast Means at Jan + +- **Bias for Action**: See a problem? Fix it. Don't wait for permission. +- **MVP Mindset**: Launch at 80% perfect, iterate to 100% +- **Quick Decisions**: Make reversible decisions quickly, deliberate only on irreversible ones +- **Async by Default**: Don't let time zones slow us down + +We've shipped: +- Major features in days that others debate for months +- Model support hours after release, not weeks +- Bug fixes while users are still typing the report + +## Stay Endlessly Curious + +In AI, yesterday's breakthrough is today's baseline: + +### Learning is Non-Negotiable + +- **New Models Weekly**: Understand and integrate the latest AI advances +- **Cross-Domain Knowledge**: From quantization techniques to UI design +- **Community Learning**: Our users teach us as much as we teach them +- **Open Source Study**: Learn from the best codebases in the world + +### Curiosity in Practice + +- **Why Over What**: Don't just implement—understand the reasoning +- **Question Everything**: "Why do we collect user data?" led to our privacy-first approach +- **Learn in Public**: Share discoveries with the community +- **Teach to Learn**: Explaining concepts deepens understanding + +## The Jan Learning Culture + +### Everyone is a Student + +- **No Experts**: In a field moving this fast, everyone is learning +- **Share Knowledge**: Daily discoveries in our Discord channels +- **Document Learning**: Today's experiment is tomorrow's documentation +- **Celebrate Questions**: The "stupid" question often reveals the biggest insight + +### Everyone is a Teacher + +- **Onboarding**: New hires teach us fresh perspectives +- **Community Education**: Blog posts, tutorials, and demos +- **Code as Teaching**: Well-commented code educates future contributors +- **Failure Stories**: Share what didn't work and why + +## What We Look For + +### Signs of Speed + +- **GitHub Velocity**: Frequent commits, quick iterations +- **Project Completion**: Finished projects, not just started ones +- **Response Time**: Quick to engage, quick to deliver +- **Adaptation Speed**: How fast do you integrate feedback? + +### Signs of Curiosity + +- **Side Projects**: What do you build for fun? +- **Learning Artifacts**: Blogs, notes, or projects showing learning +- **Question Quality**: Do you ask insightful questions? +- **Knowledge Breadth**: Interests beyond your specialty + +## Why This Matters for Jan + +### AI Moves Too Fast for Slow + +- Models improve monthly +- User expectations evolve weekly +- Competition ships daily +- Standards change quarterly + +If we're not fast and curious, we're obsolete. + +### Local-First Demands Both + +- **Fast**: Users expect immediate responses, not cloud latency +- **Curious**: Supporting every model requires understanding each one +- **Fast**: Privacy bugs need instant fixes +- **Curious**: New quantization methods need quick adoption + +## The Compound Effect + +Fast + Curious creates exponential growth: + +``` +Ship Fast → User Feedback → Learn → +Ship Smarter → More Users → More Learning → +Ship Even Faster → Compound Growth +``` + +Each cycle makes us: +- Faster at shipping +- Better at learning +- More valuable to users +- More attractive to talent + +## Join Us If... + +- You've shipped something this week (not this year) +- You've learned something new today (not last month) +- You see a Jan issue and think "I could fix that" +- You read our codebase and think "I could improve that" +- You use Jan and think "It could also do this" + +## The Promise + +If you join Jan as someone fast and curious, in a year you'll be: +- **Faster**: Shipping features you can't imagine today +- **Smarter**: Understanding AI at a level that surprises you +- **Connected**: Part of a global community of builders +- **Impactful**: Your code running on millions of devices + +## The Bottom Line + +We don't hire for what you know today. We hire for how fast you'll know what matters tomorrow. + +In the race to build open superintelligence, the fast and curious don't just keep up—they set the pace. + +--- + +*"At Jan, we measure progress in iterations per week, not years of experience."* \ No newline at end of file diff --git a/website/src/content/docs/handbook/who/dydx.mdx b/website/src/content/docs/handbook/who/dydx.mdx new file mode 100644 index 000000000..586353278 --- /dev/null +++ b/website/src/content/docs/handbook/who/dydx.mdx @@ -0,0 +1,32 @@ +--- +title: "dy/dx > y-intercept" +description: "The rate of a function is more important than its starting point." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +# dy/dx > y-intercept + +> "A little bit of slope makes up for a lot of Y-intercept." — John Ousterhout + +The rate of a function is more important than its starting point. We value growth rate over initial advantage. + +## Why slope matters + +- Knowledge fades, but the ability to learn compounds +- A fast learner will outpace someone with more initial experience over time +- Slow, steady improvement outperforms quick starts with no growth + +## What it means day-to-day + +- Don't hesitate to try something new—even if you start clueless. Learning speed matters +- Mistakes are expected. Learning from them is required +- We'll invest in helping you grow, but the drive has to come from you +- Your trajectory is more important than where you begin + +## Why we believe in this + +- Building something lasting requires patience and commitment to improvement +- We're not interested in shortcuts. We value the work that compounds quietly until it becomes obvious +- If Jan's greatest impact is helping people and ideas grow steadily over time—that's the kind of success we stand for \ No newline at end of file diff --git a/website/src/content/docs/handbook/who/obsession.mdx b/website/src/content/docs/handbook/who/obsession.mdx new file mode 100644 index 000000000..be8c70502 --- /dev/null +++ b/website/src/content/docs/handbook/who/obsession.mdx @@ -0,0 +1,40 @@ +--- +title: "Obsession" +description: "We seek obsession." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +# Obsession + +> "If you want to build a ship, don't drum up the men to gather wood, divide the work, and give orders. Instead, teach them to yearn for the vast and endless sea." — Antoine de Saint-Exupéry + +We don't hire for skills alone. We hire for obsession. + +## Find the obsessed + +- Breakthroughs require long-term focus, not fleeting interest +- Failure isn't the end—just another step in relentless experimentation +- People who obsess push beyond limits others accept + +## We seek those already consumed + +- You're already working on the problem—because you can't not +- We don't assign you a job; we support your life's work +- Obsession isn't just personal—it becomes more powerful in a team +- Together, a group of obsessives becomes greater than the sum of its parts + +## The best hires share common traits + +- Desperation: Solving the problem feels like a need, not a choice +- Relentlessness: You try, fail, adapt—again and again +- Defiance: Others call it crazy; we call it genius + +## We're looking for the dreamers + +- That deep, persistent song you've been trying to sing? We hear it +- Maybe you've been mocked, dismissed, or misunderstood +- We seek those lonely, weird dreamers who refuse to give up + +Wherever you are in the world, if this feels like you—apply here \ No newline at end of file diff --git a/website/src/content/docs/handbook/who/team.mdx b/website/src/content/docs/handbook/who/team.mdx new file mode 100644 index 000000000..6c3209dff --- /dev/null +++ b/website/src/content/docs/handbook/who/team.mdx @@ -0,0 +1,31 @@ +--- +title: "Jan is a Sports Team" +description: "Our approach is super simple: Retain. Build trust. Win together." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +# Jan is a Pro Sports Team + +> "First, you need to learn how to play. You need 2-3 years together to learn how to play with each other." — [Nikola Jokić](https://www.reddit.com/r/NBASpurs/comments/1cdscti/wise_words_from_jokic_first_you_need_to_learn_how/) + +Jan is a sports team, not unlike a NBA team or a NFL team. We focus on putting the best players on the court, focusing on their 1% strengths, and building a team that can win together. + +## Team vs. Family + +We learn the best principles from [Netflix Culture Deck](https://www.slideshare.net/slideshow/culture-1798664/1798664): + +- We operate like a pro sports team +- There are limited spots on every team — every roster spot counts +- We hire, develop and cut smartly + +## Continuity + +However, we balance this with our belief in Continuity and Stability: + +- Teams with psychological safety take better, long-term risks +- Teams need 2–3 years to truly gel +- Continuity matters; balance change carefully +- Cohesive teams outperform constant reshuffles +- Time builds trust, speed, and better decisions \ No newline at end of file diff --git a/website/src/content/docs/handbook/who/underdogs.mdx b/website/src/content/docs/handbook/who/underdogs.mdx new file mode 100644 index 000000000..fb8cfd146 --- /dev/null +++ b/website/src/content/docs/handbook/who/underdogs.mdx @@ -0,0 +1,39 @@ +--- +title: "Underdogs" +description: "We hire from unconventional backgrounds." +--- + +{/* TODO: Replace with Astro-compatible icons: FaDiscord, FaMap */}; +import Steps from '@/components/Steps.astro'; + +# Underdogs Welcome + +> "I am, somehow, less interested in the weight and convolutions of Einstein's brain than in the near certainty that people of equal talent have lived and died in cotton fields and sweatshops." — Stephen Jay Gould + +We hire from unconventional backgrounds. + +## Opportunity isn't equal + +- Where you're born shapes your chances—but it shouldn't define them +- Talent is everywhere. Opportunity isn't +- We believe the internet has changed how we work and live together. Our team—spread across 10 cities worldwide—couldn't have existed just five years ago +- Fast connections (5G and beyond) mean geography no longer decides your future. We'll find you—wherever you are + +## We seek the overlooked + +- Lonely geniuses, relentless tinkerers, people with potential others missed +- We don't care where you went to school—or if you went at all +- We bet on people like startups: high risk, high potential +- Skills can be taught; drive cannot. We'll teach you to communicate and collaborate +- We trust you'll prove yourself through your work and integrity + +## Meaningful work, close to home + +- We create jobs that matter, in the places people call home +- If Jan's greatest achievement is enabling people to build meaningful careers in their hometowns—that would be success worth celebrating + +## This is your shot + +- Underdogs, dreamers, the overlooked—this place is for you +- We don't just welcome you. We're looking for you +- Wherever you are in the world—apply here diff --git a/website/src/content/docs/handbook/why/happy.mdx b/website/src/content/docs/handbook/why/happy.mdx new file mode 100644 index 000000000..e30321579 --- /dev/null +++ b/website/src/content/docs/handbook/why/happy.mdx @@ -0,0 +1,5 @@ +--- +title: "Handbook" +description: "Jan Team Handbook" +--- + diff --git a/website/src/content/docs/handbook/why/icp.mdx b/website/src/content/docs/handbook/why/icp.mdx new file mode 100644 index 000000000..ff22b9f8d --- /dev/null +++ b/website/src/content/docs/handbook/why/icp.mdx @@ -0,0 +1,61 @@ +--- +title: "Who we are building for" +description: "Building for everyone who believes AI should be private, local, and owned" +--- + +# Who we are building for + +Jan is built for people who value privacy, ownership, and freedom in their AI interactions. Our users span from individual creators to enterprise teams, united by a common belief: AI should augment human capability without compromising human agency. + +## Primary Users + +### Privacy-Conscious Individuals +People who understand that their thoughts, ideas, and conversations should remain private: +- Researchers working on sensitive topics +- Writers and creators protecting their intellectual property +- Professionals handling confidential information +- Anyone who believes their AI conversations shouldn't train someone else's models + +### Local-First Developers +Engineers and developers who need: +- Full control over their AI infrastructure +- The ability to run models offline and air-gapped +- Customizable, hackable AI tools +- Integration with their existing workflows via our API + +### Global Users with Limited Internet +Millions of potential AI users who face: +- Unreliable or expensive internet connections +- Geographical restrictions on AI services +- The need for AI that works anywhere, anytime +- Language and cultural barriers with centralized services + +### Organizations Requiring Data Sovereignty +Companies and institutions that cannot use cloud AI due to: +- Regulatory compliance requirements +- Data residency laws +- Security policies prohibiting external data transmission +- The need for complete audit trails and control + +## Our North Star: Quality for Everyone + +We use **Jan Exam** as our benchmark to ensure that whether you're using our models or any model from our hub, you're getting the best possible experience. We believe that: + +- Quality shouldn't be gated behind subscriptions +- The best models should be accessible to everyone +- Open models can and will outperform closed ones +- Community-driven development leads to better outcomes + +## What We're NOT Building For + +We're explicitly not building for: +- Surveillance or monitoring use cases +- Applications that violate user privacy +- "Nice-to-have" enterprise vanity projects +- Use cases that require sacrificing user control + +## The Future User + +Ultimately, we're building for the next billion AI users who haven't yet experienced what AI can do. They'll start with AI that respects their privacy, runs on their devices, and belongs to them from day one. + +We're creating the platform where AI literacy begins with AI ownership. \ No newline at end of file diff --git a/website/src/content/docs/handbook/why/ownership.mdx b/website/src/content/docs/handbook/why/ownership.mdx new file mode 100644 index 000000000..c77e8b677 --- /dev/null +++ b/website/src/content/docs/handbook/why/ownership.mdx @@ -0,0 +1,96 @@ +--- +title: "Our Vision for Open Superintelligence" +description: "Building AI that belongs to humanity, not corporations" +--- + +# Our Vision for Open Superintelligence + +Jan believes that the path to beneficial superintelligence is through openness, community ownership, and universal access. We're not just building another AI platform—we're creating the foundation for AI that truly belongs to its users. + +## What is Open Superintelligence? + +Open superintelligence means: + +- **Open Source**: Every line of code is public, auditable, and forkable +- **Open Weights**: Models that can be downloaded, modified, and owned +- **Open Standards**: Protocols like MCP that anyone can implement +- **Open Participation**: A global community building together + +## Why Ownership Matters + +When you use Jan, you own: + +### Your Conversations +- No company reads your chats +- No AI trains on your prompts +- Your data stays on your device +- Export and move your data anytime + +### Your Models +- Download once, use forever +- No subscription required +- Modify and fine-tune as needed +- Share with your community + +### Your Compute +- Run on your hardware +- No cloud dependency +- Scale as you need +- Control your costs + +## The Platform Approach + +We're building Jan as a platform where: + +- **Best Models Win**: Whether it's our Jan v1 model or community models, we showcase what performs best on Jan Exam +- **Innovation Thrives**: Developers can build on top of Jan without permission +- **Standards Emerge**: Open protocols ensure no vendor lock-in +- **Communities Flourish**: Users help users, models improve models + +## Community Ownership + +Jan is built by and for its community: + +### Open Development +- Public roadmap and planning +- Community input on features +- Transparent decision making +- Open source contributions welcome + +### Shared Success +- Models improved by the community +- Features requested by users +- Quality benchmarked transparently +- Success measured by adoption, not extraction + +## The Path Forward + +We envision a future where: + +1. **Every device runs AI**: From phones to laptops to embedded systems +2. **Every person owns AI**: Not rented, not surveilled, but truly owned +3. **Every community contributes**: Local models for local needs +4. **Every innovation is shared**: Improvements benefit everyone + +## Our Commitment + +We commit to: + +- **Stay Open**: Jan will always have an open-source version +- **Stay Private**: We will never read your data or conversations +- **Stay Accessible**: Supporting diverse hardware and use cases +- **Stay Community-Driven**: Your needs drive our development + +## Join Us + +This vision requires a movement, not just a company. Whether you: + +- Use Jan for private conversations +- Contribute code or models +- Share feedback and ideas +- Tell others about local AI +- Build on our platform + +You're part of making open superintelligence a reality. + +The future of AI shouldn't be controlled by a few corporations. It should be owned by everyone who uses it. That's the future we're building at Jan. \ No newline at end of file diff --git a/website/src/content/docs/handbook/why/problem.mdx b/website/src/content/docs/handbook/why/problem.mdx new file mode 100644 index 000000000..2f3a03139 --- /dev/null +++ b/website/src/content/docs/handbook/why/problem.mdx @@ -0,0 +1,56 @@ +--- +title: "What problem are we solving?" +description: "Building open superintelligence that respects your privacy and freedom" +--- + +import YouTube from '@/components/YouTube.astro' + +# What problem are we solving? + +Current AI platforms have fundamental problems: + +- **Centralized Control**: Your conversations, data, and AI capabilities are controlled by a few companies +- **Privacy Violations**: Every prompt you type is stored, analyzed, and used to train models +- **Internet Dependency**: No connection means no AI - even for simple tasks +- **Subscription Lock-in**: Pay monthly forever or lose access to your own conversations +- **Limited Choice**: Stuck with one model provider's capabilities and biases + +## Mission + +Jan is building an open superintelligence platform that runs locally, privately, and offline. We believe AI should be: + +- **Yours to Own**: Download it once, use it forever +- **Private by Default**: Your thoughts stay on your device +- **Open and Flexible**: Use any model, from any provider, or none at all +- **Universally Accessible**: Works on any hardware, anywhere in the world + +## Approach + +We're building the full stack for open superintelligence: + +- **Jan Desktop**: Local AI that runs on your computer today +- **Jan Models**: Our own models optimized for privacy and performance +- **Model Hub**: Access to the best open-source models, quantized and ready to use +- **Jan Exam**: Rigorous evaluation to ensure quality across all models +- **Advanced Features**: + - Attachments for document understanding + - DeepResearch for comprehensive analysis + - Voice Mode for natural conversations + - Tool calling via MCP for real-world capabilities + +## Why This Matters + +In 5 years, AI will be as essential as electricity. The question is: will you rent it from a monopoly, or will you own it? + +We're ensuring the answer is ownership. Every feature we build, every model we support, every line of code we write is in service of this goal. + +## Vision + +We envision a future where: + +- AI augments human intelligence without compromising privacy +- Anyone can run superintelligence on their personal devices +- Open models outperform closed ones through community collaboration +- The next billion users experience AI on their own terms, not Silicon Valley's + +Jan is the platform that makes this future possible. \ No newline at end of file diff --git a/website/src/content/docs/handbook/why/timeline.mdx b/website/src/content/docs/handbook/why/timeline.mdx new file mode 100644 index 000000000..ac1e365f1 --- /dev/null +++ b/website/src/content/docs/handbook/why/timeline.mdx @@ -0,0 +1,8 @@ +--- +title: "Handbook" +description: "Jan Team Handbook" +--- + +## How we got here + +(Coming soon) \ No newline at end of file diff --git a/website/src/content/docs/index.mdx b/website/src/content/docs/jan/index.mdx similarity index 99% rename from website/src/content/docs/index.mdx rename to website/src/content/docs/jan/index.mdx index b17c78340..fce7a8db0 100644 --- a/website/src/content/docs/index.mdx +++ b/website/src/content/docs/jan/index.mdx @@ -16,7 +16,7 @@ keywords: import { Aside } from '@astrojs/starlight/components'; -![Jan Desktop](../../assets/jan-app-new.png) +![Jan Desktop](../../../assets/jan-app-new.png) ## Jan's Goal diff --git a/website/src/layouts/Layout.astro b/website/src/layouts/Layout.astro index 3c74fc18e..f13a41ebf 100644 --- a/website/src/layouts/Layout.astro +++ b/website/src/layouts/Layout.astro @@ -18,15 +18,7 @@ const { title } = Astro.props; - - - - - - - - - + - \ No newline at end of file + diff --git a/website/src/pages/blog/[slug].astro b/website/src/pages/blog/[slug].astro index 91b19e8ff..ac5abf4ce 100644 --- a/website/src/pages/blog/[slug].astro +++ b/website/src/pages/blog/[slug].astro @@ -2,6 +2,7 @@ import { getCollection } from 'astro:content'; import Layout from '../../layouts/Layout.astro'; import CustomNav from '../../components/CustomNav.astro'; +import '../../styles/blog.css'; export async function getStaticPaths() { const blogEntries = await getCollection('blog'); @@ -16,7 +17,7 @@ const { Content } = await entry.render(); const formattedDate = new Date(entry.data.date).toLocaleDateString('en-US', { year: 'numeric', - month: 'long', + month: 'long', day: 'numeric' }); @@ -40,11 +41,11 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) )}
- +

{entry.data.title}

- +

{entry.data.description}

- + {tags.length > 0 && ( - + @@ -170,6 +171,48 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) .article-content { line-height: 1.7; font-size: 1.1rem; + overflow-wrap: break-word; + word-wrap: break-word; + } + + /* Image styling */ + .article-content :global(img) { + max-width: 100%; + height: auto; + display: block; + margin: 2rem auto; + border-radius: 0.75rem; + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + border: 1px solid var(--sl-color-gray-5); + } + + /* For inline images or icons */ + .article-content :global(p img) { + display: inline-block; + margin: 0 0.25rem; + vertical-align: middle; + max-height: 1.5em; + width: auto; + border: none; + box-shadow: none; + border-radius: 0; + } + + /* For figure elements if used */ + .article-content :global(figure) { + margin: 2rem 0; + text-align: center; + } + + .article-content :global(figure img) { + margin-bottom: 0.5rem; + } + + .article-content :global(figcaption) { + font-size: 0.9rem; + color: var(--sl-color-text-muted); + font-style: italic; + margin-top: 0.5rem; } /* Content styling */ @@ -233,11 +276,12 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) } .article-content :global(code) { - background: var(--sl-color-bg-sidebar); - padding: 0.2rem 0.4rem; + background: var(--sl-color-bg-inline-code, var(--sl-color-gray-6)); + padding: 0.125rem 0.375rem; border-radius: 0.25rem; - font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; - font-size: 0.9em; + font-family: 'Fira Code', 'SF Mono', Monaco, 'Inconsolata', 'Roboto Mono', monospace; + font-size: 0.875em; + color: var(--sl-color-text-code); } .article-content :global(pre) { @@ -247,6 +291,17 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) overflow-x: auto; margin: 1.5rem 0; border: 1px solid var(--sl-color-gray-5); + max-width: 100%; + text-align: left; + font-family: 'Fira Code', 'SF Mono', Monaco, 'Inconsolata', 'Roboto Mono', monospace; + font-size: 0.9rem; + line-height: 1.6; + } + + .article-content :global(pre code) { + background: transparent; + padding: 0; + font-size: 0.875rem; } .article-content :global(table) { @@ -270,6 +325,75 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) font-weight: 600; } + .article-content :global(tbody tr:last-child td) { + border-bottom: none; + } + + /* Horizontal scrolling for wide content */ + .article-content :global(.table-wrapper), + .article-content :global(.overflow-x-auto) { + overflow-x: auto; + margin: 1.5rem 0; + } + + /* Fix for MDX components */ + .article-content :global(.callout), + .article-content :global(.note), + .article-content :global(.warning), + .article-content :global(.tip) { + padding: 1rem 1.25rem; + margin: 1.5rem 0; + border-radius: 0.5rem; + border-left: 4px solid var(--sl-color-accent); + background: var(--sl-color-bg-sidebar); + } + + /* Lists inside article content */ + .article-content :global(ul ul), + .article-content :global(ol ol), + .article-content :global(ul ol), + .article-content :global(ol ul) { + margin-bottom: 0.5rem; + margin-top: 0.5rem; + } + + /* Strong and emphasis */ + .article-content :global(strong) { + font-weight: 600; + color: var(--sl-color-text); + } + + .article-content :global(em) { + font-style: italic; + } + + /* Horizontal rule */ + .article-content :global(hr) { + border: none; + border-top: 1px solid var(--sl-color-gray-5); + margin: 2rem 0; + } + + /* Video embeds */ + .article-content :global(video) { + max-width: 100%; + height: auto; + border-radius: 0.75rem; + margin: 2rem 0; + } + + /* Iframe embeds */ + .article-content :global(iframe) { + max-width: 100%; + border-radius: 0.75rem; + margin: 2rem 0; + } + + /* Custom MDX component containers */ + .article-content :global(.mdx-component) { + margin: 2rem 0; + } + .article-footer { margin-top: 4rem; padding-top: 3rem; @@ -333,24 +457,24 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) .blog-article { padding: 1.5rem 1rem; } - + .article-title { font-size: 2rem; } - + .article-description { font-size: 1.1rem; } - + .article-content { font-size: 1rem; } - + .article-meta { flex-direction: column; gap: 0.5rem; } - + .footer-cta { padding: 1.5rem; } @@ -360,14 +484,173 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) .blog-article { padding: 1rem 0.75rem; } - + .article-title { font-size: 1.75rem; } - + .article-content :global(pre) { padding: 1rem; + font-size: 0.8rem; + } + + .article-content :global(img) { + border-radius: 0.5rem; + } + + .article-content :global(table) { + font-size: 0.9rem; } } - \ No newline at end of file + + + + + diff --git a/website/src/pages/changelog.astro b/website/src/pages/changelog.astro index bae30058c..d4824afee 100644 --- a/website/src/pages/changelog.astro +++ b/website/src/pages/changelog.astro @@ -5,7 +5,7 @@ import CustomNav from '../components/CustomNav.astro'; // Get all changelog entries and sort by date (newest first) const changelogEntries = await getCollection('changelog'); -const sortedEntries = changelogEntries.sort((a, b) => +const sortedEntries = changelogEntries.sort((a, b) => new Date(b.data.date).getTime() - new Date(a.data.date).getTime() ); @@ -21,7 +21,7 @@ const description = 'Latest release updates from the Jan team. Check out our Roa

Changelog

Latest release updates from the Jan team. Check out our Roadmap to see what's next.

- +