Files
kefu/deploy/knowledge-v4-review/edit_backend.py
T
2026-09-21 10:34:06 +08:00

57 lines
3.4 KiB
Python

from pathlib import Path
root=Path('C:/kefu/wechat_rpa')
p=root/'knowledge_store.py';s=p.read_text(encoding='utf-8').replace(' db.executescript(SCHEMA)', ' from knowledge_review import REVIEW_SCHEMA\n db.executescript(SCHEMA + REVIEW_SCHEMA)');p.write_text(s,encoding='utf-8',newline='\n')
p=root/'knowledge_api.py';s=p.read_text(encoding='utf-8').replace('class SettingsBody(BaseModel):', 'class ReviewConfirmBody(BaseModel):\n confirmed: bool = False\n\n\nclass SettingsBody(BaseModel):')
needle=' @app.get("/api/v2/knowledge/overview")'
insert=''' from knowledge_review import KnowledgeReviewStore
reviews = KnowledgeReviewStore(store)
@app.post('/api/v2/knowledge/review-tasks/preview')
def preview_reviews(request: Request, account_id: int = -1,
principal=Depends(require('knowledge:read', 'knowledge:review', 'im:content:read'))):
with errors():
return reviews.preview(resolve_admin_tenant(principal, account_id), account_id, principal.id, client_ip(request))
@app.get('/api/v2/knowledge/review-tasks')
def review_tasks(principal=Depends(require('knowledge:read', 'knowledge:review', 'im:content:read'))):
return {'items': reviews.jobs(principal.id)}
@app.get('/api/v2/knowledge/review-tasks/{job_id}/results')
def review_results(job_id: str, result: str = 'skipped', page: int = Query(default=1, ge=1),
page_size: int = Query(default=30, ge=1, le=100),
principal=Depends(require('knowledge:read', 'knowledge:review', 'im:content:read'))):
with errors():
return reviews.results(job_id, principal.id, resolve_admin_tenant(principal, -1), result, page, page_size)
@app.get('/api/v2/knowledge/review-tasks/{job_id}')
def review_task(job_id: str, principal=Depends(require('knowledge:read', 'knowledge:review', 'im:content:read'))):
with errors():
return reviews.get(job_id, principal.id)
@app.post('/api/v2/knowledge/review-tasks/{job_id}/{action}')
def review_action(job_id: str, action: str, body: ReviewConfirmBody, request: Request,
principal=Depends(require('knowledge:read', 'knowledge:review', 'im:content:read'))):
with errors():
return reviews.action(job_id, action, principal.id, client_ip(request), body.confirmed)
'''
assert needle in s;s=s.replace(needle,insert+needle);p.write_text(s,encoding='utf-8',newline='\n')
p=root/'knowledge_worker.py';s=p.read_text(encoding='utf-8').replace('import time\n', 'import time\nimport threading\n',1)
s=s.replace(' worker = KnowledgeWorker(store)\n print(', ''' from knowledge_review import KnowledgeReviewWorker
review_worker = KnowledgeReviewWorker(store)
def review_loop():
while True:
try:
worked = review_worker.step()
except Exception as exc:
# Keep processing isolated from model requests; do not log content.
print(f'批量审核暂不可用: {type(exc).__name__}', flush=True)
worked = False
time.sleep(0.05 if worked else 2)
if args.once:
review_worker.step()
else:
threading.Thread(target=review_loop, name='knowledge-review', daemon=True).start()
worker = KnowledgeWorker(store)
print(''');p.write_text(s,encoding='utf-8',newline='\n')