Skip to main content

Presentation of products

Aivory is an open-source, self-hosted multi-model AI conversation platform: the back end is Go 1.24 single-process service, the front end is React 19 single-page application, both packaged in the same container to provide the same-source service (SPA and React). /api The same area, listening. :8787 You can use it on your own server. docker compose up -d Get a complete set of AI workstations: Claude, GPT, Gemini and any OpenAI-compatible model unified access, streaming output, multiple tool calls, Python sandbox, knowledge base RAG, Deep Research, team workspace, image generation and a complete admin console all built-in.

Aivory chat with tool calls and reasoning

The projectExplained
The current version2.2.0
Open source permissionApache 2.0
The Code Warehouse.github.com/hjxwz123/Aivory
The official mirror.ghcr.io/hjxwz123/aivory-appghcr.io/hjxwz123/aivory-sandboxghcr.io/hjxwz123/aivory-sandbox-sidecar
The service portwithin the container. 8787 (Production of Compose default mapping host 80)
Depending on Stagepostgres:16-alpine / redis:7-alpine / qdrant:v1.12.4 (All can be selected, see below)
Technical StageGo 1.24 + React 19 + TypeScript 5 + Tailwind 4
5 minutes by hand.

If you are ready for a server with Docker, you can jump directly to to start quickly. After completion of deployment. Operation for the first time Create an administrator account and configure the first model.

Aivory is different.

Most self-deployed chats are just a thin layer of agents: forwarding requests to the model API and then pushing the streamed text back.Aivory goes further in a few places that really affect everyday use:

  • ** The tool is a real flow line. **: model can perform up to 48 tool calls (12 provider cycles) in a single user message, and tools in different domains can be freely sequenced.The product of one tool is automatically stored in the sandbox file system for direct reading by the next tool.
  • ** Conversation is a tree, not a linear log ** Edit the history question, re-generate the answer, change the model and try again, and open a new branch for each operation. < 2/3 > Switching controls preserves the database's complete tree-shaped structure.
  • ** Admin Console changes come into effect ** channel, model, skills, user, system settings all operate in the managed UI, the next request comes into effect immediately after saving, without the need to restart the process. channel API key exists in the database rather than the environment variable, the rotating API key does not need to log in the host.

The Core Capacity

Many channels of conversation.

Switch between Claude/GPT/Gemini and any OpenAI-compatible endpoint within one UI set. The administrator accesses upstream on the channel dimension in the background (type: Anthropic/OpenAI/Gemini/OpenAI-compatible, fill in Base URL+API Key) and then creates a model entry visible to the user on the model page, configuring display names, icons, pricing, vision capabilities and tool patterns (native / prompt / none The same type can be configured with multiple channels.

The top of the model picker displays the administrator-defined label filter chip (such as “fast”, “multimodal”, “programmed”), selected tag is a narrow list; each message records the actual model used at the time. Channel and Model

Export and Thinking Process

All model requests go streaming, front-end real-time reception via SSE: typing machine output, Markdown rendering, code high brightness, LaTeX formula. supports the folding display of thinking process (thinking), the thinking chain of the reasoning model is presented with the official response partition.

Real-time Multi-Wheel Tool Calling

model decides which tools to call, how many rounds to adjust, the entire process is pushed in real time through the SSE event, and users can see what each step is doing.

ToolsFunctionally
web_searchFull web search via SearXNG (self-deployed) or Serper compatible backend
web_fetchScrape the specified URL and extract text to comply with robots.txt and content security filtering
fetch_imageDownload images to the sandbox. /workspace/uploads/ Use of follow-up code.
python_executeRun Python code in an isolated sandbox to support full standard libraries, pip installations, and file I/O
image_generateCalling a configured image model to generate an image and save it as a product
search_knowledge_baseExecute hybrid retrieval of the loaded knowledge base (intensive vector + BM25,RRF fusion)
save_memoryWrite into the user memory, subsequent conversation automatically injected
use_skillExecute administrator-defined skills (hint word template + asset package)

Single-wheel tool call budget (abuse prevention and cost out of control):

ToolsThe normal upper limit.The Deep Research Model
web_search1640
web_fetch1225
fetch_image1612
image_generate84
python_execute168
** All tools in total. **48150

The key mechanism is ** Automated document retention ** Every time python_execute Before the execution, the user uploaded documents in this conversation, image_generate Generated images, user-available skills assets, all are automatically located in the sandbox file system. Therefore, "analysis data.csv, draw a column chart, then make PPT" such cross-tool workflow can be sent end-to-end at a time, the user does not need any intermediate action.

For models that do not support native function calling, you can return to the quotation protocol according to the administrator configuration (in quotation mode, the provider cycle is limited to 6).

Deep research

Independent multi-rounder research engine: Mr. Model makes a research plan, then sends up to 40 web searches and 25 page scraps in parallel, cross-checks the assertions, and ultimately produces a complete overview report with references, with a real-time progress panel. Deep research

The Python Sandbox

Each conversation has a separate sandbox container (HTTP sidecar service):

  • Sessions are permanently saved during the conversation life cycle, and subsequent messages can read the files written in the previous rounds; the container is recovered and automatically rebuild the session, re-save the files and try again in a transparent way, without the user's perception.
  • Code output (stdout / stderr / abnormal) live streaming; written /workspace/output/ The file becomes the product, and the following card form appears in the chat interface.
  • Sandbox by default ** Without Networks ** (SANDBOX_NETWORK=none When networking data is needed web_fetch / fetch_image It is stored outside the sandbox.
  • When the sandbox address is not configured, python_execute Enter security mode, only perform simple arithmetic, suitable for development debugging and demonstration.

Detailed Use of Python SandboxThe Sandbox Deployment

Knowledge Base and RAG

Each account can create multiple knowledge bases, support text / PDF / DOCX / XLSX / image uploads, and document status can be tracked (pending → parsing → embedding → ready).

  • ** Degree Cut ** Small-to-big, approximately 12% overlapping, structural perception (code block, table, formula whole block reserve); each subset carries a title breadcrumb from the root to the current location.
  • ** Mixed search ** Qdrant intensive vector + BM25 keyword retrieval, RRF fusion order, dynamic Top-K by similar degree, with reference to answer.
  • ** Questioning the route. ** Task model: Classifies the query before retrieving retrieve / full_doc / none And rewrite the query, inject the full text of the small document directly, without wasting the recovery expenses.
  • MinerU OCR PDF with text layer resolution at the local millisecond level; scan PDF, DOCX, PPTX, XLSX, images to get MinerU cloud OCR. The original file is stored in your own S3 / Ali Cloud OSS barrels, MinerU only gets pre-signed URLs, credentials are not out-of-domain.

When Qdrant is not configured, the RAG automatically degrade to the full text, and the functionality is still available. The knowledge base

The team workspace

Create a workspace in the first image menu and send out an invitation link for your colleagues to join. The conversation, project, knowledge base in the space is shared with all members and completely isolated from each person’s personal space. Any member can continue any conversation. ** Who sends who pays? ** The bubble is assigned to the author (self on the right, others with AI on the left, and the head is nicknamed); the creator can kick people, reset the invitation link, and delete the entire space. The team workspace

Images are generated

Independent drawing patterns: Task model colouring, then counting credits by image model; administratorining style pre-set libraries; generating results into personal galleries, supporting reference-based editing and variation workflows. Images are generated

Complete admin console

The ModuleManagement of content
The channelBase URL + API key for each provider, with multiple channels of the same type
The modelStart-up, display name, context window, pricing, per model UI controls, Deep Research exposure switches, tags
The label modelCreate labels and assign them to the model, rendering as a filter chip at the top of the selector
SkilledKeyword template + asset package use_skill Tools to Call
The UserRoles, user group allocation, real-time blocking, quota and credits
The workspaceDrill Members/Conversation/Projects/Knowledge Base, Conversation to view full records right away
Used quantityReports by user, model, purpose (chat / task / image / embedded)
set upsandbox addresses, S3/OSS credentials, search backend, upload white lists, disable tools, compression policies, etc.
Backup and MigrationFull backup export import, configuration export import, vector maintenance
The Sandbox InspectorBrowse and clean a specific conversation sandbox workspace file

All changes are saved and are effective without the need to restart the entire process. Review of admin console Begin to understand.

Backup and Migration

Complete backup with one-key export for admin console: single zip contains manifest, one JSONL (engine neutral) for each table, upload with product file, Qdrant vector points for collection. Large libraries go asynchronous export tasks. ** The Database Engine. ** SQLite backups can be imported into Postgres deployments and vice versa. Another lightweight “configure export/import” only transports channel, model, skills and other management assets without moving user data. Backup and Migration

PWA and Multilingual

  • ** Installation of PWA ** Support for adding to the desktop / main screen, the mobile end interface is completely reworked.
  • ** The five languages. ** Chinese, English, Japanese, French, covering every page, conversation box, toast and error information, including admin console.
  • Clear double themes, editorial sense of design system.

More capacity

CapacityExplained
The Conversation TreeRedirect or try again. < N/M > Switch and not interrupt in the flow; drag scalable overview node chart; long conversation right edge side preview bar second positioning
Multiple models of review (Verify)The second model performs counterfactual factual verification of answers, output by sentence references with structuralized findings and confidence badges of serious level.
Memory of ConversationAsynchronous user facts are extracted each round and old memories are automatically determined to fail, and users can manage them on their own pages.
Projects and skillsProject containers (shared libraries + project-level instructions); gradual loading of administrator skills packs while running
Under the compression.Keep the latest N rounds of original text, earlier rounds by task model scrolled summary, prefix cache friendly, do not modify the original archive
credits and user groupsDeadline + Permanent credits, by model quota, pre-send fee check, redeem code
The safety baseAPI key full backend agent, HMAC signature per request, capability token sharing/invitation, HTML sandbox preview, upload extension name and MIME white list, full speed limit

Structural Overview

Aivory’s production model is five containers: app Single container simultaneously hosting front end SPA and /api (The same source, no CORS problems), the rest are data and executable components.

The containerThe mirrorRole of
appghcr.io/hjxwz123/aivory-appGo HTTP + SSE service, co-source hosted front-end SPA
postgrespostgres:16-alpineUser, conversation, knowledge base, settings, usage records
redisredis:7-alpineCaching, Frequency Limit Counting, Coil and Stream Recovery
qdrantqdrant/qdrant:v1.12.4RAG Vector Recovery
sandboxghcr.io/hjxwz123/aivory-sandbox-sidecarCode execution sandbox (only internal network)
All components can be cut.

Redis, Qdrant, and sandbox are all optional components: not suitable REDIS_URL Use of cache and cohort during the process; not deserved QDRANT_URL When RAG goes the full injection back; not deserving SANDBOX_BASE_URL The timecode executes into secure mode. The database can even be used by default with embedded SQLite. The SQLite model

Why choose Aivory?

Data owned

All the data falls on your own infrastructure: databases, vector libraries, upload files and products (binding loads to the host). DATA_DIR The model API key exists in the database and is proxyed by the backend, never exposed to the browser; under the document OCR scenario, MinerU only gets the pre-signed URL stored by your object, the credentials are not out of the domain; the shared workspace automatically shuts off cross-conversation memory.

Distribution of orders.

docker compose up -d After completion of the deployment, all five containers are ready. /api The same source, solve which domain name can be used, no need to configure PUBLIC_ORIGIN Or CORS; administrator accounts are created by the start page rather than environmental variables; then almost all configurations (channel, model, search backend, upload white list, etc.) are real-time modified in the admin console, saved that is effective, without the need to restart.

Engine Neutrality

A full backup is a self-described zip: one JSONL for each table, unrelated to a specific database engine. Starting today with SQLite, you can import the same backup into Postgres deployment (and vice versa) tomorrow, automatically processing sequences and external keys; Qdrant vectors carry backup and can also subsequently reconstruct fragmented text stored from the database. Your data will never be locked dead on a single engine or machine.

The next step.

TargetedThe page
5 minutes to deploy an Aivory setto start quickly.
Create an administrator and configure the first modelOperation for the first time
Production level Docker Compose deploymentDeployment of Docker Compose
HTTPS and reverse proxyThe reverse proxy / Cloudflare
Understanding the core environmental variablesThe Core Configuration / Advanced layout
Daily conversation functions.Conversation functions
by admin consoleReview of admin console
Quickly checkedCommon Questions