MCPcopy Index your code
hub / github.com/ecruhue/DialogLab

github.com/ecruhue/DialogLab @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
902 symbols 1,836 edges 85 files 204 documented · 23%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

DialogLab

DialogLab teaser figure

Paper | 30s Preview | Video Figure | Web Demo

DialogLab is an authoring tool for configuring and orchestrating multi-agent conversations with animated 3D avatars. Built with React, Vite, and Express, it enables researchers, designers, and developers to create, visualize, and evaluate complex agent-based dialogue systems.

Features

  • Visual Conversation Design: Configure multi-agent conversations with an intuitive node-based editor
  • 3D Avatar Integration: Animate conversations using Ready Player Me avatars with synchronized speech
  • Multiple LLM Support: Compatible with OpenAI GPT and Google Gemini models
  • Scene Management: Create and manage multiple conversation scenarios
  • Real-time Preview: Test and iterate on conversations in real-time
  • Verification Tools: Analyze conversation metrics and quality
  • Experience Mode: Present finished conversations in a polished viewer

Prerequisites

  • Node.js 18+ (Node 23 recommended for build and deploy scripts)
  • npm 8+

Repository Structure

DialogLab/
├── client/         # React UI (Vite) - Dev server on port 5173
│   ├── src/        # React components and application logic
│   └── public/     # Static assets (avatars, libraries)
└── server/         # Express API server - Listens on port 3010
    ├── providers/  # LLM provider integrations
    └── ...         # Core server logic

Getting Started

1. Install Dependencies

# Install client dependencies
cd client
npm install

# Install server dependencies
cd ../server
npm install

2. Configure Environment Variables

Create a .env file in the server/ directory with your API keys:

# Core Configuration
NODE_ENV=development

# LLM Providers (configure at least one)
GEMINI_API_KEY=your-gemini-api-key-here
API_KEY_LLM=your-openai-api-key-here

# Defaults (optional)
DEFAULT_LLM_PROVIDER=gemini   # or openai
DEFAULT_OPENAI_MODEL=gpt-4
DEFAULT_GEMINI_MODEL=gemini-2.0-flash

# Text-to-Speech (optional - for avatar speech synthesis)
TTS_API_KEY=your-google-tts-api-key-here
TTS_ENDPOINT=https://eu-texttospeech.googleapis.com/v1beta1/text:synthesize

Note: You need at least one LLM provider API key (OpenAI or Gemini) to run conversations.

3. Start the Server

cd server
node server.js

The server will start at http://localhost:3010. You should see a message confirming the server is running.

4. Start the Client

In a separate terminal:

cd client
npm run dev

Open your browser and navigate to http://localhost:5173.

Third-Party Components & Licenses

TalkingHead (MIT License)

Portions of this project's code are adapted from the open-source project TalkingHead, © 2024 Mika Suominen (met4citizen), licensed under the MIT License.

Files: client/public/libs/talkinghead.mjs

Three.js (MIT License)

This project uses Three.js and its example modules, © 2010–present Three.js authors, licensed under the MIT License.

License: Three.js LICENSE

Ready Player Me Avatars (Custom License)

Example avatar files (client/public/assets/*.glb) were created using Ready Player Me and are subject to Ready Player Me's Terms of Use.

Note: These assets are provided for demonstration purposes only and are not covered by this project's open-source license. For production use, you must obtain your own avatars or comply with Ready Player Me's licensing terms.

Citation

If you use DialogLab in your research, please cite our UIST 2025 paper:

@inproceedings{dialoglab2025,
author = {Hu, Erzhen and Chen, Yanhe and Li, Mingyi and Phadnis, Vrushank and Xu, Pingmei and Qian, Xun and Olwal, Alex and Kim, David and Heo, Seongkook and Du, Ruofei},
  title     = {DialogLab: Configuring and Orchestrating Multi-Agent Conversations},
  booktitle = {Proceedings of the 38th Annual ACM Symposium on User Interface Software and Technology (UIST '25)},
  year      = {2025},
  publisher = {Association for Computing Machinery},
  address   = {New York, NY, USA},
  doi       = {10.1145/3746059.3747696}
}

Extension points exported contracts — how you extend this code

NodeDisplayProps (Interface)
(no doc)
client/src/components/nodeeditor/NodeDisplay.tsx
DropdownOption (Interface)
(no doc)
client/src/components/nodeeditor/NodeDisplay.tsx
MousePosition (Interface)
(no doc)
client/src/components/nodeeditor/NodeConnection.tsx
NodeConnectionProps (Interface)
(no doc)
client/src/components/nodeeditor/NodeConnection.tsx
RaisedHandParticipant (Interface)
(no doc)
client/src/components/nodeeditor/NodeEditor.tsx

Core symbols most depended-on inside this repo

getProp
called by 45
client/src/components/verification/AudioTranscript.tsx
cn
called by 40
client/src/libs/utils.ts
stop
called by 20
client/src/libs/talkinghead.mjs
getProp
called by 19
client/src/components/verification/verificationUtils.tsx
initializeAvatar
called by 18
client/src/components/avatarconfig/utils/AvatarHandler.js
dispose
called by 18
client/src/libs/dynamicbones.mjs
getAgentParty
called by 17
server/chat.js
gaussianRandom
called by 14
client/public/libs/talkinghead.mjs

Shape

Function 546
Method 272
Interface 68
Class 16

Languages

TypeScript100%

Modules by API surface

client/src/libs/talkinghead.mjs80 symbols
client/public/libs/talkinghead.mjs80 symbols
server/chat.js62 symbols
client/src/components/nodeeditor/NodeEditor.tsx40 symbols
client/src/components/avatarconfig/SceneSetup.jsx34 symbols
client/src/components/nodeeditor/NodeDisplay.tsx29 symbols
client/src/components/verification/AudioTranscript.tsx28 symbols
client/src/components/Home.jsx26 symbols
client/src/components/nodeeditor/utils/NodeEditorUtils.tsx24 symbols
client/src/components/inspector/AvatarInspector.jsx22 symbols
client/src/libs/dynamicbones.mjs21 symbols
client/src/components/experience/ExperienceMode.jsx20 symbols

For agents

$ claude mcp add DialogLab \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page