57 lines
3.4 KiB
Python
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')
|