CCAI-Demo / README.md
Jordan Miller
Load cross-project shared.env before project .env for local dev.
40dee71
|
Raw
History Blame Contribute Delete
5.71 kB
---
title: Collaborative Conversational AI (CCAI) Demo
emoji: 🤝
colorFrom: blue
colorTo: purple
sdk: docker
app_port: 7860
hf_oauth: true
hf_oauth_scopes:
- read-repos
pinned: false
---
# Collaborative Conversational AI (CCAI) Demo
A demo of **Collaborative Conversational AI (CCAI)** - Neon.ai's patented
group-discussion technology. Up to 9 participants (any mix of AI personas,
human-defined "expert" personas, or - in the future - real humans, agents,
tools, or sensors) hold a structured group conversation facilitated by a
neutral **Orchestrator**, with the goal of reaching a real group decision
the way a thoughtful human meeting would.
This repo descends from
[NeonClary/LLMChats3](https://github.com/NeonClary/LLMChats3) and reuses
its color scheme, branding, settings menu structure, and chat formatting
verbatim. The CCAI multi-participant orchestration, expert-persona modal,
participant sidebar, and table view are layered on top.
## Architecture (one-pager)
- **Frontend** (React 19, react-markdown, lucide-react) - lives in
`frontend/`. Talks SSE to the backend.
- **Backend** (FastAPI, httpx) - lives in `backend/`. Routes:
- `GET /api/personas` — Neon HANA personas (vanilla/RAG filtered),
bundled extra personas, and (echoed) expert personas.
- `GET /api/demo-questions` — the bank of 10 long-context demo prompts.
- `POST /api/chat/start` — kicks off a CCAI session and returns SSE.
- `POST /api/chat/{id}/continue?reason=…` — resumes a paused session.
- `GET /api/chat/{id}/export?fmt=txt|md|csv-table` — exports.
- `GET /api/chat/{id}/table` — JSON for the table view.
- **Orchestrator state machine** — six phases (Initial Opinions,
Critique x2, Status Assessment, Finalization, Consensus, Closure)
with two failsafes (60+20 messages, 100+50 orchestrator calls) and
per-participant on-demand context summarization.
## CCAI Phase Overview
1. **Initial Opinions.** Each participant offers an independent first
opinion. The orchestrator builds a per-participant **Credential
Summary** in the background.
2. **Critique x 2.** Each participant gets two turns to critique
others, ask follow-ups, and revise. After Phase 2 the Credential
Summary is refreshed.
3. **Status Assessment.** The orchestrator either proceeds or runs
targeted follow-ups (max 3 iterations).
4. **Finalization.** Each participant either revises their own opinion
or endorses another's.
5. **Consensus Gathering.** Allied participants advocate, solo
participants seek allies / switch / propose compromises. The
orchestrator routes addressed-to messages.
6. **Closure.** Majority-report (with weighted dissent), or
unaddressed-factor probe + retry, or no-consensus report.
Thinking traces (`<think>`, `<reasoning>`, etc.) are stripped from every
LLM response in `backend/app/utils/sanitize.py` before being stored,
displayed, or fed back to the orchestrator/summarizer/Credential builder.
## Quick Start (local development)
### Shared secrets (`shared.env`)
This project supports a cross-project secrets file (same pattern as other Neon
Cursor repos). Place API keys in `shared.env` **outside the repo** — never
commit it. The backend loads it automatically before the project `.env`:
1. `SHARED_ENV_PATH` or `SHARED_ENV_FILE` if set in the shell
2. `~/.secrets/shared.env`
3. `~/Downloads/shared.env`
Project `.env` overrides any duplicate keys from `shared.env`.
```bash
# Optional: only project-specific overrides (orchestrator model, CORS, etc.)
cp .env.example .env
# Or use the dev script (auto-detects shared.env + starts both servers)
./scripts/dev-local.sh
```
Manual start:
```bash
# Backend
cd backend
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
# Frontend (separate terminal)
cd frontend
npm install
npm start
```
## Docker
```bash
cp .env.example .env
# Optional: point Docker at your shared secrets file
export SHARED_ENV_FILE="$HOME/Downloads/shared.env"
docker compose up --build
# Open http://localhost:7860
```
## HuggingFace Spaces Deployment
Deployed as a Docker Space (`app_port: 7860`).
Required Space Secrets:
- `HANA_USERNAME`, `HANA_PASSWORD` — Neon HANA credentials.
- `HANA_KLATCHAT_PASSWORD` (optional) — BrainForge/Security vLLM access.
- Provider keys: `OPENAI_API_KEY`, `GEMINI_API_KEY`, `FIREWORKS_API_KEY`,
`TOGETHER_API_KEY`, `MISTRAL_API_KEY`.
- `HF_RATE_LIMIT_DAILY=30` — daily per-IP cap (defaults to 30; org
members are unlimited).
- `HF_RATE_LIMIT_ORG=neongeckocom` — bypass org name.
- `SESSION_SECRET` — cookie session secret for OAuth.
## Features
- **Participant dropdown** in the header with three sections (Neon /
Extra / Expert) and a `Create Expert Persona...` shortcut.
- **Participant sidebar** with on/off slider per participant; flipping
off does not deselect, and a `Remove` button appears for actually
dropping someone from the conversation.
- **Settings menu** with searchable orchestrator-model and summarizer-
model pickers (summarizer defaults to "Same as Orchestrator"),
a 3-9 max-participants stepper, per-participant model overrides, and
the same display-options + downloads structure as LLMChats3.
- **Two failsafes** with explicit Continue buttons (60+20 messages,
100+50 orchestrator calls).
- **Exports**: `.txt`, `.md`, RFC-4180 `.csv` table, JSON API log.
- **Table view** of the whole conversation with per-participant first /
contribution / revised / final columns.
- **localStorage persistence** for expert personas, participant
selection, on/off state, model assignments, orchestrator/summarizer
picks, and max-participants.
- **HuggingFace OAuth** with `neongeckocom` org bypass.