Spaces:
Sleeping
Sleeping
Commit History
-
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): 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
-
fix(frontend): default API_BASE to '' so Docker builds use same-origin
NeonClary +1: CursorWhen REACT_APP_API_URL is unset (the typical case for the Docker build, where Dockerfile already passes REACT_APP_API_URL=), the bundle now resolves API_BASE to '' (relative URLs) instead of hardcoding http://localhost:8000. Previously a host-side pm run build without that env var silently baked the localhost URL into the bundle, causing every API call from a Docker deployment served on a different port (3002/8002/7860) to fail with CORS or refuse the connection - which is what produced the empty Persona dropdown in earlier sessions. Inline comment documents the dev-server escape hatch (REACT_APP_API_URL=http://localhost:8000 in .env.development) for the CRA pm start workflow. Co-authored-by: Cursor <cursoragent@cursor.com>69d90be
-
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 -
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