155 lines
3.8 KiB
TypeScript
155 lines
3.8 KiB
TypeScript
/**
|
|
* Client for calling Control Plane API routes (which proxy to the dataplane via SDK)
|
|
* This should be used in client components, not the SDK directly
|
|
*/
|
|
|
|
export class ControlPlaneClient {
|
|
private async fetchApi<T>(path: string, options?: RequestInit): Promise<T> {
|
|
const response = await fetch(path, {
|
|
...options,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
...options?.headers,
|
|
},
|
|
});
|
|
|
|
if (!response.ok) {
|
|
const error = await response.text();
|
|
throw new Error(`API Error: ${response.status} - ${error}`);
|
|
}
|
|
|
|
return response.json();
|
|
}
|
|
|
|
/**
|
|
* List all banks
|
|
*/
|
|
async listBanks() {
|
|
return this.fetchApi<{ banks: any[] }>('/api/banks', { cache: 'no-store' as RequestCache });
|
|
}
|
|
|
|
/**
|
|
* Recall memories
|
|
*/
|
|
async recall(params: {
|
|
query: string;
|
|
types?: string[];
|
|
bank_id: string;
|
|
budget?: string;
|
|
max_tokens?: number;
|
|
trace?: boolean;
|
|
}) {
|
|
return this.fetchApi('/api/recall', {
|
|
method: 'POST',
|
|
body: JSON.stringify(params),
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Reflect and generate answer
|
|
*/
|
|
async reflect(params: {
|
|
query: string;
|
|
bank_id: string;
|
|
budget?: string;
|
|
context?: string;
|
|
include_facts?: boolean;
|
|
}) {
|
|
return this.fetchApi('/api/reflect', {
|
|
method: 'POST',
|
|
body: JSON.stringify(params),
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Retain memories (batch)
|
|
*/
|
|
async retain(params: {
|
|
bank_id: string;
|
|
items: Array<{
|
|
content: string;
|
|
timestamp?: string;
|
|
context?: string;
|
|
}>;
|
|
document_id?: string;
|
|
async?: boolean;
|
|
}) {
|
|
const endpoint = params.async ? '/api/memories/retain_async' : '/api/memories/retain';
|
|
return this.fetchApi(endpoint, {
|
|
method: 'POST',
|
|
body: JSON.stringify(params),
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get bank statistics
|
|
*/
|
|
async getBankStats(bankId: string) {
|
|
return this.fetchApi(`/api/stats/${bankId}`);
|
|
}
|
|
|
|
/**
|
|
* Get graph data
|
|
*/
|
|
async getGraph(params: { bank_id: string; type?: string }) {
|
|
const queryParams = new URLSearchParams();
|
|
queryParams.append('bank_id', params.bank_id);
|
|
if (params.type) queryParams.append('type', params.type);
|
|
return this.fetchApi(`/api/graph?${queryParams}`);
|
|
}
|
|
|
|
/**
|
|
* List operations
|
|
*/
|
|
async listOperations(bankId: string) {
|
|
return this.fetchApi(`/api/operations/${bankId}`);
|
|
}
|
|
|
|
/**
|
|
* List entities
|
|
*/
|
|
async listEntities(params: { bank_id: string; limit?: number }) {
|
|
const queryParams = new URLSearchParams();
|
|
queryParams.append('bank_id', params.bank_id);
|
|
if (params.limit) queryParams.append('limit', params.limit.toString());
|
|
return this.fetchApi(`/api/entities?${queryParams}`);
|
|
}
|
|
|
|
/**
|
|
* Get entity details
|
|
*/
|
|
async getEntity(entityId: string, bankId: string) {
|
|
return this.fetchApi(`/api/entities/${entityId}?bank_id=${bankId}`);
|
|
}
|
|
|
|
/**
|
|
* Regenerate entity observations
|
|
*/
|
|
async regenerateEntityObservations(entityId: string, bankId: string) {
|
|
return this.fetchApi(`/api/entities/${entityId}/regenerate?bank_id=${bankId}`, {
|
|
method: 'POST',
|
|
});
|
|
}
|
|
|
|
/**
|
|
* List documents
|
|
*/
|
|
async listDocuments(params: { bank_id: string; q?: string; limit?: number; offset?: number }) {
|
|
const queryParams = new URLSearchParams();
|
|
queryParams.append('bank_id', params.bank_id);
|
|
if (params.q) queryParams.append('q', params.q);
|
|
if (params.limit) queryParams.append('limit', params.limit.toString());
|
|
if (params.offset) queryParams.append('offset', params.offset.toString());
|
|
return this.fetchApi(`/api/documents?${queryParams}`);
|
|
}
|
|
|
|
/**
|
|
* Get document
|
|
*/
|
|
async getDocument(documentId: string, bankId: string) {
|
|
return this.fetchApi(`/api/documents/${documentId}?bank_id=${bankId}`);
|
|
}
|
|
}
|
|
|
|
// Export singleton instance
|
|
export const client = new ControlPlaneClient();
|