
Security News
PodRocket Podcast: Inside the Recent npm Supply Chain Attacks
Socket CEO Feross Aboukhadijeh discusses the recent npm supply chain attacks on PodRocket, covering novel attack vectors and how developers can protect themselves.
@redhat-cloud-services/ai-client-common
Advanced tools
Common interfaces and utilities for AI client packages in the Red Hat Cloud Services ecosystem.
Common interfaces and utilities for AI client packages in the Red Hat Cloud Services ecosystem.
IAIClient
interface for all AI servicesnpm install @redhat-cloud-services/ai-client-common
All AI clients in this workspace implement the IAIClient
interface:
import { IAIClient } from '@redhat-cloud-services/ai-client-common';
interface IAIClient {
init(): Promise<string>;
sendMessage<TChunk = unknown>(
conversationId: string,
message: string,
options?: ISendMessageOptions<TChunk>
): Promise<TChunk | IMessageResponse | void>;
getDefaultStreamingHandler?<TChunk = unknown>(): IStreamingHandler<TChunk> | undefined;
getConversationHistory(conversationId: string, options?: IRequestOptions): Promise<IConversationHistoryResponse>;
healthCheck(options?: IRequestOptions): Promise<unknown>;
getServiceStatus?(options?: IRequestOptions): Promise<unknown>;
}
Important: Do NOT set 'Content-Type'
headers in your fetchFunction - AI clients manage these internally based on endpoint requirements.
import { IFetchFunction } from '@redhat-cloud-services/ai-client-common';
const customFetch: IFetchFunction = async (input, init) => {
// Add authentication headers
const token = await getAuthToken();
return fetch(input, {
...init,
headers: {
...init?.headers,
'Authorization': `Bearer ${token}`,
// DO NOT set 'Content-Type' - AI clients handle this internally
},
});
};
import { IBaseClientConfig } from '@redhat-cloud-services/ai-client-common';
const config: IBaseClientConfig = {
baseUrl: 'https://your-ai-service.com',
fetchFunction: customFetch,
defaultStreamingHandler: new CustomStreamingHandler()
};
import { IStreamingHandler } from '@redhat-cloud-services/ai-client-common';
class CustomStreamingHandler implements IStreamingHandler<string> {
onChunk(chunk: string, afterChunk?: (chunk: string) => void): void {
console.log('Received chunk:', chunk);
// Process the chunk
if (afterChunk) {
afterChunk(chunk);
}
}
onStart?(conversationId?: string, messageId?: string): void {
console.log('Stream started', { conversationId, messageId });
}
onComplete?(finalChunk: string): void {
console.log('Stream completed:', finalChunk);
}
onError?(error: Error): void {
console.error('Stream error:', error);
}
onAbort?(): void {
console.log('Stream aborted');
}
}
import { ISendMessageOptions } from '@redhat-cloud-services/ai-client-common';
const streamingOptions: ISendMessageOptions<string> = {
stream: true,
headers: { 'Custom-Header': 'value' },
signal: abortController.signal,
afterChunk: (chunk) => {
// Process each chunk as it arrives
updateUI(chunk);
}
};
import {
AIClientError,
AIClientValidationError
} from '@redhat-cloud-services/ai-client-common';
try {
const response = await client.sendMessage(conversationId, message);
} catch (error) {
if (error instanceof AIClientValidationError) {
console.error('Validation errors:', error.validationErrors);
error.validationErrors.forEach(validationError => {
console.log(`Field: ${validationError.loc.join('.')}`);
console.log(`Message: ${validationError.msg}`);
console.log(`Type: ${validationError.type}`);
});
} else if (error instanceof AIClientError) {
console.error(`API Error ${error.status}: ${error.message}`);
console.error('Response data:', error.data);
} else {
console.error('Unexpected error:', error);
}
}
import {
IRequestOptions,
IMessageResponse,
IConversationHistoryResponse,
IAPIResponse
} from '@redhat-cloud-services/ai-client-common';
// Standard request options
const options: IRequestOptions = {
headers: { 'Custom-Header': 'value' },
signal: new AbortController().signal
};
// Message response structure
interface IMessageResponse {
messageId: string;
answer: string;
conversationId: string;
createdAt?: string;
metadata?: unknown;
}
This package provides the foundation for:
Run nx build ai-client-common
to build the library.
Run nx test ai-client-common
to execute the unit tests via Jest.
This package follows the workspace standards:
any
typesFAQs
Common interfaces and utilities for AI client packages in the Red Hat Cloud Services ecosystem.
The npm package @redhat-cloud-services/ai-client-common receives a total of 193 weekly downloads. As such, @redhat-cloud-services/ai-client-common popularity was classified as not popular.
We found that @redhat-cloud-services/ai-client-common demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket CEO Feross Aboukhadijeh discusses the recent npm supply chain attacks on PodRocket, covering novel attack vectors and how developers can protect themselves.
Security News
Maintainers back GitHub’s npm security overhaul but raise concerns about CI/CD workflows, enterprise support, and token management.
Product
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.