ymq
|
98389da60b
|
fix(ids): 全仓 ID 生成统一 getID()/uuid()——禁 uuid4 截断
- api_core.py 5处、init.py 6处、pipeline.py 1处: uuid4().hex -> getID()
(uuid4 hex 32位+chunk后缀_cN 溢出 VARCHAR(32) → ingest 1406 DataError,
即 search 0 命中根因;getID() 21位放得下)
- upload_file.dspy: 去掉 replace('-','')[:16] 手工截断,直用沙箱 uuid()
- 规范:.py 必须 getID(),.dspy 必须 uuid()
|
2026-09-03 16:29:15 +08:00 |
|
ymq
|
00262a6d2a
|
feat(rag-api): 对外B2B API+内部tools包装
- wwwroot/api/ 六个对外端点(Bearer Key 鉴权,路由授 any、业务鉴权在 api_core):
kb_create/kb_delete/doc_upload/doc_delete/tag_create/doc_set_tags/search
- rag/api_core.py: verify_api_key + make_api_env(org注入) + 六个业务核心
(复用 init.py 底层检索/入库能力,杜绝双实现分叉)
- 统一返回格式 {"status":"ok"|"error","data":...}
- rag/ingest.py: 入库管线从 upload_file.dspy 抽出共享(UI/API同一引擎)
- rag/tools.py: RAG_TOOL_SCHEMAS + exec_rag_tool(与API同构,供内部助手调用)
- rag_api_keys 表 model(key 只存 SHA256);管理端 api_key_create/list/revoke
- load_path.py 注册 7 个 API 端点(any) + 3 个管理端点(logined)
|
2026-09-03 15:51:19 +08:00 |
|
ymq
|
03dbf0f2b5
|
feat(rag): 多媒体知识库接回——qwen3-vl在线(2560维)+CLIP保留给GPU;VDB地址读upapp;在线重排;配置界面4引擎
|
2026-09-01 15:47:21 +08:00 |
|
ymq
|
51c9968093
|
fix(host): 后台入库任务禁硬编码库名,改经 get_module_dbname 映射
ingest_doc 是 background_reco 后台任务(无 request/env),原用 db.sqlorContext('rag') 6 处。
在 ragserver 上库名恰为 rag 所以能跑,接入 pipeline-app(库名 pipeline)后
sqlorFactory 报 NoneType.get → 入库全程失败,status 永久 pending、向量丢失。
改为函数开头 _dbname = get_module_dbname('rag') 统一映射。
|
2026-08-25 15:45:44 +08:00 |
|
ymq
|
789960a1cf
|
refactor(schema): rag 模块全部数据表加 rag_ 前缀(模块跨应用复用防冲突)
- models/ 重建为正确表定义格式(summary+fields+indexes),覆盖全部 11 个表
修正原 models/ 误放 CRUD 格式副本(缺 summary)导致 json2ddl 100% 失败被静默忽略
- json/ 6 个 CRUD 定义 tblname 加前缀 + 文件改名
- 129 处 SQL/sor 表名加 rag_ 前缀(URL 路径 knowledge_bases_list 保持不变)
- 新增 init/migrate_rag_prefix.sql 幂等 RENAME TABLE 迁移
|
2026-08-25 14:24:37 +08:00 |
|
ymq
|
1054dbb3a9
|
feat(embedding): 知识库支持文本(bge-m3 /txte)/多媒体(CLIP /mme)双向量引擎
- create_kb/new_kb_form 加向量引擎选择(文本 bge-m3 / 多媒体 clip-vith14)
- upload_file/batch_ingest/search_result/init.py 按 embedding_engine 路由到 /txte 或 /mme
- 文本知识库上传媒体文件友好拒绝(不再崩溃报错)
|
2026-08-25 13:15:11 +08:00 |
|
ymq
|
67c13f626d
|
feat: 入库时存储人脸bbox和视频时间戳到chunk metadata
- upload_file: 图片/视频人脸检测保存face_bboxes
- upload_file: 视频帧chunk INSERT加metadata列(start_time+bboxes)
- search_result: 检索结果显示bbox坐标和视频时间戳
- init.py: chunk INSERT加metadata列
- media_cards: 标签同时读media_tags表和metadata.tags
- search_result: 媒体URL用entire_url转完整路径
|
2026-08-12 11:10:50 +08:00 |
|
ymq
|
9ac8192693
|
fix: 视频上传增加声纹提取,修复 metadata 永远 pending
- 视频处理新增:ffmpeg 提取音频 → voiceprint/extract 声纹 API
- meta_parts['video'] 成功时从 'pending' 改为 'done'
- voiceprint 结果写入 meta_parts
|
2026-08-10 17:42:52 +08:00 |
|
|
|
548fc6013e
|
feat: per-org storage quota enforcement — org_storage_limits table, upload rejection, UI display
|
2026-08-04 15:36:53 +08:00 |
|
|
|
84448259e2
|
fix: GPU URLs need :10443, create VDB collection before upsert, align VDB id with chunk id
|
2026-08-03 17:02:06 +08:00 |
|
|
|
8ab8987776
|
chore: remove debug traces from upload_file.dspy
|
2026-07-31 18:59:15 +08:00 |
|
|
|
5bf3ef3822
|
trace: check if DBPools blocks in background task
|
2026-07-31 18:56:51 +08:00 |
|
|
|
2f7acc8120
|
debug: trace background_reco execution in upload_file.dspy
|
2026-07-31 18:53:31 +08:00 |
|
|
|
8dad4e9b5e
|
feat: async upload — return immediately, ingest in background
|
2026-07-31 18:17:47 +08:00 |
|
|
|
9b3cfb86c0
|
refactor: 用 StreamHttpClient 替代 aiohttp — DSPY 预置全局变量
|
2026-07-31 13:45:42 +08:00 |
|
|
|
848644f229
|
fix: import aiohttp — 原代码所有 aiohttp 调用被 except:pass 静默吞掉 NameError
|
2026-07-31 13:31:52 +08:00 |
|
|
|
1cb82b912d
|
add text extraction for PDF/DOCX/PPTX/XLSX and MP4 keyframe CLIP embedding in upload_file.dspy
|
2026-07-30 18:06:26 +08:00 |
|
|
|
bd66e00a7a
|
fix: use env.save_file/realpath instead of importing FileStorage in DSPY
|
2026-07-30 10:38:06 +08:00 |
|
|
|
3f3743842e
|
fix: use FileStorage for upload/delete — hashed paths /idfile/191/193/197/97/xxx.txt
|
2026-07-29 18:15:06 +08:00 |
|
|
|
0385670e38
|
fix: restore detail.ui with upload zone + upload_file.dspy
|
2026-07-29 16:59:58 +08:00 |
|