@aj-archipelago/cortex
Version:
Cortex is a GraphQL API for AI. It provides a simple, extensible interface for using AI services from OpenAI, Azure and others.
63 lines (50 loc) • 1.74 kB
JavaScript
// Consolidated GraphQL subscription streaming tests (subset from subscription.test.js)
import test from 'ava';
import serverFactory from '../../../../../index.js';
import { createWsClient, ensureWsConnection, collectSubscriptionEvents, validateProgressMessage } from '../../../../helpers/subscriptions.js';
let testServer;
let wsClient;
test.before(async () => {
process.env.CORTEX_ENABLE_REST = 'true';
const { server, startServer } = await serverFactory();
startServer && await startServer();
testServer = server;
wsClient = createWsClient();
await ensureWsConnection(wsClient);
});
test.after.always('cleanup', async () => {
if (wsClient) wsClient.dispose();
if (testServer) await testServer.stop();
});
test.serial('Request progress messages have string data and info fields', async (t) => {
const response = await testServer.executeOperation({
query: `
query TestQuery($text: String!) {
chat(text: $text, async: true, stream: true) {
result
}
}
`,
variables: { text: 'Generate a long response to test streaming' }
});
const requestId = response.body?.singleResult?.data?.chat?.result;
t.truthy(requestId);
const events = await collectSubscriptionEvents(wsClient, {
query: `
subscription OnRequestProgress($requestId: String!) {
requestProgress(requestIds: [$requestId]) {
requestId
progress
data
info
}
}
`,
variables: { requestId }
}, 10000, { requireCompletion: false, minEvents: 1 });
t.true(events.length > 0);
for (const event of events) {
const progress = event.data.requestProgress;
validateProgressMessage(t, progress, requestId);
}
});