Spaces:
Sleeping
Sleeping
Commit History
-
Add demo trio personas and polish empty-state panel UX.
Jordan Miller +1: CursorIntroduce Elena, Marcus, and Dr. Amira as default catalog participants with a build-vs-buy sample preview, dynamic empty-state guidance, readable bubble text, and sidebar prompt display fixes; reassign Marcus to Mistral after Fireworks DeepSeek v3.2 404s locally. Co-authored-by: Cursor <cursoragent@cursor.com>4944128
-
Harden Expert Persona builder and add model suggestion.
Jordan Miller +1: CursorRoute role-prompt generation through a neutral writer model to prevent Neon character identity bleed, and add a suggest-model flow that prioritizes the user's source description over the generated prompt. Co-authored-by: Cursor <cursoragent@cursor.com>1961f74
-
Build credentials during Phase 1 and streamline human participant setup.
NeonClary +1: CursorGenerate per-participant credentials concurrently with initial opinions, rebuild only on model changes, and let humans join from profile text with background credential generation—no question required upfront. Also refresh chat-start controls, rate-limit notices, and header layout. Co-authored-by: Cursor <cursoragent@cursor.com>d4017c8 -
perf(orchestrator): prefetch human-phase opinions and tighten context budget
NeonClary +1: CursorFire all LLM initial-opinion calls in parallel while waiting on the human participant, compress embedded transcript blocks when over budget, surface phase banners and inline system notes in the chat timeline, and propagate Neon vLLM error metadata for resilience. Co-authored-by: Cursor <cursoragent@cursor.com>9a51d6a
-
perf(orchestrator): parallel phases, streaming, early table summaries
NeonClary +1: Cursor- Parallel participant turns in Phases 1/2/4 via orchestrator_speed.run_roster_ai_turns_parallel - SSE token streaming on consensus + targeted follow-up turns (message_stream_start / message_delta) - Parallel ballot collection in majority / ranked-choice / Robert's Rules votes - Heuristic-first addressed_to classifier skips most LLM calls - Compact rolling transcript for orchestrator judge prompts (cached per session) - Fast orchestrator model (gemini-2.0-flash) for lightweight classifier calls - Lazy contribution summaries kicked off after Phase 4 so Table View loads instantly - Conditional Phase-3 credential refresh only when follow-ups are needed - max_tokens 4x multiplier limited to thinking models Co-authored-by: Cursor <cursoragent@cursor.com>83add3c -
feat(conversation): pluggable structures + decision methods (Robert's Rules, ranked-choice, majority)
NeonClary +1: CursorThe orchestrator is now structured as ConversationStructure → DecisionMethod plugins joined by a standardized DecisionInput contract. The existing six-phase flow is preserved as CollaborativeDiscussion + ConsensusDecision (unchanged behavior); three new decision methods (MajorityRulesDecision, RankedChoiceDecision, RobertsRulesVote) and one new structure (RobertsRulesDiscussion) are wired into the registry. Adding a new structure or decision method now means dropping a class into backend/app/services/conversation/{structures,decisions}/ and adding one line to the registry. Backend - New package backend/app/services/conversation/ with base classes, DecisionInput contract, and a get_structure/get_decision registry resolver (defaults: collaborative + consensus, so older /chat/start payloads keep working). - CollaborativeDiscussion + ConsensusDecision are thin wrappers over the original _phase_* functions in orchestrator.py — zero behavior change for the default path. - RobertsR…e661e91 -
feat(resilience): multi-tier participant failure recovery + Response-priority toggle
NeonClary +1: CursorWhen a participant's LLM call fails, the orchestrator now has a real recovery cascade instead of silently dropping the turn and relying solely on auto-disable-after-N-failures. The behaviour is gated on the new "Response priority" setting in the Settings menu, which mirrors the LLMChats3 toggle that used to live there: under "Prioritize model choice" (default) we preserve the user's chosen model and just note failures in chat as today, relying on the existing 2-attempt HTTP retry in openai_compat for the "always a second try" guarantee. Under "Prioritize conversation speed" we additionally race the chosen model against a fast fallback (existing logic in clients/llm_router.py) and then layer the new cascade on top. Backend - clients/openai_compat.py: classify failures as transient (5xx, 429, 408, 425, timeouts, connection errors) vs permanent (4xx auth/invalid/content-filter/404) and propagate via new error_kind / error_status fields on the result dict. - clients/llm_…cdef1a0
-
feat: human participant turns + credential intake redesign
NeonClary +1: CursorHuman Participant: new human_io service and HumanInputSlot/HumanParticipantModal/HumanTurnIndicator UI; orchestrator and chat API support human turns; ParticipantSidebar/ChatArea/MessageBubble wiring. Credential intake: new credential_intake prompt, expanded credential service, redesigned Credential Summary modal, prompt registry entry. Supporting: App state and routing for human turns + credentials, Header surface, ccai.css styling for new components, api/storage helpers. Co-authored-by: Cursor <cursoragent@cursor.com>11bf9b7
-
feat(transparency): add "View current chat prompts" to settings
NeonClary +1: CursorNew PromptCatalogModal under Settings -> Transparency lists every prompt template the orchestrator and participants use, grouped by phase, with a 1-2 sentence purpose for each, the runtime template variables, and a copy-to-clipboard button per prompt. Powered by a new GET /api/chat/prompts/catalog endpoint and a hand-curated backend/app/services/prompts/catalog.py. Header includes a "Download as .txt" button that produces a flat ccai-prompts-*.txt dump. Co-authored-by: Cursor <cursoragent@cursor.com>478df90 -
feat(participants): add "Select N Automatically" option
NeonClary +1: CursorWhen the user picks the new top-of-dropdown "Select N Automatically" option, the trigger label switches to "Participants Auto Selected" and manual persona checkboxes are hidden. Clicking either start button calls a new /api/chat/auto-select-participants endpoint that uses the orchestrator LLM to rank all available candidates by relevance to the question, populates the sidebar with the top N, then proceeds with /chat/start as usual. Manual selection is restored if auto mode is turned back off. Co-authored-by: Cursor <cursoragent@cursor.com>af5d1df -
feat(limits): expose repetition / failsafe limits in settings menu
NeonClary +1: CursorHard-coded repetition counts in orchestrator (critique rounds, status-assessment iterations, consensus turn budget, dyad cap, stall recovery, auto-disable threshold) and the failsafe pause points are now driven by a `ConversationLimits` dataclass on `Session`. Defaults match the historical values; the API layer clamps user-supplied overrides to per-field bounds. Frontend: new "Conversation limits..." item under an "Advanced" section in the settings menu, opens a modal with steppers + descriptions grouped into Discussion structure / Reliability / Failsafes. Overrides persist via localStorage and ride along on /chat/start. Backend: GET /api/chat/limits/defaults serves defaults + bounds + descriptions so the modal is server-driven; new test_conversation_limits.py covers clamping behavior and endpoint shape (60 backend tests pass). Co-authored-by: Cursor <cursoragent@cursor.com>1ec996f -
Surface Credential Summary in settings + exports
NeonClary +1: CursorAdd a transparency section so users can see and download the orchestrator-generated Credential Summary (per-participant expertise, debating style, credibility on this question, biases to watch). Built after Phase 1 and refreshed once after Phase 2. Backend: - New GET /api/chat/{session_id}/credentials endpoint. - Credentials block included in TXT and MD exports after the participants list, omitted cleanly when the summary isn't built yet. - CSV table gains four columns (Expertise, Style, Credibility 0-1, Bias to watch) inserted between Participant and First opinion so the row reads as a self-contained narrative. - New `credentials_updated` SSE event fires after the Phase-1.5 build and after the Phase-3 refresh (only when the payload actually changes), so the frontend can cache the latest snapshot without polling. Frontend: - New CredentialSummaryModal: per-participant cards with name, expertise, style, bias, and a 0-1 credibility bar. - "View Credential Summary..." it…64d902c -
Tighten CCAI conversation flow and visual threading
NeonClary +1: CursorThe CCAI demo's first end-to-end runs surfaced several UX and prompt issues. This commit addresses them across the orchestrator, prompt templates, transport, and chat UI. Conversation flow: - Each per-speaker prompt (CRITIQUE, FINALIZATION, CONSENSUS_ALLIED, CONSENSUS_SOLO) now opens with an "Open threads directed at you since your last turn" block populated by `_pending_addressed_for`. The templates instruct participants to address those threads FIRST, then their phase-specific contribution. Dropped CONSENSUS_TARGETED_RESPONSE in favor of this unified path. - Status-assessment follow-ups use a hybrid prompt: orchestrator prefers surfacing unanswered participant-to-participant questions verbatim (attributed to the asker) and only synthesizes its own when none exist. New `asker_participant_id` field in the JSON output. - Consensus phase caps consecutive addressed-to (dyadic) routings at 2 before forcing a round-robin pick, so two participants can't monopolize the fl…a763505 -
Build CCAI Vibe Demo on top of LLMChats3 baseline
NeonClary +1: CursorMulti-participant Collaborative Conversational AI demo: the orchestrator runs a six-phase state machine (Initial Opinions, Critique x2, Status Assessment, Finalization, Consensus, Closure), produces a JSON Credential Summary keyed on credibility-for-question, and routes addressed-to messages through alliance detection. Two failsafes - 60+20 participant messages and 100+50 orchestrator calls - pause the loop until the user clicks Continue. Every LLM response is funneled through a centralized strip_thinking sanitizer before being stored, displayed, or fed back to the summarizer. Backend - New: services/{models,prompts/*,credential,consensus,context_budget, json_calls,extra_personas,orchestrator}.py, utils/sanitize.py, api/personas.py, data/demo_questions.json (10 long-context prompts). - Rewrote api/chat.py with /chat/start (N participants, summarizer + max-participants overrides), /chat/{id}/continue, table-view + csv-table exports. - Rate limit bumped to 30/day per IP; HF org …0bb4dfa -
Import LLMChats3 master as CCAI baseline
NeonClary +1: CursorCo-authored-by: Cursor <cursoragent@cursor.com>c44fab6