feat(admin): add News Engine console and image-make config API
Expose memind-news-engine health, collect, rank, and scheduler controls in md.tkmind.cn admin, proxied via MEMIND_NEWS_ENGINE_URL. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
import type {
|
||||
AssetGatewayConfig,
|
||||
ImageMakeAdminConfig,
|
||||
ImageMakeAdminConfigResponse,
|
||||
AdminDashboardSummary,
|
||||
AdminServiceRestartAction,
|
||||
AdminServiceRestartResult,
|
||||
@@ -70,6 +72,13 @@ import type {
|
||||
WechatWebNotification,
|
||||
MindSearchConfig,
|
||||
MindSearchServiceTestResult,
|
||||
NewsEngineCollectionDetail,
|
||||
NewsEngineCollectionSummary,
|
||||
NewsEngineConfig,
|
||||
NewsEngineHealth,
|
||||
NewsEngineRankResult,
|
||||
NewsEngineRunSummary,
|
||||
NewsEngineSchedulerStatus,
|
||||
AdminTemplateCatalogItem,
|
||||
AdminTemplateCatalogPatch,
|
||||
} from '../types';
|
||||
@@ -555,6 +564,35 @@ export async function getAssetGatewayConfig(): Promise<AssetGatewayConfig> {
|
||||
return portalFetch('/admin-api/asset-gateway/config');
|
||||
}
|
||||
|
||||
export async function getImageMakeAdminConfig(): Promise<ImageMakeAdminConfigResponse> {
|
||||
return portalFetch('/admin-api/image-make/config');
|
||||
}
|
||||
|
||||
export async function updateImageMakeAdminConfig(
|
||||
payload: Partial<ImageMakeAdminConfig> & {
|
||||
providers?: Partial<ImageMakeAdminConfig['providers']> & {
|
||||
fal_ai?: Partial<ImageMakeAdminConfig['providers']['fal_ai']> & { apiKey?: string };
|
||||
aliyun_bailian?: Partial<ImageMakeAdminConfig['providers']['aliyun_bailian']> & { apiKey?: string };
|
||||
};
|
||||
},
|
||||
): Promise<ImageMakeAdminConfigResponse> {
|
||||
return portalFetch('/admin-api/image-make/config', {
|
||||
method: 'PUT',
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
}
|
||||
|
||||
export async function getImageMakeRuntimeStatus(): Promise<{
|
||||
ok: boolean;
|
||||
defaultProvider: string;
|
||||
fingerprint?: string;
|
||||
source?: string;
|
||||
updatedAt?: number | null;
|
||||
providers: ImageMakeAdminConfig['providers'];
|
||||
}> {
|
||||
return portalFetch('/admin-api/image-make/runtime');
|
||||
}
|
||||
|
||||
export async function updateAssetGatewayConfig(
|
||||
payload: Pick<AssetGatewayConfig, 'enabled'>,
|
||||
): Promise<AssetGatewayConfig> {
|
||||
@@ -1054,6 +1092,55 @@ export async function testMindSearchService(serviceId: string): Promise<MindSear
|
||||
return portalFetch(`/admin-api/mindsearch/services/${encodeURIComponent(serviceId)}/test`, { method: 'POST' });
|
||||
}
|
||||
|
||||
export async function getNewsEngineHealth(): Promise<NewsEngineHealth> {
|
||||
return portalFetch('/admin-api/news-engine/health');
|
||||
}
|
||||
|
||||
export async function getNewsEngineConfig(): Promise<NewsEngineConfig> {
|
||||
return portalFetch('/admin-api/news-engine/config');
|
||||
}
|
||||
|
||||
export async function getNewsEngineCollections(limit = 20): Promise<NewsEngineCollectionSummary[]> {
|
||||
return portalFetch(`/admin-api/news-engine/collections?limit=${limit}`);
|
||||
}
|
||||
|
||||
export async function getNewsEngineCollection(id: string): Promise<NewsEngineCollectionDetail> {
|
||||
return portalFetch(`/admin-api/news-engine/collections/${encodeURIComponent(id)}`);
|
||||
}
|
||||
|
||||
export async function collectNewsEngine(body: { useLlm?: boolean; groupIds?: string[] } = {}): Promise<NewsEngineCollectionDetail> {
|
||||
return portalFetch('/admin-api/news-engine/collect', { method: 'POST', body: JSON.stringify(body) });
|
||||
}
|
||||
|
||||
export async function scoreNewsEngineCollection(id: string, body: Record<string, unknown> = {}): Promise<NewsEngineCollectionDetail> {
|
||||
return portalFetch(`/admin-api/news-engine/collections/${encodeURIComponent(id)}/score`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(body),
|
||||
});
|
||||
}
|
||||
|
||||
export async function rankNewsEngine(body: {
|
||||
groups: unknown[];
|
||||
options?: { limit?: number; minimumScore?: number };
|
||||
}): Promise<NewsEngineRankResult> {
|
||||
return portalFetch('/admin-api/news-engine/rank', { method: 'POST', body: JSON.stringify(body) });
|
||||
}
|
||||
|
||||
export async function getNewsEngineRuns(limit = 30): Promise<NewsEngineRunSummary[]> {
|
||||
return portalFetch(`/admin-api/news-engine/runs?limit=${limit}`);
|
||||
}
|
||||
|
||||
export async function getNewsEngineSchedulerStatus(): Promise<NewsEngineSchedulerStatus> {
|
||||
return portalFetch('/admin-api/news-engine/scheduler/status');
|
||||
}
|
||||
|
||||
export async function triggerNewsEngineScheduler(body: { useLlm?: boolean } = {}): Promise<NewsEngineCollectionDetail> {
|
||||
return portalFetch('/admin-api/news-engine/scheduler/trigger', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(body),
|
||||
});
|
||||
}
|
||||
|
||||
// ── Workflow Orchestrator ─────────────────────────────
|
||||
|
||||
export async function getOrchestratorConfig() {
|
||||
|
||||
Reference in New Issue
Block a user