Compare commits

..

16 Commits

Author SHA1 Message Date
Enrico Ros 0f86ad36ef Update Dockerfile for #840 2025-10-12 10:21:58 -07:00
Enrico Ros cd421b2f6e Update documentation for v1.16.11 final release and EOL 2025-10-09 14:33:22 -07:00
Enrico Ros 41b66e009a Finalize v1 README 2025-10-09 14:23:23 -07:00
Enrico Ros d96467f850 Finalize v1 legacy workflow - v1.1* only, as 'v1' 'v1-stable' 'v1.*' tags 2025-10-09 13:55:05 -07:00
Enrico Ros 258b19e2f4 Drawer: notice 2025-10-07 11:13:04 -07:00
Enrico Ros 01a87158b9 News: highlight first 2025-10-07 11:09:12 -07:00
Enrico Ros 46b768f9cf News: roll 2025-10-07 10:59:41 -07:00
Enrico Ros 4f0b6a5d09 Trade: rename exported file for convenience 2025-10-07 10:59:31 -07:00
Enrico Ros bfbcdb70fe News: show the links to 2.0 2025-10-07 10:59:09 -07:00
Enrico Ros 2c4602cf39 Add Node24 support 2025-10-07 09:46:34 -07:00
Enrico Ros 68f5d3946b Move tf pointers 2025-09-29 08:12:50 -07:00
Enrico Ros 14724a864c OpenRouter: compensate for older typescript 2025-04-05 10:30:15 -07:00
Enrico Ros 5e2b196c4d OpenRouter: models list: prevent schema changes from breaking working models. Fixes #787 2025-04-05 10:26:44 -07:00
Enrico Ros e7686f60b1 OpenRouter: models list: ignore missing fields on 'openrouter/auto'. Fixes #787 2025-04-05 10:25:35 -07:00
Enrico Ros 380f666d35 Roll Gemini descriptions. Fixes #783 2025-03-29 12:35:29 -07:00
Enrico Ros 3e277b1a35 Optional desc. #783 2025-03-29 12:35:05 -07:00
19 changed files with 599 additions and 402 deletions
+15 -10
View File
@@ -11,11 +11,8 @@ name: Create and publish Docker images
on:
push:
branches:
- main
#- main-stable # Disabled as the v* tag is used for stable releases
tags:
- 'v*' # Trigger on version tags (e.g., v1.7.0)
- 'v1.1*' # V1 legacy tags only (v1.10.x - v1.19.x range)
env:
REGISTRY: ghcr.io
@@ -51,10 +48,13 @@ jobs:
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value=stable,enable=${{ github.ref == 'refs/heads/v1-stable' }}
type=ref,event=tag # Use the tag name as a tag for tag builds
type=semver,pattern={{version}} # Generate semantic versioning tags for tag builds
type=sha # Just in case none of the above applies
# V1 legacy pointers
type=raw,value=v1
type=raw,value=v1-stable
# Exact version tags (v1.16.11 and 1.16.11)
type=ref,event=tag
type=semver,pattern={{version}}
- name: Build and push Docker image
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
@@ -64,5 +64,10 @@ jobs:
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: NEXT_PUBLIC_GA4_MEASUREMENT_ID=${{ secrets.GA4_MEASUREMENT_ID }}
labels: |
org.opencontainers.image.title=Big-AGI v1 (Legacy)
org.opencontainers.image.description=Big-AGI v1 - Legacy version. For the latest version, see GitHub and big-agi.com
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.documentation=https://big-agi.com
build-args: |
NEXT_PUBLIC_GA4_MEASUREMENT_ID=${{ secrets.GA4_MEASUREMENT_ID }}
+12 -6
View File
@@ -1,6 +1,6 @@
# Base
FROM node:18-alpine AS base
ENV NEXT_TELEMETRY_DISABLED 1
FROM node:22-alpine AS base
ENV NEXT_TELEMETRY_DISABLED=1
# Dependencies
@@ -11,8 +11,11 @@ WORKDIR /app
COPY package*.json ./
COPY src/server/prisma ./src/server/prisma
# link ssl3 for latest Alpine
RUN sh -c '[ ! -e /lib/libssl.so.3 ] && ln -s /usr/lib/libssl.so.3 /lib/libssl.so.3 || echo "Link already exists"'
# Install dependencies, including dev (release builds should use npm ci)
ENV NODE_ENV development
ENV NODE_ENV=development
RUN npm ci
@@ -28,8 +31,11 @@ ENV NEXT_PUBLIC_GA4_MEASUREMENT_ID=${NEXT_PUBLIC_GA4_MEASUREMENT_ID}
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# link ssl3 for latest Alpine
RUN sh -c '[ ! -e /lib/libssl.so.3 ] && ln -s /usr/lib/libssl.so.3 /lib/libssl.so.3 || echo "Link already exists"'
# Build the application
ENV NODE_ENV production
ENV NODE_ENV=production
RUN npm run build
# Reduce installed packages to production-only
@@ -51,8 +57,8 @@ COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules
COPY --from=builder --chown=nextjs:nodejs /app/src/server/prisma ./src/server/prisma
# Minimal ENV for production
ENV NODE_ENV production
ENV PATH $PATH:/app/node_modules/.bin
ENV NODE_ENV=production
ENV PATH=$PATH:/app/node_modules/.bin
# Run as non-root user
USER nextjs
+18 -214
View File
@@ -1,41 +1,29 @@
# BIG-AGI 🧠
# BIG-AGI Legacy
Welcome to big-AGI, the AI suite for professionals that need function, form,
simplicity, and speed. Powered by the latest models from 12 vendors and
open-source servers, `big-AGI` offers best-in-class Chats,
[Beams](https://github.com/enricoros/big-AGI/issues/470),
and [Calls](https://github.com/enricoros/big-AGI/issues/354) with AI personas,
visualizations, coding, drawing, side-by-side chatting, and more -- all wrapped in a polished UX.
Stay ahead of the curve with big-AGI. 🚀 Pros & Devs love big-AGI. 🤖
[![Official Website](https://img.shields.io/badge/BIG--AGI.com-%23096bde?style=for-the-badge&logo=vercel&label=launch)](https://big-agi.com)
> 🚀 Big-AGI 2 is launching Q4 2024. Be the first to experience it before the public release.
> **⚠️ IMPORTANT: `v1` Branch - End of Life**
>
> 👉 [Apply for Early Access](https://y2rjg0zillz.typeform.com/to/ZSADpr5u?utm_source=gh-stable&utm_medium=readme&utm_campaign=ea2)
> This is the **v1** (formerly **v1-stable**) branch, which reached end-of-life in October 2025.
> - **For the latest Big-AGI**, see the [**main** branch](https://github.com/enricoros/big-AGI/tree/main) and [**big-agi.com**](https://big-agi.com)
> - **v1.16.11 is the final legacy release** - No further updates will be provided
> - Docker users: `:stable`, `:development` and `:latest` point to the `main` branch
Or fork & run on Vercel
---
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fenricoros%2Fbig-AGI&env=OPENAI_API_KEY&envDescription=Backend%20API%20keys%2C%20optional%20and%20may%20be%20overridden%20by%20the%20UI.&envLink=https%3A%2F%2Fgithub.com%2Fenricoros%2Fbig-AGI%2Fblob%2Fmain%2Fdocs%2Fenvironment-variables.md&project-name=big-AGI)
**For the latest Big-AGI:**
- [**Big-AGI Open**](https://github.com/enricoros/big-AGI/tree/main) - Open Source, for self-hosting, with bleeding edge models support
- [**Big-AGI Pro**](https://big-agi.com) - Hosted for Professionals with extra services and Cloud Sync
### New Version
---
This repository contains two main versions:
### What's New in 1.16.11 · October 2025
- Big-AGI 2: next-generation, bringing the most advanced AI experience
- `v2-dev`: V2 development branch, the exciting one, future default
- Big-AGI Stable: as deployed on big-agi.com
- `v1-stable`: Current stable version & Docker 'latest' tag
- Final v1 legacy release. Branch reaches end-of-life.
Note: After the V2 release in Q4, `v2/dev` will become the default branch and `v1/dev` will reach EOL.
### What's New in 1.16.1...1.16.10 · 2024-2025 (patch releases)
### Quick links: 👉 [roadmap](https://github.com/users/enricoros/projects/4/views/2) 👉 [installation](docs/installation.md) 👉 [documentation](docs/README.md)
### What's New in 1.16.1...1.16.9 · Jan 21, 2025 (patch releases)
- 1.16.9: Docker Gemini fix (R1 models are supported in Big-AGI 2)
- 1.16.8: OpenAI ChatGPT-4o Latest (o1 models are supported in Big-AGI 2)
- 1.16.10: Openrouter models fixes
- 1.16.9: Docker Gemini fix (R1 models are supported in latest Big-AGI)
- 1.16.8: OpenAI ChatGPT-4o Latest (o1 models are supported in latest Big-AGI)
- 1.16.7: OpenAI support for GPT-4o 2024-08-06
- 1.16.6: Groq support for Llama 3.1 models
- 1.16.5: GPT-4o Mini support
@@ -48,190 +36,6 @@ Note: After the V2 release in Q4, `v2/dev` will become the default branch and `v
- 1.16.2: Updates to Beam
- 1.16.1: Support for the new OpenAI GPT-4o 2024-05-13 model
### What's New in 1.16.0 · May 9, 2024 · Crystal Clear
- [Beam](https://big-agi.com/blog/beam-multi-model-ai-reasoning) core and UX improvements based on user feedback
- Chat cost estimation 💰 (enable it in Labs / hover the token counter)
- Save/load chat files with Ctrl+S / Ctrl+O on desktop
- Major enhancements to the Auto-Diagrams tool
- YouTube Transcriber Persona for chatting with video content, [#500](https://github.com/enricoros/big-AGI/pull/500)
- Improved formula rendering (LaTeX), and dark-mode diagrams, [#508](https://github.com/enricoros/big-AGI/issues/508), [#520](https://github.com/enricoros/big-AGI/issues/520)
- Models update: **Anthropic**, **Groq**, **Ollama**, **OpenAI**, **OpenRouter**, **Perplexity**
- Code soft-wrap, chat text selection toolbar, 3x faster on Apple silicon, and more [#517](https://github.com/enricoros/big-AGI/issues/517), [507](https://github.com/enricoros/big-AGI/pull/507)
#### 3,000 Commits Milestone · April 7, 2024
![big-AGI Milestone](https://github.com/enricoros/big-AGI/assets/32999/47fddbb1-9bd6-4b58-ace4-781dfcb80923)
- 🥇 Today we <b>celebrate commit 3000</b> in just over one year, and going stronger 🚀
- 📢️ Thanks everyone for your support and words of love for Big-AGI, we are committed to creating the best AI experiences for everyone.
### What's New in 1.15.0 · April 1, 2024 · Beam
- ⚠️ [**Beam**: the multi-model AI chat](https://big-agi.com/blog/beam-multi-model-ai-reasoning). find better answers, faster - a game-changer for brainstorming, decision-making, and creativity. [#443](https://github.com/enricoros/big-AGI/issues/443)
- Managed Deployments **Auto-Configuration**: simplify the UI models setup with backend-set models. [#436](https://github.com/enricoros/big-AGI/issues/436)
- Message **Starring ⭐**: star important messages within chats, to attach them later. [#476](https://github.com/enricoros/big-AGI/issues/476)
- Enhanced the default Persona
- Fixes to Gemini models and SVGs, improvements to UI and icons
- 1.15.1: Support for Gemini Pro 1.5 and OpenAI Turbo models
- Beast release, over 430 commits, 10,000+ lines changed: [release notes](https://github.com/enricoros/big-AGI/releases/tag/v1.15.0), and changes [v1.14.1...v1.15.0](https://github.com/enricoros/big-AGI/compare/v1.14.1...v1.15.0)
<details>
<summary>What's New in 1.14.1 · March 7, 2024 · Modelmorphic</summary>
- **Anthropic** [Claude-3](https://www.anthropic.com/news/claude-3-family) model family support. [#443](https://github.com/enricoros/big-AGI/issues/443)
- New **[Perplexity](https://www.perplexity.ai/)** and **[Groq](https://groq.com/)** integration (thanks @Penagwin). [#407](https://github.com/enricoros/big-AGI/issues/407), [#427](https://github.com/enricoros/big-AGI/issues/427)
- **[LocalAI](https://localai.io/models/)** deep integration, including support for [model galleries](https://github.com/enricoros/big-AGI/issues/411)
- **Mistral** Large and Google **Gemini 1.5** support
- Performance optimizations: runs [much faster](https://twitter.com/enricoros/status/1756553038293303434?utm_source=localhost:3000&utm_medium=big-agi), saves lots of power, reduces memory usage
- Enhanced UX with auto-sizing charts, refined search and folder functionalities, perfected scaling
- And with more UI improvements, documentation, bug fixes (20 tickets), and developer enhancements
</details>
<details>
<summary>What's New in 1.13.0 · Feb 8, 2024 · Multi + Mind</summary>
https://github.com/enricoros/big-AGI/assets/32999/01732528-730e-41dc-adc7-511385686b13
- **Side-by-Side Split Windows**: multitask with parallel conversations. [#208](https://github.com/enricoros/big-AGI/issues/208)
- **Multi-Chat Mode**: message everyone, all at once. [#388](https://github.com/enricoros/big-AGI/issues/388)
- **Export tables as CSV**: big thanks to @aj47. [#392](https://github.com/enricoros/big-AGI/pull/392)
- Adjustable text size: customize density. [#399](https://github.com/enricoros/big-AGI/issues/399)
- Dev2 Persona Technology Preview
- Better looking chats with improved spacing, fonts, and menus
- More: new video player, [LM Studio tutorial](https://github.com/enricoros/big-AGI/blob/main/docs/config-local-lmstudio.md) (thanks @aj47), [MongoDB support](https://github.com/enricoros/big-AGI/blob/main/docs/deploy-database.md) (thanks @ranfysvalle02), and speedups
</details>
<details>
<summary>What's New in 1.12.0 · Jan 26, 2024 · AGI Hotline</summary>
https://github.com/enricoros/big-AGI/assets/32999/95ceb03c-945d-4fdd-9a9f-3317beb54f3f
- **Voice Calls**: real-time voice call your personas out of the blue or in relation to a chat [#354](https://github.com/enricoros/big-AGI/issues/354)
- Support **OpenAI 0125** Models. [#364](https://github.com/enricoros/big-AGI/issues/364)
- Rename or Auto-Rename chats. [#222](https://github.com/enricoros/big-AGI/issues/222), [#360](https://github.com/enricoros/big-AGI/issues/360)
- More control over **Link Sharing** [#356](https://github.com/enricoros/big-AGI/issues/356)
- **Accessibility** to screen readers [#358](https://github.com/enricoros/big-AGI/issues/358)
- Export chats to Markdown [#337](https://github.com/enricoros/big-AGI/issues/337)
- Paste tables from Excel [#286](https://github.com/enricoros/big-AGI/issues/286)
- Ollama model updates and context window detection fixes [#309](https://github.com/enricoros/big-AGI/issues/309)
</details>
<details>
<summary>What's New in 1.11.0 · Jan 16, 2024 · Singularity</summary>
https://github.com/enricoros/big-AGI/assets/1590910/a6b8e172-0726-4b03-a5e5-10cfcb110c68
- **Find chats**: search in titles and content, with frequency ranking. [#329](https://github.com/enricoros/big-AGI/issues/329)
- **Commands**: command auto-completion (type '/'). [#327](https://github.com/enricoros/big-AGI/issues/327)
- **[Together AI](https://www.together.ai/products#inference)** inference platform support (good speed and newer models). [#346](https://github.com/enricoros/big-AGI/issues/346)
- Persona Creator history, deletion, custom creation, fix llm API timeouts
- Enable adding up to five custom OpenAI-compatible endpoints
- Developer enhancements: new 'Actiles' framework
</details>
<details>
<summary>What's New in 1.10.0 · Jan 6, 2024 · The Year of AGI</summary>
- **New UI**: for both desktop and mobile, sets the stage for future scale. [#201](https://github.com/enricoros/big-AGI/issues/201)
- **Conversation Folders**: enhanced conversation organization. [#321](https://github.com/enricoros/big-AGI/issues/321)
- **[LM Studio](https://lmstudio.ai/)** support and improved token management
- Resizable panes in split-screen conversations.
- Large performance optimizations
- Developer enhancements: new UI framework, updated documentation for proxy settings on browserless/docker
</details>
For full details and former releases, check out the [changelog](docs/changelog.md).
## 👉 Key Features ✨
| ![Advanced AI](https://img.shields.io/badge/Advanced%20AI-32383e?style=for-the-badge&logo=ai&logoColor=white) | ![100+ AI Models](https://img.shields.io/badge/100%2B%20AI%20Models-32383e?style=for-the-badge&logo=ai&logoColor=white) | ![Flow-state UX](https://img.shields.io/badge/Flow--state%20UX-32383e?style=for-the-badge&logo=flow&logoColor=white) | ![Privacy First](https://img.shields.io/badge/Privacy%20First-32383e?style=for-the-badge&logo=privacy&logoColor=white) | ![Advanced Tools](https://img.shields.io/badge/Fun%20To%20Use-f22a85?style=for-the-badge&logo=tools&logoColor=white) |
|---------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|
| **Chat**<br/>**Call**<br/>**Beam**<br/>**Draw**, ... | Local & Cloud<br/>Open & Closed<br/>Cheap & Heavy<br/>Google, Mistral, ... | Attachments<br/>Diagrams<br/>Multi-Chat<br/>Mobile-first UI | Stored Locally<br/>Easy self-Host<br/>Local actions<br/>Data = Gold | AI Personas<br/>Voice Modes<br/>Screen Capture<br/>Camera + OCR |
![big-AGI screenshot](docs/pixels/big-AGI-compo-20240201_small.png)
You can easily configure 100s of AI models in big-AGI:
| **AI models** | _supported vendors_ |
|:--------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Opensource Servers | [LocalAI](https://localai.com) (multimodal) · [Ollama](https://ollama.com/) · [Oobabooga](https://github.com/oobabooga/text-generation-webui) |
| Local Servers | [LM Studio](https://lmstudio.ai/) |
| Multimodal services | [Azure](https://azure.microsoft.com/en-us/products/ai-services/openai-service) · [Google Gemini](https://ai.google.dev/) · [OpenAI](https://platform.openai.com/docs/overview) |
| Language services | [Anthropic](https://anthropic.com) · [Groq](https://wow.groq.com/) · [Mistral](https://mistral.ai/) · [OpenRouter](https://openrouter.ai/) · [Perplexity](https://www.perplexity.ai/) · [Together AI](https://www.together.ai/) |
| Image services | [Prodia](https://prodia.com/) (SDXL) |
| Speech services | [ElevenLabs](https://elevenlabs.io) (Voice synthesis / cloning) |
Add extra functionality with these integrations:
| **More** | _integrations_ |
|:-------------|:---------------------------------------------------------------------------------------------------------------|
| Web Browse | [Browserless](https://www.browserless.io/) · [Puppeteer](https://pptr.dev/)-based |
| Web Search | [Google CSE](https://programmablesearchengine.google.com/) |
| Code Editors | [CodePen](https://codepen.io/pen/) · [StackBlitz](https://stackblitz.com/) · [JSFiddle](https://jsfiddle.net/) |
| Sharing | [Paste.gg](https://paste.gg/) (Paste chats) |
| Tracking | [Helicone](https://www.helicone.ai) (LLM Observability) |
[//]: # (- [x] **Flow-state UX** for uncompromised productivity)
[//]: # (- [x] **AI Personas**: Tailor your AI interactions with customizable personas)
[//]: # (- [x] **Sleek UI/UX**: A smooth, intuitive, and mobile-responsive interface)
[//]: # (- [x] **Efficient Interaction**: Voice commands, OCR, and drag-and-drop file uploads)
[//]: # (- [x] **Privacy First**: Self-host and use your own API keys for full control)
[//]: # (- [x] **Advanced Tools**: Execute code, import PDFs, and summarize documents)
[//]: # (- [x] **Seamless Integrations**: Enhance functionality with various third-party services)
[//]: # (- [x] **Open Roadmap**: Contribute to the progress of big-AGI)
<br/>
## 🚀 Installation
To get started with big-AGI, follow our comprehensive [Installation Guide](docs/installation.md).
The guide covers various installation options, whether you're spinning it up on
your local computer, deploying on Vercel, on Cloudflare, or rolling it out
through Docker.
Whether you're a developer, system integrator, or enterprise user, you'll find step-by-step instructions
to set up big-AGI quickly and easily.
[![Installation Guide](https://img.shields.io/badge/Installation%20Guide-blue?style=for-the-badge&logo=read-the-docs&logoColor=white)](docs/installation.md)
Or bring your API keys and jump straight into our free instance on [big-AGI.com](https://big-agi.com).
<br/>
# 🌟 Get Involved!
[//]: # ([![Official Discord]&#40;https://img.shields.io/discord/1098796266906980422?label=discord&logo=discord&logoColor=%23fff&style=for-the-badge&#41;]&#40;https://discord.gg/MkH4qj2Jp9&#41;)
[![Official Discord](https://discordapp.com/api/guilds/1098796266906980422/widget.png?style=banner2)](https://discord.gg/MkH4qj2Jp9)
- [ ] 📢️ [**Chat with us** on Discord](https://discord.gg/MkH4qj2Jp9)
- [ ]**Give us a star** on GitHub 👆
- [ ] 🚀 **Do you like code**? You'll love this gem of a project! [_Pick up a task!_](https://github.com/users/enricoros/projects/4/views/4) - _easy_ to _pro_
- [ ] 💡 Got a feature suggestion? [_Add your roadmap ideas_](https://github.com/enricoros/big-agi/issues/new?&template=roadmap-request.md)
- [ ] ✨ [Deploy](docs/installation.md) your [fork](docs/customizations.md) for your friends and family, or [customize it for work](docs/customizations.md)
<br/>
[//]: # ([![GitHub stars]&#40;https://img.shields.io/github/stars/enricoros/big-agi&#41;]&#40;https://github.com/enricoros/big-agi/stargazers&#41;)
[//]: # ([![GitHub forks]&#40;https://img.shields.io/github/forks/enricoros/big-agi&#41;]&#40;https://github.com/enricoros/big-agi/network&#41;)
[//]: # ([![GitHub pull requests]&#40;https://img.shields.io/github/issues-pr/enricoros/big-agi&#41;]&#40;https://github.com/enricoros/big-agi/pulls&#41;)
[//]: # ([![License]&#40;https://img.shields.io/github/license/enricoros/big-agi&#41;]&#40;https://github.com/enricoros/big-agi/LICENSE&#41;)
---
2023-2024 · Enrico Ros x [big-AGI](https://big-agi.com) · License: [MIT](LICENSE) · Made with 💙
2023-2025 · Enrico Ros x [Big-AGI](https://big-agi.com) · License: [MIT](LICENSE) · Made with 💙
+6 -4
View File
@@ -1,6 +1,8 @@
# big-AGI Documentation
# big-AGI v1 Documentation (Legacy)
Find all the information you need to get started, configure, and effectively use big-AGI.
> **Note:** This is documentation for the **v1 legacy branch**. For the latest Big-AGI, see the [main branch](https://github.com/enricoros/big-AGI/tree/main) or visit [big-agi.com](https://big-agi.com).
Find all the information you need to get started, configure, and effectively use big-AGI v1.
[//]: # (## Quick Start)
@@ -33,7 +35,7 @@ Detailed guides to configure your big-AGI interface and models.
## Deployment
System integrators, administrators, whitelabelers: instead of using the public big-AGI instance on get.big-agi.com, you can deploy your own instance.
System integrators, administrators, whitelabelers: instead of using the public big-AGI instance on app.big-agi.com, you can deploy your own instance.
Step-by-step deployment and system configuration instructions.
@@ -53,7 +55,7 @@ Step-by-step deployment and system configuration instructions.
Join our community or get support:
- Visit our [GitHub repository](https://github.com/enricoros/big-AGI) for source code and issue tracking
- Check the latest updates and features on [Changelog](changelog.md) or the in-app [News](https://get.big-agi.com/news)
- Check the latest updates and features on [Changelog](changelog.md) or the in-app [News](https://big-agi.com/news)
- Connect with us and other users on [Discord](https://discord.gg/MkH4qj2Jp9) for discussions, help, and sharing your experiences with big-AGI
Thank you for choosing big-AGI. We're excited to see what you'll build.
+5 -9
View File
@@ -1,16 +1,12 @@
## Changelog
## Changelog (v1 Legacy Branch)
This is a high-level changelog. Calls out some of the high level features batched
by release.
This is a high-level changelog for the v1 legacy branch. For the latest Big-AGI, see the [main branch](https://github.com/enricoros/big-AGI).
- For the live roadmap, please see [the GitHub project](https://github.com/users/enricoros/projects/4/views/2)
### 1.16.11 · October 2025 (Final Release)
### 1.17.0 - Jun 2024
Final v1 legacy release. Branch reaches end-of-life.
- milestone: [1.17.0](https://github.com/enricoros/big-agi/milestone/17)
- work in progress: [big-AGI open roadmap](https://github.com/users/enricoros/projects/4/views/2), [help here](https://github.com/users/enricoros/projects/4/views/4)
### What's New in 1.16.1...1.16.9 · Jan 21, 2025 (patch releases)
### What's New in 1.16.1...1.16.10 · 2024-2025 (patch releases)
- 1.16.9: Docker Gemini fix (R1 models are supported in Big-AGI 2)
- 1.16.8: OpenAI ChatGPT-4o Latest (o1 models are supported in Big-AGI 2)
+5 -1
View File
@@ -1,4 +1,8 @@
# Deploying `big-AGI` with Docker
# Deploying `big-AGI` with Docker (v1 Legacy)
> **Note:** This documentation is for the **v1 legacy branch**. For the latest Big-AGI, use Docker tags `:latest`, `:stable`, or `:development` which point to the [main branch](https://github.com/enricoros/big-AGI/tree/main).
>
> To use v1 legacy specifically, use Docker tags `:v1` or `:v1-stable`.
Utilize Docker containers to deploy the big-AGI application for an efficient and automated deployment process.
Docker ensures faster development cycles, easier collaboration, and seamless environment management.
+1 -1
View File
@@ -88,6 +88,6 @@
"typescript": "^5.4.5"
},
"engines": {
"node": "^22.0.0 || ^20.0.0 || ^18.0.0"
"node": "^24.0.0 || ^22.0.0 || ^20.0.0 || ^18.0.0"
}
}
+59 -1
View File
@@ -1,7 +1,7 @@
import * as React from 'react';
import { useShallow } from 'zustand/react/shallow';
import { Box, Button, Dropdown, IconButton, ListDivider, ListItem, ListItemButton, ListItemDecorator, Menu, MenuButton, MenuItem, Tooltip, Typography } from '@mui/joy';
import { Box, Button, Card, CardContent, Dropdown, IconButton, ListDivider, ListItem, ListItemButton, ListItemDecorator, Menu, MenuButton, MenuItem, Tooltip, Typography } from '@mui/joy';
import AddIcon from '@mui/icons-material/Add';
import CheckRoundedIcon from '@mui/icons-material/CheckRounded';
import ClearIcon from '@mui/icons-material/Clear';
@@ -10,6 +10,7 @@ import FileDownloadOutlinedIcon from '@mui/icons-material/FileDownloadOutlined';
import FileUploadOutlinedIcon from '@mui/icons-material/FileUploadOutlined';
import FolderIcon from '@mui/icons-material/Folder';
import MoreVertIcon from '@mui/icons-material/MoreVert';
import RocketLaunchRoundedIcon from '@mui/icons-material/RocketLaunchRounded';
import StarOutlineRoundedIcon from '@mui/icons-material/StarOutlineRounded';
import type { DConversationId } from '~/common/state/store-chats';
@@ -18,8 +19,10 @@ import { DFolder, useFolderStore } from '~/common/state/store-folders';
import { DebounceInputMemo } from '~/common/components/DebounceInput';
import { FoldersToggleOff } from '~/common/components/icons/FoldersToggleOff';
import { FoldersToggleOn } from '~/common/components/icons/FoldersToggleOn';
import { Link } from '~/common/components/Link';
import { PageDrawerHeader } from '~/common/layout/optima/components/PageDrawerHeader';
import { PageDrawerList } from '~/common/layout/optima/components/PageDrawerList';
import { ROUTE_APP_NEWS } from '~/common/app.routes';
import { capitalizeFirstLetter } from '~/common/util/textUtils';
import { themeScalingMap, themeZIndexOverMobileDrawer } from '~/common/app.theme';
import { useOptimaDrawers } from '~/common/layout/optima/useOptimaDrawers';
@@ -78,6 +81,13 @@ function ChatDrawer(props: {
const [searchSorting, setSearchSorting] = React.useState<ChatSearchSorting>('frequency');
const [debouncedSearchQuery, setDebouncedSearchQuery] = React.useState('');
const [folderChangeRequest, setFolderChangeRequest] = React.useState<FolderChangeRequest | null>(null);
const [bigAgi2CalloutDismissed, setBigAgi2CalloutDismissed] = React.useState(() => {
try {
return localStorage.getItem('dismissedBA2ChatDrawerNotice') === 'true';
} catch {
return false;
}
});
// external state
const { closeDrawer, closeDrawerOnMobile } = useOptimaDrawers();
@@ -125,6 +135,15 @@ function ChatDrawer(props: {
props.activeConversationId && onConversationsExportDialog(props.activeConversationId, true);
}, [onConversationsExportDialog, props.activeConversationId]);
const handleDismissBigAgi2Callout = React.useCallback(() => {
setBigAgi2CalloutDismissed(true);
try {
localStorage.setItem('dismissedBA2ChatDrawerNotice', 'true');
} catch {
// ignore
}
}, []);
// Folder change request
@@ -340,6 +359,45 @@ function ChatDrawer(props: {
)}
</Box>
{/* Big-AGI 2.0 Callout */}
{!bigAgi2CalloutDismissed && (
<Box sx={{ p: 2 }}>
<Card variant='solid' color='primary' invertedColors>
<CardContent sx={{ gap: 1, position: 'relative' }}>
<IconButton
size='sm'
onClick={handleDismissBigAgi2Callout}
sx={{
position: 'absolute',
top: -4,
right: -8,
}}
>
<ClearIcon />
</IconButton>
<Typography level='title-sm'>
Big-AGI 2.0 is Live!
</Typography>
<Typography level='body-xs' sx={{ mb: 1 }}>
Experience Beam 2, Personas, and Cloud Sync.
</Typography>
<Button
fullWidth
size='sm'
variant='solid'
color='neutral'
endDecorator={<RocketLaunchRoundedIcon />}
component={Link}
href={ROUTE_APP_NEWS}
noLinkStyle
>
Learn More
</Button>
</CardContent>
</Card>
</Box>
)}
<ListDivider sx={{ my: 0 }} />
{/* Bottom commands */}
+53 -11
View File
@@ -5,6 +5,8 @@ import TimeAgo from 'react-timeago';
import { AspectRatio, Box, Button, Card, CardContent, CardOverflow, Container, Grid, Typography } from '@mui/joy';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import LaunchIcon from '@mui/icons-material/Launch';
import ArrowForwardRoundedIcon from '@mui/icons-material/ArrowForwardRounded';
import ArrowOutwardRoundedIcon from '@mui/icons-material/ArrowOutwardRounded';
import { Brand } from '~/common/app.config';
import { Link } from '~/common/components/Link';
@@ -14,7 +16,9 @@ import { capitalizeFirstLetter } from '~/common/util/textUtils';
import { NewsItems } from './news.data';
import { beamNewsCallout } from './beam.data';
import { bigAgi2NewsCallout } from './bigAgi2.data';
import { bigAgi2NewsCallout, bigAgi2Url } from './bigAgi2.data';
import { downloadAllConversationsJson } from '~/modules/trade/trade.client';
// number of news items to show by default, before the expander
@@ -65,6 +69,8 @@ export function AppNews() {
// show expander
const canExpand = news.length < NewsItems.length;
const currentVer = '1.6.9'; // firstNews?.versionCode;
return (
<Box sx={{
@@ -79,26 +85,41 @@ export function AppNews() {
display: 'flex', flexDirection: 'column', alignItems: 'center',
}}>
<Typography level='h1' sx={{ fontSize: '2.9rem', mb: 4 }}>
Welcome to {Brand.Title.Base} <Box component='span' sx={{ animation: `${animationColorBlues} 10s infinite`, zIndex: 1 /* perf-opt */ }}>{firstNews?.versionCode}</Box>!
<Typography level='h1' sx={{ fontSize: '2.7rem', mb: 4 }}>
Welcome to {Brand.Title.Base} <Box component='span' sx={{ animation: `${animationColorBlues} 10s infinite`, zIndex: 1 /* perf-opt */ }}>{currentVer}</Box>!
</Typography>
<Typography sx={{ mb: 2 }} level='title-sm'>
{capitalizeFirstLetter(Brand.Title.Base)} has been updated to version {firstNews?.versionCode}
<Typography level='title-sm' sx={{ mb: 2, textAlign: 'center', lineHeight: 'lg' }} >
{capitalizeFirstLetter(Brand.Title.Base)} has been updated to version {currentVer}.<br/>
<b>And a whole-new 2.0 is waiting!</b>
</Typography>
<Box sx={{ mb: 5 }}>
<Box sx={{ mb: 5, display: 'flex', gap: 2, flexWrap: 'wrap', justifyContent: 'center' }}>
<Button
variant='solid' color='primary' size='lg'
variant='solid' color='neutral' size='lg'
component={Link} href={ROUTE_INDEX} noLinkStyle
endDecorator='✨'
endDecorator={<ArrowForwardRoundedIcon />}
// endDecorator='✨'
sx={{
boxShadow: '0 8px 24px -4px rgb(var(--joy-palette-primary-mainChannel) / 20%)',
// boxShadow: '0 8px 24px -4px rgb(var(--joy-palette-primary-mainChannel) / 20%)',
minWidth: 180,
}}
>
Continue
</Button>
<Button
variant='solid' color='primary' size='lg'
component={Link} href={bigAgi2Url} noLinkStyle
endDecorator={<><ArrowOutwardRoundedIcon /></>}
// endDecorator='✨'
sx={{
boxShadow: '0 8px 24px -4px rgb(var(--joy-palette-primary-mainChannel) / 20%)',
minWidth: 180,
transform: 'translateY(-1px)',
}}
>
Big-AGI 2
</Button>
</Box>
{/*<Typography level='title-sm' sx={{ mb: 1, placeSelf: 'start', ml: 1 }}>*/}
@@ -107,7 +128,7 @@ export function AppNews() {
<Container disableGutters maxWidth='sm'>
{news?.map((ni, idx) => {
// const firstCard = idx === 0;
const firstCard = idx === 0;
const addPadding = false; //!firstCard; // || showExpander;
return <React.Fragment key={idx}>
@@ -126,7 +147,7 @@ export function AppNews() {
)}
{/* News Item */}
<Card key={'news-' + idx} sx={{ mb: 3, minHeight: 32, gap: 1 }}>
<Card color={firstCard ? 'primary' : undefined} key={'news-' + idx} sx={{ mb: 3, minHeight: 32, gap: 1 }}>
<CardContent sx={{ position: 'relative', pr: addPadding ? 4 : 0 }}>
<Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
<Typography level='title-sm' component='div'>
@@ -160,6 +181,27 @@ export function AppNews() {
</ul>
)}
{firstCard && <Box sx={{ mt: 2 }}>
<Card variant='soft' color='primary' invertedColors>
<CardContent>
<Typography level='title-sm' sx={{ lineHeight: 'lg' }}>
<b>Migrate your chats:</b> you can download all your conversations at any time by clicking
on &quot;Export&quot; &gt; &quot;Download All&quot; or the button below. Then open Big-AGI 2 and
import the conversation by clicking &quot;Organize&quot; &gt; &quot;Import&quot;.
</Typography>
<Button
size='sm'
variant='soft'
color='primary'
sx={{ mt: 1 }}
onClick={downloadAllConversationsJson}
>
Download All Conversations
</Button>
</CardContent>
</Card>
</Box>}
</CardContent>
{!!ni.versionCoverImage && (
+23 -11
View File
@@ -3,38 +3,50 @@ import * as React from 'react';
import { Button, Card, CardContent, Grid, Typography } from '@mui/joy';
import AccessTimeIcon from '@mui/icons-material/AccessTime';
import LaunchIcon from '@mui/icons-material/Launch';
import RocketLaunchRounded from '@mui/icons-material/RocketLaunchRounded';
import SupportAgentIcon from '@mui/icons-material/SupportAgent';
import { Link } from '~/common/components/Link';
import { clientUtmSource } from '~/common/util/pwaUtils';
const bigAgi2SurveyUrl = 'https://y2rjg0zillz.typeform.com/to/ZSADpr5u?utm_source=gh-stable&utm_medium=news&utm_campaign=ea2';
export const bigAgi2Url = 'https://app.big-agi.com' + clientUtmSource('upgrade');
const bigAgiSupport = 'https://form.typeform.com/to/nLf8gFmx?utm_source=big-agi-1&utm_medium=app&utm_campaign=support';
export const bigAgi2NewsCallout =
<Card variant='solid' invertedColors>
<Card variant='solid' color='primary' invertedColors>
<CardContent sx={{ gap: 2 }}>
<Typography level='title-lg'>
Big-AGI 2.0 - In Development
Big-AGI 2.0 - Now Live
</Typography>
<Typography level='body-sm'>
We&apos;re building the next version of Big-AGI with your needs in mind. New features, better performance, enhanced AI interactions. Help us shape it.
<Typography level='title-sm' sx={{ lineHeight: 'xl' }}>
Experience the <b>next generation of Big-AGI</b> with <b>Beam 2</b>, <b>Personas</b>, and <b>Cloud Sync</b> to never lose data.
</Typography>
<Grid container spacing={1}>
<Grid xs={12} sm={7}>
<Button
fullWidth variant='soft' color='primary' endDecorator={<LaunchIcon />}
component={Link} href={bigAgi2SurveyUrl} noLinkStyle target='_blank'
size='lg'
fullWidth variant='solid' color='neutral' endDecorator={<RocketLaunchRounded />}
component={Link} href={bigAgi2Url} noLinkStyle target='_blank'
>
Apply for Early Access
Big-AGI 2.0
</Button>
</Grid>
<Grid xs={12} sm={5} sx={{ display: 'flex', flexAlign: 'center', justifyContent: 'center' }}>
<Button
fullWidth variant='outlined' color='primary' startDecorator={<AccessTimeIcon />}
disabled
fullWidth variant='soft' color='primary' endDecorator={<SupportAgentIcon />}
component={Link} href={bigAgiSupport} noLinkStyle target='_blank'
// disabled
>
Coming Fall 2024
Support
</Button>
</Grid>
</Grid>
</CardContent>
</Card>;
+14 -1
View File
@@ -51,6 +51,19 @@ interface NewsItem {
// news and feature surfaces
export const NewsItems: NewsItem[] = [
{
versionCode: '2.0',
versionName: 'Big-AGI',
versionDate: new Date('2025-10-06T00:00:00Z'),
// text: <>Big-AGI 2.0 is now available at <B href='https://app.big-agi.com'>app.big-agi.com</B></>,
items: [
{ text: <>Big-AGI 2.0 is ready with top-notch AI models support and more productive and faster than ever, including:</> },
{ text: <><B href='https://app.big-agi.com' wow>Beam 2</B>: multi-modal, program-based, follow-ups, save presets</>, icon: ChatBeamIcon },
{ text: <><B wow>Personas</B>: craft your perfect AI assistants with data support</> },
{ text: <><B wow>Cloud Sync</B>: never lose your data</> },
{ text: <>Built for the future, madly optimized</> },
],
},
/*{
versionCode: '1.17.0',
items: [
@@ -86,7 +99,7 @@ export const NewsItems: NewsItem[] = [
{ text: <>1.16.7: Gpt-4o <B>2024-08-06</B></> },
{ text: <>1.16.8: <B>ChatGPT-4o</B> latest</> },
{ text: <>1.16.9: <B>Gemini</B> fixes</> },
{ text: <>OpenAI <B>o1</B>, DeepSeek R1, and newer models require Big-AGI 2. <B href='https://y2rjg0zillz.typeform.com/to/ZSADpr5u?utm_source=gh-stable&utm_medium=news&utm_campaign=ea2'>Sign up here</B></> },
{ text: <>OpenAI <B>o1</B>, DeepSeek R1, and newer models require Big-AGI 2. <B href='https://form.typeform.com/to/ZSADpr5u?utm_source=gh-stable&utm_medium=news&utm_campaign=ea2'>Sign up here</B></> },
],
},
{
+1 -1
View File
@@ -7,7 +7,7 @@ import { useAppStateStore } from '~/common/state/store-appstate';
// update this variable every time you want to broadcast a new version to clients
export const incrementalNewsVersion: number = 16.1; // not notifying for 1.16.9
export const incrementalNewsVersion: number = 16.9; // not notifying for 1.16.9
interface NewsState {
+366 -121
View File
@@ -1,6 +1,6 @@
import type { GeminiModelSchema } from './gemini.wiretypes';
import type { ModelDescriptionSchema } from '../llm.server.types';
import { LLM_IF_OAI_Chat, LLM_IF_OAI_Json, LLM_IF_OAI_Vision } from '../../store-llms';
import { LLM_IF_OAI_Chat, LLM_IF_OAI_Fn, LLM_IF_OAI_Json, LLM_IF_OAI_Vision } from '../../store-llms';
// dev options
@@ -12,7 +12,21 @@ const geminiChatInterfaces: GeminiModelSchema['supportedGenerationMethods'] = ['
// unsupported interfaces
const filterUnallowedNames = ['Legacy'];
const filterUnallowedInterfaces: GeminiModelSchema['supportedGenerationMethods'] = ['generateAnswer', 'embedContent', 'embedText'];
const filterUnallowedInterfaces: GeminiModelSchema['supportedGenerationMethods'] = [
'generateAnswer', // e.g. removes "models/aqa"
'embedContent', // e.g. removes "models/embedding-001"
'embedText', // e.g. removes "models/text-embedding-004"
'predict', // e.g. removes "models/imagen-3.0-generate-002" (appeared on 2025-02-09)
];
const filterLyingModelNames: GeminiModelSchema['name'][] = [
// 2025-02-27: verified, old model is no more
'models/gemini-2.0-flash-exp', // verified, replaced by gemini-2.0-flash, which is non-free anymore
// 2025-02-09 update: as of now they cleared the list, so we restart
// 2024-12-10: name of models that are not what they say they are (e.g. 1114 is actually 1121 as of )
'models/gemini-1.5-flash-8b-exp-0924', // replaced by non-free
'models/gemini-1.5-flash-8b-exp-0827', // replaced by non-free
];
/* Manual models details
@@ -20,175 +34,405 @@ const filterUnallowedInterfaces: GeminiModelSchema['supportedGenerationMethods']
- Latest version gemini-1.0-pro-latest <model>-<generation>-<variation>-latest
- Latest stable version gemini-1.0-pro <model>-<generation>-<variation>
- Stable versions gemini-1.0-pro-001 <model>-<generation>-<variation>-<version>
Gemini capabilities chart (updated 2024-10-01):
- [table stakes] System instructions
- JSON Mode, with optional JSON Schema [NOTE: JSON Schema is poorly supported?]
- Adjustable Safety Settings
- Caching
- Tuning
- [good] Function calling, with configuration
- [great] Code execution
*/
// Experimental Gemini models are Free of charge
const geminiExpPricingFree: ModelDescriptionSchema['pricing'] = {
// input: 'free', output: 'free',
};
const gemini20FlashPricing: ModelDescriptionSchema['pricing'] = {
chatIn: 0.10, // inputAudio: 0.70,
chatOut: 0.40,
};
const gemini20FlashLitePricing: ModelDescriptionSchema['pricing'] = {
chatIn: 0.075,
chatOut: 0.30,
};
const gemini15FlashPricing: ModelDescriptionSchema['pricing'] = {
chatIn: 0.075,
chatOut: 0.30,
};
const gemini15Flash8BPricing: ModelDescriptionSchema['pricing'] = {
chatIn: 0.0375,
chatOut: 0.15,
};
const gemini15ProPricing: ModelDescriptionSchema['pricing'] = {
chatIn: 1.25,
chatOut: 5.00,
};
const _knownGeminiModels: ({
id: string,
labelOverride?: string,
isNewest?: boolean,
isPreview?: boolean
symLink?: string
} & Pick<ModelDescriptionSchema, 'interfaces' | 'pricing' | 'trainingDataCutoff' | 'hidden'>)[] = [
isPreview?: boolean,
symLink?: string,
deprecated?: string, // Gemini may provide deprecation dates
_delete?: boolean, // some gemini models are not acknowledged by Google Docs anymore, and leaving them in the list will confuse users
} & Pick<ModelDescriptionSchema, 'interfaces' | 'pricing' | 'hidden' | 'benchmark'>)[] = [
// Generation 1.5
/// Generation 2.5
// 2.5 Pro Experimental
{
id: 'models/gemini-2.5-pro-exp-03-25',
isPreview: true,
pricing: geminiExpPricingFree,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1443 },
},
/// Generation 2.0
// 2.0 Experimental - Pro
{
hidden: true, // showing the 2.5 instead
id: 'models/gemini-2.0-pro-exp-02-05', // Base model: Gemini 2.0 Pro
isPreview: true,
pricing: geminiExpPricingFree,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1380 },
},
{
hidden: true, // only keeping the latest
id: 'models/gemini-2.0-pro-exp',
symLink: 'models/gemini-2.0-pro-exp-02-05',
// copied from symlink
isPreview: true,
pricing: geminiExpPricingFree,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1380 },
},
{
_delete: true, // replaced by gemini-2.0-pro-exp-02-05, 2025-02-27: verified, old model is no more
id: 'models/gemini-exp-1206',
labelOverride: 'Gemini 2.0 Pro Experimental 1206',
isPreview: true,
pricing: geminiExpPricingFree,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1373 },
},
// 2.0 Experimental - Flash Thinking
{
hidden: true, // only keeping the latest
id: 'models/gemini-2.0-flash-thinking-exp', // alias to the latest Flash Thinking model
labelOverride: 'Gemini 2.0 Flash Thinking Experimental',
symLink: 'models/gemini-2.0-flash-thinking-exp-01-21',
// copied from symlink
pricing: geminiExpPricingFree,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision],
benchmark: { cbaElo: 1385 },
isPreview: true,
},
{
id: 'models/gemini-2.0-flash-thinking-exp-01-21',
pricing: geminiExpPricingFree,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision],
benchmark: { cbaElo: 1385 },
isPreview: true,
},
{
hidden: true, // replaced by gemini-2.0-flash-thinking-exp-01-21 - 2025-02-27: seems still different on the API, hence no deletion yet
id: 'models/gemini-2.0-flash-thinking-exp-1219',
labelOverride: 'Gemini 2.0 Flash Thinking Experimental 12-19',
pricing: geminiExpPricingFree,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision],
benchmark: { cbaElo: 1363 },
isPreview: true,
},
// 2.0 Experimental - Flash Image Generation
{
id: 'models/gemini-2.0-flash-exp-image-generation',
// labelOverride: 'Gemini 2.0 Flash Native Image Generation',
pricing: geminiExpPricingFree,
interfaces: [
LLM_IF_OAI_Chat, LLM_IF_OAI_Vision,
// LLM_IF_HOTFIX_StripSys0, // This first Gemini Image Generation model does not support the developer instruction
],
isPreview: true,
},
// 2.0 Flash
{
id: 'models/gemini-2.0-flash-001',
pricing: gemini20FlashPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1358 },
},
{
id: 'models/gemini-2.0-flash',
symLink: 'models/gemini-2.0-flash-001',
// copied from symlink
pricing: gemini20FlashPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1358 },
},
// 2.0 Flash Lite
{
id: 'models/gemini-2.0-flash-lite',
pricing: gemini20FlashLitePricing,
symLink: 'models/gemini-2.0-flash-lite-001',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1309 },
},
{
id: 'models/gemini-2.0-flash-lite-001',
pricing: gemini20FlashLitePricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1309 },
},
{
hidden: true, // discouraged, as the official is out
id: 'models/gemini-2.0-flash-lite-preview-02-05',
isPreview: true,
pricing: gemini20FlashLitePricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1309 },
},
{
id: 'models/gemini-2.0-flash-lite-preview',
symLink: 'models/gemini-2.0-flash-lite-preview-02-05',
// coped from symlink
isPreview: true,
pricing: gemini20FlashLitePricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1309 },
},
/// Generation 1.5
// Gemini 1.5 Flash Models
{
id: 'models/gemini-1.5-flash-latest', // updated regularly and might be a preview version
isNewest: true,
isPreview: true,
pricing: {
chatIn: 0.70, // 0.35 up to 128k tokens, 0.70 prompts > 128k tokens
chatOut: 2.10, // 1.05 up to 128k tokens, 2.10 prompts > 128k tokens
},
trainingDataCutoff: 'May 2024',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json], // input: audio, images and text
pricing: gemini15FlashPricing,
// symLink: '-002 or newer',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
},
{
id: 'models/gemini-1.5-flash',
// copied from above
pricing: {
chatIn: 0.70, // 0.35 up to 128k tokens, 0.70 prompts > 128k tokens
chatOut: 2.10, // 1.05 up to 128k tokens, 2.10 prompts > 128k tokens
},
trainingDataCutoff: 'Apr 2024',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json], // input: audio, images and text
// Defaults to version 002 on Oct 8, 2024
symLink: 'models/gemini-1.5-flash-002',
pricing: gemini15FlashPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1271 },
},
{
id: 'models/gemini-1.5-flash-002', // new stable version
pricing: gemini15FlashPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1271 },
hidden: true,
},
{
id: 'models/gemini-1.5-flash-001',
// copied from above
pricing: {
chatIn: 0.70, // 0.35 up to 128k tokens, 0.70 prompts > 128k tokens
chatOut: 2.10, // 1.05 up to 128k tokens, 2.10 prompts > 128k tokens
},
trainingDataCutoff: 'Apr 2024',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json], // input: audio, images and text
id: 'models/gemini-1.5-flash-001', // previous stable version
pricing: gemini15FlashPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1227 },
hidden: true,
},
{
id: 'models/gemini-1.5-flash-001-tuning', // supports model tuning
pricing: gemini15FlashPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn /* Tuning ... */],
hidden: true,
},
// Gemini 1.5 Flash-8B Models
{
id: 'models/gemini-1.5-pro-latest', // updated regularly and might be a preview version
isNewest: true,
isPreview: true,
pricing: {
chatIn: 7.00, // $3.50 / 1 million tokens (for prompts up to 128K tokens), $7.00 / 1 million tokens (for prompts longer than 128K)
chatOut: 21.00, // $10.50 / 1 million tokens (128K or less), $21.00 / 1 million tokens (128K+)
},
trainingDataCutoff: 'May 2024',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json], // input: audio, images and text
id: 'models/gemini-1.5-flash-8b-latest',
isPreview: false,
pricing: gemini15Flash8BPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
},
{
id: 'models/gemini-1.5-pro', // latest stable -> 001
// copied from above
pricing: {
chatIn: 7.00, // $3.50 / 1 million tokens (for prompts up to 128K tokens), $7.00 / 1 million tokens (for prompts longer than 128K)
chatOut: 21.00, // $10.50 / 1 million tokens (128K or less), $21.00 / 1 million tokens (128K+)
},
trainingDataCutoff: 'Apr 2024',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json],
id: 'models/gemini-1.5-flash-8b',
symLink: 'models/gemini-1.5-flash-8b-001',
pricing: gemini15Flash8BPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1213 },
},
{
id: 'models/gemini-1.5-flash-8b-001',
pricing: gemini15Flash8BPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1213 },
hidden: true,
},
// Gemini 1.5 Pro Models
{
id: 'models/gemini-1.5-pro-latest', // updated to latest stable version
pricing: gemini15ProPricing,
// symLink: '-002 or newer',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
},
{
id: 'models/gemini-1.5-pro',
symLink: 'models/gemini-1.5-pro-002',
pricing: gemini15ProPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1302 },
},
{
id: 'models/gemini-1.5-pro-002',
pricing: gemini15ProPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1302 },
hidden: true,
},
{
id: 'models/gemini-1.5-pro-001', // stable snapshot
// copied from above
pricing: {
chatIn: 7.00, // $3.50 / 1 million tokens (for prompts up to 128K tokens), $7.00 / 1 million tokens (for prompts longer than 128K)
chatOut: 21.00, // $10.50 / 1 million tokens (128K or less), $21.00 / 1 million tokens (128K+)
},
trainingDataCutoff: 'Apr 2024',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json],
id: 'models/gemini-1.5-pro-001',
pricing: gemini15ProPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Json, LLM_IF_OAI_Fn],
benchmark: { cbaElo: 1260 },
hidden: true,
},
// Generation 1.0
{
id: 'models/gemini-1.0-pro-latest',
pricing: {
chatIn: 0.50,
chatOut: 1.50,
},
interfaces: [LLM_IF_OAI_Chat],
},
{
id: 'models/gemini-1.0-pro',
pricing: {
chatIn: 0.50,
chatOut: 1.50,
},
interfaces: [LLM_IF_OAI_Chat],
hidden: true,
},
{
id: 'models/gemini-1.0-pro-001',
pricing: {
chatIn: 0.50,
chatOut: 1.50,
},
interfaces: [LLM_IF_OAI_Chat],
hidden: true,
},
/// Generation 1.0
// Generation 1.0 + Vision
// Gemini 1.0 Pro Vision Model
{
id: 'models/gemini-1.0-pro-vision-latest',
pricing: {
chatIn: 0.50,
chatOut: 1.50,
},
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision], // Text and Images
hidden: true,
},
// Older symlinks
{
id: 'models/gemini-pro',
symLink: 'models/gemini-1.0-pro',
// copied from symlinked
pricing: {
chatIn: 0.50,
chatOut: 1.50,
},
interfaces: [LLM_IF_OAI_Chat],
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision],
hidden: true,
_delete: true, // confusing
},
{
id: 'models/gemini-pro-vision',
// copied from symlinked
symLink: 'models/gemini-1.0-pro-vision',
pricing: {
chatIn: 0.50,
chatOut: 1.50,
},
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision], // Text and Images
hidden: true,
_delete: true, // confusing
},
/// Experimental
// LearnLM Experimental Model
{
id: 'models/learnlm-1.5-pro-experimental',
isPreview: true,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision],
pricing: geminiExpPricingFree,
// hidden: true,
// _delete: true,
},
{
id: 'models/gemma-3-27b-it',
isPreview: true,
interfaces: [
LLM_IF_OAI_Chat,
// LLM_IF_HOTFIX_StripImages, /* "Image input modality is not enabled for models/gemma-3-27b-it" */
// LLM_IF_HOTFIX_Sys0ToUsr0, /* "Developer instruction is not enabled for models/gemma-3-27b-it" */
],
// pricing: geminiExpPricingFree,
// hidden: true,
// _delete: true,
},
];
export function geminiFilterModels(geminiModel: GeminiModelSchema): boolean {
const isAllowed = !filterUnallowedNames.some(name => geminiModel.displayName.includes(name));
const isSupported = !filterUnallowedInterfaces.some(iface => geminiModel.supportedGenerationMethods.includes(iface));
return isAllowed && isSupported;
const isWhatItSaysItIs = !filterLyingModelNames.includes(geminiModel.name);
return isAllowed && isSupported && isWhatItSaysItIs;
}
const _sortOderIdPrefix: string[] = [
'models/gemini-exp',
'models/gemini-2.5-pro',
'models/gemini-2.0-pro',
'models/gemini-2.0-flash-exp-image-generation',
'models/gemini-2.0-flash-thinking',
'models/gemini-2.0-flash-0',
'models/gemini-2.0-flash',
'models/gemini-2.0-flash-lite',
'models/gemini-1.5-pro',
'models/gemini-1.5-flash',
'models/gemini-1.5-flash-8b',
'models/gemini-1.0-pro',
'models/gemini-pro',
'models/gemma',
'models/learnlm',
] as const;
export function geminiSortModels(a: ModelDescriptionSchema, b: ModelDescriptionSchema): number {
// links to the bottom
const aIsLink = a.label.startsWith('🔗');
const bIsLink = b.label.startsWith('🔗');
if (aIsLink && !bIsLink) return 1;
if (!aIsLink && bIsLink) return -1;
// hidden to the bottom, then names descending
if (a.hidden && !b.hidden) return 1;
if (!a.hidden && b.hidden) return -1;
// if (a.hidden && !b.hidden) return 1;
// if (!a.hidden && b.hidden) return -1;
// models beginning with 'gemini-' to the top
// const aGemini = a.label.startsWith('Gemini');
// const bGemini = b.label.startsWith('Gemini');
// if (aGemini && !bGemini) return -1;
// if (!aGemini && bGemini) return 1;
// sort by sortOrderIdPrefix
const aSortIdx = _sortOderIdPrefix.findIndex(p => a.id.startsWith(p));
const bSortIdx = _sortOderIdPrefix.findIndex(p => b.id.startsWith(p));
if (aSortIdx !== -1 && bSortIdx !== -1) {
if (aSortIdx < bSortIdx) return -1;
if (aSortIdx > bSortIdx) return 1;
}
// sort by label descending
return b.label.localeCompare(a.label);
}
export function geminiModelToModelDescription(geminiModel: GeminiModelSchema): ModelDescriptionSchema {
export function geminiModelToModelDescription(geminiModel: GeminiModelSchema): ModelDescriptionSchema | null {
const { description, displayName, name: modelId, supportedGenerationMethods } = geminiModel;
if (DEV_DEBUG_GEMINI_MODELS)
console.log('geminiModelToModelDescription', geminiModel);
// if (DEV_DEBUG_GEMINI_MODELS)
// console.log('geminiModelToModelDescription', geminiModel);
// find known manual mapping
const knownModel = _knownGeminiModels.find(m => m.id === modelId);
if (!knownModel && DEV_DEBUG_GEMINI_MODELS)
console.warn('geminiModelToModelDescription: unknown model', modelId, geminiModel);
// handle _delete
if (knownModel?._delete)
return null;
// handle symlinks
const label = knownModel?.symLink
? `🔗 ${displayName.replace('1.0', '')}${knownModel.symLink}`
: displayName;
let label = knownModel?.symLink
? `🔗 ${knownModel?.labelOverride || displayName}${knownModel.symLink}`
: knownModel?.labelOverride || displayName;
// FIX: the Gemini 1114 model now returns 1121 as the version.. highlight the issue
// if (geminiModel.name.endsWith('1114') && label.endsWith('1121'))
// label += ' (really: 1114)';
// handle hidden models
const hasChatInterfaces = supportedGenerationMethods.some(iface => geminiChatInterfaces.includes(iface));
@@ -200,14 +444,13 @@ export function geminiModelToModelDescription(geminiModel: GeminiModelSchema): M
// description
const { version, topK, topP, temperature } = geminiModel;
const descriptionLong = description + ` (Version: ${version}, Defaults: temperature=${temperature}, topP=${topP}, topK=${topK}, interfaces=[${supportedGenerationMethods.join(',')}])`;
const descriptionLong = (description || 'No description.') + ` (Version: ${version}, Defaults: temperature=${temperature}, topP=${topP}, topK=${topK}, interfaces=[${supportedGenerationMethods.join(',')}])`;
// use known interfaces, or add chat if this is a generateContent model
const interfaces: ModelDescriptionSchema['interfaces'] = knownModel?.interfaces || [];
if (!interfaces.length && hasChatInterfaces) {
interfaces.push(LLM_IF_OAI_Chat);
// if (geminiVisionNames.some(name => modelId.includes(name)))
// interfaces.push(LLM_IF_OAI_Vision);
// newer models get good capabilities by default
interfaces.push(LLM_IF_OAI_Chat, LLM_IF_OAI_Fn, LLM_IF_OAI_Vision, LLM_IF_OAI_Json);
}
return {
@@ -218,11 +461,13 @@ export function geminiModelToModelDescription(geminiModel: GeminiModelSchema): M
description: descriptionLong,
contextWindow: contextWindow,
maxCompletionTokens: outputTokenLimit,
trainingDataCutoff: knownModel?.trainingDataCutoff,
// trainingDataCutoff: knownModel?.trainingDataCutoff, // disabled as we don't get this from Gemini
interfaces,
// parameterSpecs: knownModel?.parameterSpecs,
// rateLimits: isGeminiPro ? { reqPerMinute: 60 } : undefined,
// benchmarks: ...
pricing: knownModel?.pricing, // TODO: needs <>128k, and per-character and per-image pricing
benchmark: knownModel?.benchmark,
pricing: knownModel?.pricing,
hidden,
// deprecated: knownModel?.deprecated,
};
}
@@ -8,7 +8,7 @@ import { createTRPCRouter, publicProcedure } from '~/server/api/trpc.server';
import { fetchJsonOrTRPCError } from '~/server/api/trpc.router.fetchers';
import { fixupHost } from '~/common/util/urlUtils';
import { llmsChatGenerateOutputSchema, llmsGenerateContextSchema, llmsListModelsOutputSchema } from '../llm.server.types';
import { llmsChatGenerateOutputSchema, llmsGenerateContextSchema, llmsListModelsOutputSchema, type ModelDescriptionSchema } from '../llm.server.types';
import { OpenAIHistorySchema, openAIHistorySchema, OpenAIModelSchema, openAIModelSchema } from '../openai/openai.router';
@@ -148,9 +148,10 @@ export const llmGeminiRouter = createTRPCRouter({
// as the List API already all the info on all the models
// map to our output schema
const models = detailedModels
const models = (detailedModels
.filter(geminiFilterModels)
.map(geminiModel => geminiModelToModelDescription(geminiModel))
.filter(model => !!model) as ModelDescriptionSchema[])
.sort(geminiSortModels);
return {
@@ -29,7 +29,7 @@ const geminiModelSchema = z.object({
name: z.string(),
version: z.string(),
displayName: z.string(),
description: z.string(),
description: z.string().optional(),
inputTokenLimit: z.number().int().min(1),
outputTokenLimit: z.number().int().min(1),
supportedGenerationMethods: z.array(z.union([Methods_enum, z.string()])), // relaxed with z.union to not break on expansion
@@ -742,10 +742,14 @@ export function openRouterModelFamilySortFn(a: { id: string }, b: { id: string }
return aPrefixIndex !== -1 ? -1 : 1;
}
export function openRouterModelToModelDescription(wireModel: object): ModelDescriptionSchema {
export function openRouterModelToModelDescription(wireModel: object): ModelDescriptionSchema | null {
// parse the model
const model = wireOpenrouterModelsListOutputSchema.parse(wireModel);
const { data: model, error } = wireOpenrouterModelsListOutputSchema.safeParse(wireModel);
if (error) {
console.warn(`openrouterModelToModelDescription: Failed to parse model: ${error}`);
return null;
}
// parse pricing
const pricing: ModelDescriptionSchema['pricing'] = {
@@ -256,7 +256,8 @@ export const llmOpenAIRouter = createTRPCRouter({
case 'openrouter':
models = openAIModels
.sort(openRouterModelFamilySortFn)
.map(openRouterModelToModelDescription);
.map(openRouterModelToModelDescription)
.filter(desc => !!desc) as ModelDescriptionSchema[];
break;
}
@@ -5,16 +5,20 @@ export const wireOpenrouterModelsListOutputSchema = z.object({
id: z.string(),
name: z.string(),
description: z.string(),
// NOTE: for 'openrouter/auto', this is: {
// "prompt": "-1",
// "completion": "-1"
// }
pricing: z.object({
prompt: z.string(),
completion: z.string(),
image: z.string(),
request: z.string(),
image: z.string().optional(),
request: z.string().optional(),
}),
context_length: z.number(),
architecture: z.object({
modality: z.string(), // z.enum(['text', 'multimodal']),
tokenizer: z.string(), // e.g. 'Mistral'
modality: z.string(), // z.enum(['text', 'multimodal', 'text+image->text]),
tokenizer: z.string(), // e.g. 'Mistral', 'Claude'
instruct_type: z.string().nullable(),
}),
top_provider: z.object({
+1 -1
View File
@@ -157,7 +157,7 @@ export async function downloadAllConversationsJson() {
// save file
await fileSave(blob, {
fileName: `conversations_${window?.location?.hostname || 'all'}_${payload.conversations.length}_${prettyTimestampForFilenames(false)}.agi.json`,
fileName: `big-agi-1_conversations_${window?.location?.hostname || 'all'}_${payload.conversations.length}_${prettyTimestampForFilenames(false)}.agi.json`,
// mimeTypes: ['application/json', 'application/big-agi'],
extensions: ['.json'],
});