Reduce server console polling load

This commit is contained in:
npc0-hue
2026-09-07 19:49:20 +08:00
parent 1b583f3ca6
commit 4ab7bb820d
10 changed files with 110 additions and 25 deletions
+33 -5
View File
@@ -37,6 +37,7 @@ import type {
JobCreateRequest,
JobListResponse,
JobResponse,
JobState,
LlmConfigSuggestionRequest,
LlmConfigSuggestionResponse,
LogStreamCursorRequest,
@@ -59,6 +60,7 @@ import type {
RunDistributionGenerateRequest,
RunDistributionResponse,
RunEndpointListResponse,
RunEndpointStatus,
RunUpdateJobResponse,
RunUpdateJobListResponse,
RunUpdateRequest,
@@ -142,6 +144,16 @@ export interface PlatformEventStream {
close(): void;
}
interface RunEndpointListFilter {
status?: RunEndpointStatus;
}
interface JobListFilter {
runEndpointId?: string;
state?: JobState;
states?: JobState[];
}
export class PlatformApiClient {
constructor(private readonly baseUrl = "/api/v1", private readonly sessionTokenProvider: () => string | null = () => platformApiSessionToken) {}
@@ -241,13 +253,12 @@ export class PlatformApiClient {
});
}
async listRunEndpoints(): Promise<RunEndpointListResponse> {
return this.request<RunEndpointListResponse>("/run/endpoints");
async listRunEndpoints(filter: RunEndpointListFilter = {}): Promise<RunEndpointListResponse> {
return this.request<RunEndpointListResponse>(`/run/endpoints${runEndpointQuery(filter)}`);
}
async listJobs(serverInstanceId?: string): Promise<JobListResponse> {
const params = serverInstanceId ? `?serverInstanceId=${encodeURIComponent(serverInstanceId)}` : "";
return this.request<JobListResponse>(`/jobs${params}`);
async listJobs(serverInstanceId?: string, filter: JobListFilter = {}): Promise<JobListResponse> {
return this.request<JobListResponse>(`/jobs${jobListQuery(serverInstanceId, filter)}`);
}
async listArtifacts(filter: ArtifactFilterRequest = {}): Promise<ArtifactListResponse> {
@@ -901,6 +912,23 @@ function artifactQuery(filter: ArtifactFilterRequest): string {
return query ? `?${query}` : "";
}
function runEndpointQuery(filter: RunEndpointListFilter): string {
const params = new URLSearchParams();
if (filter.status) params.set("status", filter.status);
const query = params.toString();
return query ? `?${query}` : "";
}
function jobListQuery(serverInstanceId: string | undefined, filter: JobListFilter): string {
const params = new URLSearchParams();
if (serverInstanceId) params.set("serverInstanceId", serverInstanceId);
if (filter.runEndpointId) params.set("runEndpointId", filter.runEndpointId);
if (filter.state) params.set("state", filter.state);
if (filter.states?.length) params.set("states", filter.states.join(","));
const query = params.toString();
return query ? `?${query}` : "";
}
function serverFileListQuery(request: Partial<ServerFileListRequest>): string {
const params = new URLSearchParams();
if (request.directoryKey) params.set("directoryKey", request.directoryKey);