A Simple and Universal Swarm Intelligence Engine, Predicting Anything. 简洁通用的群体智能引擎,预测万物
Go to file
Laurens Profittlich 12669495bb
i18n: translate all Chinese in codebase to English; add Dutch locale as default (#1)
Frontend (.vue, .js, .ts):
- All Chinese in HTML comments, JS comments, CSS comments translated
- All hardcoded Chinese UI strings (titles, alerts, console errors) translated
- The few remaining Chinese fragments in Step2EnvSetup.vue (4) and
  Step4Report.vue (77) are intentional: stage-name identifiers that
  must match what the backend emits, and LLM-output parser patterns
  that match Chinese section headers in the LLM response.

Backend (Python):
- All # comments, """ and ''' docstrings translated
- All log/print/raise/error message strings translated
- All LLM system prompts (ONTOLOGY_SYSTEM_PROMPT, _PROMPT, _INSTRUCTION,
  _TEMPLATE, _TASK_PROMPT, _EXTRACTOR, _PLANNER, _REPORTER, _SUMMARY,
  _OUTLINE, _SYNTHESIS, _REWRITE, _SEARCH_PROMPT, _INTERVIEW, _REFLECTION,
  _REACT, _ROLE, _CONTEXT, _GUIDELINES, _AGENT, _MESSAGE, _EXAMPLE,
  _SYNTHESIZER, _WRITER, _CRITIQUE, _REVISION, _FEEDBACK, _PERSONA,
  _FORMAT, _JUDGE, _ROUTER, _SECTION_PLANNER, _PARSER, _EXTRACT,
  _RATIONALE variables) translated
- stage-name string literals in zep_graph_memory_updater.py (return
  values used as Zep episode content) translated
- LLM-output parser patterns in zep_tools.py and report_agent.py
  (e.g. text.match(/分析问题:/) and section headers like
  '### 【关键事实】') kept as Chinese, because they match the
  LLM's output format.

i18n:
- locales/zh.json: kept as source of truth for Chinese strings
- locales/en.json: kept (was already a complete English translation)
- locales/nl.json: NEW — full Dutch (Nederlands) translation of
  en.json (633 leaf keys, all interpolation placeholders preserved)
- locales/languages.json: added 'nl' entry with label 'Nederlands'
  and llmInstruction 'Antwoord in het Nederlands.'

Frontend i18n config:
- frontend/src/i18n/index.js: default locale changed from 'zh' to 'nl',
  fallback locale from 'zh' to 'en'. Dutch is now the default UI
  language; English is the fallback.

Misc:
- package.json: description translated
- docker-compose.yml: inline comment translated
- README.md / README-ZH.md / locales/zh.json / locales/languages.json:
  Chinese content intentionally preserved (bilingual readme pointers
  and language-metadata source of truth)

Files: 59 changed, +6810 / -6102

Co-authored-by: hermes <hermes@profikid.nl>
2026-06-10 12:28:40 +07:00
.github/workflows feat(docker): add Docker support with Dockerfile, docker-compose.yml, and .dockerignore; update README for Docker deployment instructions 2026-01-22 14:35:41 +08:00
backend i18n: translate all Chinese in codebase to English; add Dutch locale as default (#1) 2026-06-10 12:28:40 +07:00
deploy deploy/README: document the companion FalkorDB Browser stack at falkor.agent.profikid.nl 2026-06-09 14:14:10 +00:00
frontend i18n: translate all Chinese in codebase to English; add Dutch locale as default (#1) 2026-06-10 12:28:40 +07:00
locales i18n: translate all Chinese in codebase to English; add Dutch locale as default (#1) 2026-06-10 12:28:40 +07:00
static/image feat(README): add demo video sections for Wuhan University Public Opinion and Dream of the Red Chamber simulations; include new image asset 2026-01-20 11:17:11 +08:00
.dockerignore feat(docker): add Docker support with Dockerfile, docker-compose.yml, and .dockerignore; update README for Docker deployment instructions 2026-01-22 14:35:41 +08:00
.env.example refactor(.env.example): update LLM API configuration comments for clarity and add usage note 2026-01-20 18:05:36 +08:00
.gitignore deploy: add agent.profikid.nl overlay (compose + FalkorDB sidecar, e2e one-shot, bootstrap/up/health scripts, README) + gitignore secrets.env 2026-06-09 13:57:34 +00:00
Dockerfile feat(frontend): add /graph/:id redirect view + merge graph projects into home history 2026-06-10 01:29:30 +00:00
LICENSE Add GNU AGPL v3 License 2025-12-19 15:24:16 +08:00
README-ZH.md docs(readme): fix typo in Shanda logo alt text 2026-05-23 16:30:55 +08:00
README.md Productionize: add ingest_text one-call API, ontology JSON retry, README fork notice, e2e Dockerfile path fix 2026-06-09 13:58:08 +00:00
docker-compose.yml i18n: translate all Chinese in codebase to English; add Dutch locale as default (#1) 2026-06-10 12:28:40 +07:00
nginx.conf Refactor: replace Zep with Graphiti+FalkorDB (FalkorDriver adapter, M3 LLM, deterministic embedder) + add e2e test, docker-compose, e2e one-shot, deploy notes 2026-06-09 13:56:34 +00:00
package-lock.json Change project license from Apache-2.0 to AGPL-3.0 in package.json, package-lock.json, and backend/pyproject.toml. 2025-12-22 16:41:45 +08:00
package.json i18n: translate all Chinese in codebase to English; add Dutch locale as default (#1) 2026-06-10 12:28:40 +07:00
start.sh Refactor: replace Zep with Graphiti+FalkorDB (FalkorDriver adapter, M3 LLM, deterministic embedder) + add e2e test, docker-compose, e2e one-shot, deploy notes 2026-06-09 13:56:34 +00:00

README.md

MiroFish Logo

666ghj%2FMiroFish | Trendshift

简洁通用的群体智能引擎,预测万物
A Simple and Universal Swarm Intelligence Engine, Predicting Anything

666ghj%2FMiroFish | Shanda

GitHub Stars GitHub Watchers GitHub Forks Docker Ask DeepWiki

Discord X Instagram

English | 中文文档

Overview

MiroFish is a next-generation AI prediction engine powered by multi-agent technology. By extracting seed information from the real world (such as breaking news, policy drafts, or financial signals), it automatically constructs a high-fidelity parallel digital world. Within this space, thousands of intelligent agents with independent personalities, long-term memory, and behavioral logic freely interact and undergo social evolution. You can inject variables dynamically from a "God's-eye view" to precisely deduce future trajectories — rehearse the future in a digital sandbox, and win decisions after countless simulations.

This is a maintained fork of 666ghj/MiroFish. It swaps Zep Cloud for Graphiti + FalkorDB (open source, self-hosted), adds a one-call POST /api/graph/ingest_text API for cron automations, and ships a production Docker stack for agent.profikid.nl. See About this fork below.

You only need to: Upload seed materials (data analysis reports or interesting novel stories) and describe your prediction requirements in natural language
MiroFish will return: A detailed prediction report and a deeply interactive high-fidelity digital world

Our Vision

MiroFish is dedicated to creating a swarm intelligence mirror that maps reality. By capturing the collective emergence triggered by individual interactions, we break through the limitations of traditional prediction:

  • At the Macro Level: We are a rehearsal laboratory for decision-makers, allowing policies and public relations to be tested at zero risk
  • At the Micro Level: We are a creative sandbox for individual users — whether deducing novel endings or exploring imaginative scenarios, everything can be fun, playful, and accessible

From serious predictions to playful simulations, we let every "what if" see its outcome, making it possible to predict anything.

🌐 Live Demo

Welcome to visit our online demo environment and experience a prediction simulation on trending public opinion events we've prepared for you: mirofish-live-demo

📸 Screenshots

Screenshot 1 Screenshot 2
Screenshot 3 Screenshot 4
Screenshot 5 Screenshot 6

🎬 Demo Videos

1. Wuhan University Public Opinion Simulation + MiroFish Project Introduction

MiroFish Demo Video

Click the image to watch the complete demo video for prediction using BettaFish-generated "Wuhan University Public Opinion Report"

2. Dream of the Red Chamber Lost Ending Simulation

MiroFish Demo Video

Click the image to watch MiroFish's deep prediction of the lost ending based on hundreds of thousands of words from the first 80 chapters of "Dream of the Red Chamber"

Financial Prediction, Political News Prediction and more examples coming soon...

🔄 Workflow

  1. Graph Building: Seed extraction & Individual/collective memory injection & GraphRAG construction
  2. Environment Setup: Entity relationship extraction & Persona generation & Agent configuration injection
  3. Simulation: Dual-platform parallel simulation & Auto-parse prediction requirements & Dynamic temporal memory updates
  4. Report Generation: ReportAgent with rich toolset for deep interaction with post-simulation environment
  5. Deep Interaction: Chat with any agent in the simulated world & Interact with ReportAgent

🚀 Quick Start

Prerequisites

Tool Version Description Check Installation
Node.js 18+ Frontend runtime, includes npm node -v
Python ≥3.11, ≤3.12 Backend runtime python --version
uv Latest Python package manager uv --version

1. Configure Environment Variables

# Copy the example configuration file
cp .env.example .env

# Edit the .env file and fill in the required API keys

Required Environment Variables:

# LLM API Configuration (supports any LLM API with OpenAI SDK format)
# Recommended: MiniMax M-series via https://api.minimax.io/v1
#   - MiniMax-M2.7-highspeed : best for cron / high-volume (recommended)
#   - MiniMax-M3              : heavier reasoning, slower, higher quality
# Alibaba Qwen-plus via Bailian Platform: https://bailian.console.aliyun.com/
# High consumption, try simulations with fewer than 40 rounds first
LLM_API_KEY=your_api_key
LLM_BASE_URL=https://api.minimax.io/v1
LLM_MODEL_NAME=MiniMax-M2.7-highspeed

# Graph store (this fork: Graphiti + FalkorDB; no Zep API key needed)
# FalkorDB runs as a Docker sidecar — see deploy/docker-compose.yml
FALKORDB_HOST=falkordb
FALKORDB_PORT=6379

# Embedding model (local sentence-transformers, pre-downloaded in the image)
EMBEDDING_MODEL=sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2

2. Install Dependencies

# One-click installation of all dependencies (root + frontend + backend)
npm run setup:all

Or install step by step:

# Install Node dependencies (root + frontend)
npm run setup

# Install Python dependencies (backend, auto-creates virtual environment)
npm run setup:backend

3. Start Services

# Start both frontend and backend (run from project root)
npm run dev

Service URLs:

  • Frontend: http://localhost:3000
  • Backend API: http://localhost:5001

Start Individually:

npm run backend   # Start backend only
npm run frontend  # Start frontend only

Option 2: Docker Deployment

# 1. Configure environment variables (same as source deployment)
cp .env.example .env

# 2. Pull image and start
docker compose up -d

Reads .env from root directory by default, maps ports 3000 (frontend) / 5001 (backend)

Mirror address for faster pulling is provided as comments in docker-compose.yml, replace if needed.

📬 Join the Conversation

QQ Group

 

The MiroFish team is recruiting full-time/internship positions. If you're interested in multi-agent simulation and LLM applications, feel free to send your resume to: mirofish@shanda.com

📄 Acknowledgments

MiroFish has received strategic support and incubation from Shanda Group!

MiroFish's simulation engine is powered by OASIS (Open Agent Social Interaction Simulations), We sincerely thank the CAMEL-AI team for their open-source contributions!

🔱 About this fork

This is a maintained fork of 666ghj/MiroFish maintained at profikid/MiroFish. It replaces the Zep Cloud dependency with Graphiti + FalkorDB (both open source), adds a one-call ingest API, and ships a production-ready Docker deployment for agent.profikid.nl.

What changed vs upstream

Upstream This fork
Graph store Zep Cloud (managed, requires API key) Graphiti + FalkorDB (self-hosted, Redis protocol)
LLM recommendation Qwen-plus (DashScope) MiniMax M-series (M2.7-highspeed for cron, M3 for high-quality)
Ingest API 3 calls (project → ontology → build) 1 call: POST /api/graph/ingest_text (project + ontology + build)
Deploy npm run dev (dev) / docker compose up (Docker Hub) deploy/ overlay: Traefik + Let's Encrypt + FalkorDB sidecar + e2e one-shot
E2E test none shipped deploy/e2e_test.py + deploy/e2e.sh (builds a one-shot image, runs against the real briefing seed)
Cron-friendly not designed for it deploy/mirofish_ingest.sh — one-shot POST + poll, exits 0/2/3/4
Embeddings Zep-managed local sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (pre-downloaded in the image)

Why Graphiti + FalkorDB

Zep Cloud's free tier is fine for dev, but for a self-hosted cron pipeline (Iran briefing every 12h, entity extraction, simulations) you want:

  • No per-month API cap — the cron keeps running on bad days, good days, news spikes
  • No external service dependency — graph store lives next to the app as a Docker sidecar
  • Same engine — Graphiti is the open-source core that powers Zep Cloud, so the entity/edge quality is identical

The backend/app/services/graphiti_service.py shim is a Zep-shaped facade over a real Graphiti(graph_driver=FalkorDriver(...)), so the rest of the MiroFish codebase (which still speaks Zep) didn't have to change.

Production deployment

The deploy/ directory contains a single-host Docker stack for agent.profikid.nl:

# On the host:
cd /docker/mirofish
./deploy/up.sh         # build image, bring up mirofish + falkordb
./deploy/e2e.sh        # run the e2e test against the real briefing seed

Traefik (already on the host) auto-issues the Let's Encrypt cert for mirofish.agent.profikid.nl. See deploy/README.md for the full layout, env vars, and troubleshooting.

Cron integration

The fork was built so that a scheduled OSINT briefing cron can drop the markdown output straight into MiroFish:

# Cron's last-written briefing file -> POST + poll
briefing="$(ls -t /home/hermes/.hermes/cron/output/<job_id>/*.md | head -1)"
nohup bash /docker/mirofish/deploy/mirofish_ingest.sh \
  "iran-osint-$(date -u +%Y%m%dT%H%M)" \
  "$briefing" \
  >/tmp/mirofish-ingest.log 2>&1 &

The script handles ontology generation + async graph build + polling, exits 0 on success with a nodes=N edges=M summary in the log.

📈 Project Statistics

Star History Chart