stefanfeng
1889c8ebba
Merge pull request 'fix(avatar): 强制每轮跟随对方当前语言' ( #25 ) from codex/avatar-language-enforcement-20260909 into main
...
Reviewed-on: #25
2026-09-11 11:55:21 +08:00
stefanfeng
857d6f2562
fix(avatar): enforce each turn response language
2026-09-09 13:33:45 +08:00
stefanfeng
4c152230aa
build(avatar): preserve backend dependency cache
2026-09-09 10:58:09 +08:00
stefanfeng
140ac20281
fix(avatar): prevent stale deployment images
2026-09-09 10:47:18 +08:00
stefanfeng
8585d101d5
feat: add avatar payments and finance management
2026-09-08 18:47:29 +08:00
stefanfeng
848657219e
fix(avatar): OCR image-only knowledge PDFs
2026-09-08 16:44:18 +08:00
stefanfeng
28fcd5373b
fix(avatar): follow language changes each turn
2026-09-08 10:23:34 +08:00
stefanfeng
e71267cf86
fix(avatar): upload knowledge files in chunks
2026-09-07 17:45:22 +08:00
stefanfeng
3edf92c7cc
feat(avatar): show multi-file knowledge upload progress
2026-09-04 16:40:16 +08:00
stefanfeng
08c58fe0e6
fix(avatar): cap knowledge files at 50MB
2026-09-04 15:18:39 +08:00
stefanfeng
6b7201e890
fix(avatar): align knowledge upload limit with production
2026-09-04 13:56:29 +08:00
stefanfeng
28553aba15
fix(avatar): allow knowledge uploads up to 20MB
2026-09-04 13:47:46 +08:00
stefanfeng
b98a2b9507
fix(avatar): index knowledge documents asynchronously
2026-09-04 11:53:56 +08:00
stefanfeng
6a4b35c49a
fix(avatar): ground replies in recognized images
2026-09-02 14:47:27 +08:00
stefanfeng
7cac96356d
fix(avatar): recover BOXIM image replies
2026-09-02 14:12:04 +08:00
stefanfeng
0fc43908ae
feat(avatar): understand BOXIM image messages
2026-09-01 15:35:41 +08:00
stefanfeng
540edb58c4
fix(avatar): prevent BOXIM polling starvation
2026-09-01 14:03:35 +08:00
stefanfeng
016bc22c05
feat(avatar): add private vision chat support
2026-08-31 15:10:50 +08:00
stefanfeng
6794e88d53
fix(avatar): normalize embedding API endpoint
2026-08-28 16:59:22 +08:00
stefanfeng
46d42b7d98
fix(avatar): prevent takeover loops and isolate settings
2026-08-27 11:30:12 +08:00
stefanfeng
ef58c5f2d2
feat(avatar): optimize embedded H5 management flow
2026-08-27 09:28:05 +08:00
stefanfeng
6e3fe5a616
Merge pull request 'feat(avatar): 接入会会支付并统一积分展示' ( #7 ) from codex/avatar-token-copy-to-points-20260826 into main
...
Reviewed-on: #7
2026-08-26 14:53:58 +08:00
stefanfeng
67b6bd1b48
Merge pull request 'fix(avatar): 部署重启后自动恢复 BOXIM 接管' ( #6 ) from codex/avatar-takeover-restart-safe-20260826 into main
...
Reviewed-on: #6
2026-08-26 14:53:49 +08:00
stefanfeng
c37294be17
feat(avatar): integrate Huihui payments
2026-08-26 14:41:21 +08:00
stefanfeng
ea932f27fb
feat(avatar): rename Token display to points
2026-08-26 14:01:12 +08:00
stefanfeng
0c6419f37e
fix(avatar): restore BOXIM takeover after restart
2026-08-26 13:25:16 +08:00
stefanfeng
f768e7648f
fix(avatar): prevent inferred reply scenarios
2026-08-26 11:56:54 +08:00
stefanfeng
e30ab2b889
feat(avatar): follow user language in replies
2026-08-26 11:52:32 +08:00
stefanfeng
81aec1c63a
feat(avatar): support production H5 token SSO
2026-08-26 09:17:41 +08:00
stefanfeng
dc34a03357
feat(ai): add dedicated digital avatar model config
2026-08-25 16:50:33 +08:00
stefanfeng
699bbbde57
feat(avatar): add user token accounting
2026-08-25 13:24:02 +08:00
stefanfeng
672019830d
fix(avatar): prevent takeover replies blocking across chats
2026-08-21 16:21:00 +08:00
stefanfeng
e720baa21e
fix(avatar): batch knowledge embedding requests
2026-08-21 13:21:05 +08:00
stefanfeng
e2b928273c
fix(avatar): acknowledge BOXIM messages as read
2026-08-20 17:10:54 +08:00
stefanfeng
64b7680ec4
fix(avatar): keep BOXIM status ready during long polls
2026-08-20 15:58:07 +08:00
stefanfeng
76bd22c24b
fix(avatar): preserve ownership across Huihui environments
2026-08-20 15:27:29 +08:00
stefanfeng
51a317ccd9
fix(avatar): fail closed on BOXIM connection errors
2026-08-20 14:47:13 +08:00
stefanfeng
25fb8fbee5
feat(avatar): add BOXIM chat takeover
2026-08-19 17:56:57 +08:00
stefanfeng
cfcfe7146e
feat(avatar): align authorization page with design
2026-08-19 17:05:22 +08:00
stefanfeng
2e2adeb9e2
feat(avatar): complete authorization management
2026-08-19 16:21:19 +08:00
stefanfeng
25d2494616
fix: surface missing knowledge files
2026-08-19 15:13:22 +08:00
stefanfeng
68ea87e1b2
fix: persist avatar data and uploads
2026-08-19 14:44:58 +08:00
stefanfeng
c5bfa47a23
fix: await takeover polling jobs
2026-08-19 14:32:10 +08:00
stefanfeng
4ab7732da9
fix: preserve takeover and share token integrity
2026-08-19 14:23:43 +08:00
stefanfeng
4a2d788e85
feat: complete grounded digital avatar chat experience
2026-08-19 14:21:56 +08:00
stefanfeng
c748950402
fix: accept camelCase authorizationId from frontend
2026-08-07 17:18:34 +08:00
stefanfeng
f13d488f82
feat: add takeover config API endpoint
...
PUT /api/avatar/{avatar_id}/authorizations/takeover to update authorization
takeover settings (enabled, mode, delay_seconds) with validation.
2026-08-07 17:15:12 +08:00
stefanfeng
8e365e63e1
feat: add scheduled message polling for avatar takeover
...
Add APScheduler BackgroundScheduler to on_startup that polls
takeover_service.poll_and_process_messages every 10 seconds. Added
redis and apscheduler dependencies. Added poll_and_process_messages,
fetch_unread_messages, and process_message methods to TakeoverService.
Scheduler initialization is graceful — Redis/Box IM failures do not
prevent app startup.
2026-08-07 17:01:04 +08:00
stefanfeng
dbd668e451
fix: resolve owner through Avatar model in takeover service
...
- Fix C1: check_takeover_enabled now uses owner_huihui_id to query Avatar first
- Fix C2: execute_takeover resolves owner_id via Avatar model (Authorization has no owner_id)
- Fix I1: add test for None case (no Avatar found)
- Fix I2: add test verifying filter arguments
- Fix I3: implement process_delayed_queue to scan and dispatch expired messages
2026-08-07 16:55:25 +08:00
stefanfeng
190ec48d9c
feat: add takeover service core logic
...
Implement TakeoverService for avatar takeover chat feature:
- check_takeover_enabled: query Authorization for enabled takeover
- generate_reply: call local chat API via httpx to generate responses
- execute_takeover: get owner IM credentials, generate reply, send via BoxIM
- enqueue_delayed_message: Redis delayed queue with graceful degradation
- process_delayed_queue: placeholder for scheduled worker
Service degrades gracefully when Redis is unavailable.
2026-08-07 16:46:57 +08:00