
Security News
Package Maintainers Call for Improvements to GitHub’s New npm Security Plan
Maintainers back GitHub’s npm security overhaul but raise concerns about CI/CD workflows, enterprise support, and token management.
@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 157 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
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.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.