summaryrefslogtreecommitdiff
path: root/backend
AgeCommit message (Collapse)Author
2026-02-13Add username fallback for API key resolution when JWT token expiresYurenHao0426
When the JWT token is expired or missing, endpoints could not resolve user API keys and fell back to environment variables (which are unset). Added resolve_user() helper that falls back to DB lookup by username query param, and added ?user= to all frontend API calls as a belt-and- suspenders approach alongside auth tokens. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13Fix file upload/delete using user API keys instead of env vars onlyYurenHao0426
The upload_file and delete_file endpoints were calling API clients without passing user-specific API keys, falling back only to environment variables. Now both endpoints resolve keys from the authenticated user's settings via get_user_api_key(), fixing "API key not found" errors for users who configured keys through the frontend. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13Auto re-upload expired Google files on node runYurenHao0426
Add _check_google_file_active() to verify cached Google file URIs before reuse. If expired (48h limit), clears cache and transparently re-uploads via ensure_google_file_upload(). 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-10set keysblackhao
2025-12-10user datablackhao
2025-12-10init file sys ?blackhao
2025-12-10init file sysblackhao
2025-12-09upload files to backendblackhao
2025-12-09file management sysblackhao
2025-12-06UXblackhao
2025-12-05init: add project files and ignore secretsblackhao