summaryrefslogtreecommitdiff
path: root/backend/app/services
AgeCommit message (Collapse)Author
2026-02-14Fix debate elimination display and preserve original debater role numbersYurenHao0426
- Add elimination cards (orange themed) in Timeline showing who was convinced and by whom - Add "N eliminated" badge in round headers - Preserve original debater numbers after elimination by passing original_indices through debate_round() Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14Add background task persistence for debate & council operationsYurenHao0426
Decouple debate/council execution from SSE connection lifecycle so tasks survive browser disconnects. Backend runs work as asyncio.Tasks with progressive disk persistence; frontend can reconnect and recover state. - New backend/app/services/tasks.py: task registry, broadcast pattern, disk persistence at milestones, stale task cleanup on startup - New endpoints: POST start_debate/start_council, GET task stream/poll - Frontend stores taskId on nodes, recovers running tasks on page load - _applyPartialEvents rebuilds stage text + data from accumulated events Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14Enable web search for Claude models via web_search_20250305 toolYurenHao0426
stream_claude was missing enable_google_search handling, so Claude models could never perform web searches. Now passes the Anthropic web search tool when enabled, affecting all modes (normal run, council, debate). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14Rework debate prompts, add turn-based rounds and self-elimination convergenceYurenHao0426
- Round 1 parallel (form positions), Round 2+ sequential turn-based (each model sees current round's prior responses before speaking) - Prompts treat user question as open-ended, not as a debate proposition — models form their own thesis in Round 1 then defend it - Structured opposition: each model defends own unique position, not FOR/AGAINST - Self-convergence: each model judges if convinced after each round, eliminated models drop out, last one standing wins and provides final summary - Skip convergence/judge checks on Round 1 (still forming positions) - Auto-save now triggers on councilData/debateData updates so intermediate rounds persist across page refresh Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13Add LLM Debate mode for multi-round iterative model discussionsYurenHao0426
Implements a debate feature alongside Council mode where 2-6 models engage in multi-round discussions with configurable judge modes (external judge, self-convergence, display-only), debate formats (free discussion, structured opposition, iterative improvement, custom), and early termination conditions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13Add per-model council settings, Quick Chat council mode, and per-member ↵YurenHao0426
trace selection Council members now support individual temperature, reasoning effort, web search, and context trace overrides. Quick Chat inherits council config from the source node and streams through the 3-stage council pipeline. Blueprint loading migrates old string[] council formats to CouncilMemberConfig[]. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13Add LLM Council mode for multi-model consensusYurenHao0426
3-stage council orchestration: parallel model queries (Stage 1), anonymous peer ranking (Stage 2), and streamed chairman synthesis (Stage 3). Includes scope-aware file resolution for Google/Claude providers so upstream file attachments are visible to all providers. - Backend: council.py orchestrator, /api/run_council_stream endpoint, query_model_full() non-streaming wrapper, resolve_provider() helper, resolve_scoped_file_ids() for Google/Claude scope parity with OpenAI - Frontend: council toggle UI, model checkbox selector, chairman picker, SSE event parsing, tabbed Stage 1/2/3 response display - Canvas: amber council node indicator with Users icon Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13Add Anthropic Files API and persistent Google file caching for all providersYurenHao0426
- Add anthropic_file_id/google_file_uri fields to FileMeta (backend + frontend) - Eager upload to Anthropic and Google at file upload time (like OpenAI) - Cache and reuse file references in prepare_attachments for all 3 providers - Add document content block injection in stream_claude (file_id, base64, text fallback) - Conditional beta streaming for Anthropic Files API references - Persist on-demand upload results (changed flag + save_files_index) - Clean up file deletion for all providers (Anthropic warn-only, Google deduplicated) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13Add Claude provider, OpenRouter fallback, and GFM markdown supportYurenHao0426
- Add Claude (Anthropic) as third LLM provider with streaming support - Add OpenRouter as transparent fallback when official API keys are missing or fail - Add remark-gfm to ReactMarkdown for table/strikethrough rendering - Claude models: sonnet-4.5, opus-4, opus-4.5, opus-4.6 - Backend: new stream_claude(), stream_openrouter(), provider routing, API key CRUD - Frontend: model selectors, API key inputs for Claude and OpenRouter - Auto-migration for new DB columns (claude_api_key, openrouter_api_key) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2025-12-11add some logblackhao
2025-12-11add some logblackhao
2025-12-10set keys 2blackhao
2025-12-10init file sysblackhao
2025-12-06UXblackhao
2025-12-05init: add project files and ignore secretsblackhao