@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
204 lines (200 loc) • 6.45 kB
TypeScript
import * as i0 from '@angular/core';
import { Type } from '@angular/core';
import { Observable } from 'rxjs';
import { FetchClient } from '@c8y/client';
interface AIMessageStreamSteps extends AIMessage {
componentSteps$?: Observable<{
content: Type<any> | string;
origin: AgentStep;
}[]>;
}
interface AIMessage {
role: 'user' | 'assistant';
content: string;
options?: AIMessageOptions;
steps?: Array<AgentStep>;
finishReason?: 'stop' | 'error' | 'tool_use';
timestamp?: string;
}
interface AIMessageOptions {
skipToLLM?: boolean;
hiddenContent?: string;
variables?: {
[key: string]: any;
};
}
declare enum DataStreamType {
TEXT_DELTA = "text-delta",
TOOL_CALL = "tool-call",
TOOL_CALL_STREAMING = "tool-call-streaming",
TOOL_CALL_DELTA = "tool-call-delta",
TOOL_RESULT = "tool-result",
REASONING = "reasoning",
REASONING_DELTA = "reasoning-delta",
REDACTED_REASONING = "redacted-reasoning",
REASONING_SIGNATURE = "reasoning-signature",
FINISH_REASONING = "finish-reasoning",
FINISH = "finish",
FINISH_STEP = "finish-step",
ERROR = "error",
DATA = "data",
MESSAGE_ANNOTATIONS = "message-annotations",
SOURCE = "source",
FILE = "file",
STEP_START = "step-start",
STEP_FINISH = "step-finish"
}
type AgentStep = {
type: 'text' | 'reasoning' | string;
text: string;
reasoning?: string;
textDelta?: string;
toolCalls?: Array<ToolCall>;
toolResults?: Array<ToolResult>;
};
interface Tool {
toolName: string;
toolId: string;
type: 'tool-call' | 'tool-result';
}
interface ToolCall extends Tool {
arguments: {
[key: string]: any;
};
}
interface ToolResult extends Tool {
result: {
content: {
text: string;
type: string;
}[];
};
}
interface ClientAgentDefinition {
/**
* If set to true, the agent will be created each time. This is useful for development.
*/
snapshot: boolean;
/**
* The label of the agent that is shown to the user.
*/
label: string;
/**
* The definitions of the agent.
*
* You can use multiple definitions that can be used in an agent-2-agent scenario
* The first definition is the entry point.
*/
definitions: {
name: string;
type: 'object' | 'text';
agent: {
system: string;
[key: string]: any;
};
mcp: Array<{
serverName: string;
tools: string[];
}>;
}[];
}
interface ChatConfig {
title: string;
headline: string;
welcomeText: string;
placeholder: string;
sendButtonText: string;
cancelButtonText: string;
disclaimerText: string;
userInterfaceIcons: {
send: string;
cancel: string;
};
}
interface AgentHealthCheckResponse {
/**
* Indicates if the agent exists and can be used.
* If false, the agent was not found.
*/
exists: boolean;
/**
* Indicates if the user can create the agent, and if a global provider is configured.
*/
canCreate: boolean;
/**
* Indicates if the provider is configured.
* If false, the agent cannot be created as the provider is not configured.
*/
isProviderConfigured: boolean;
/**
* If canCreate or exist is false, this array contains messages
* that explain why the agent cannot be used or created.
*/
messages?: string[];
}
declare class AIService {
private client;
private baseUrl;
constructor(client: FetchClient);
createOrUpdateAgent(agentsDef: ClientAgentDefinition): Promise<void>;
/**
* Check if an agent exists.
* @param name Agent name
* @returns Agent health check response.
*/
getAgentHealth(name: string): Promise<AgentHealthCheckResponse>;
/**
* Send a text message to the agent.
* @param name Agent name
* @param messages Messages to send
* @param variables Variables to include
* @returns Text response from the agent.
*/
text(name: string, messages: AIMessage[], variables: {
[key: string]: any;
}): Promise<string>;
/**
* Stream a text message to the agent.
* @param agentName Agent name
* @param messages Messages to send
* @param variables Variables to include
* @param abortController An AbortController to cancel the request.
* @returns An observable that emits partial AIMessage objects as they are received. The observable can be cancelled using the provided AbortController.
* The observable will emit an error if the request fails or is aborted.
* The observable will complete when the stream is finished.
*
* The messages sent to the agent can include special options:
* - `hiddenContent`: If set, this content will be sent to the agent instead of the `content` field.
* - `skipToLLM`: If set to true, this message will be skipped when sending to the agent.
*
* Example usage:
* ```typescript
* const abortController = new AbortController();
* const messages: AIMessage[] = [
* { role: 'user', content: 'Hello' },
* { role: 'assistant', content: 'Hi there!' },
* { role: 'user', content: 'Tell me a joke.', options: { hiddenContent: 'Tell me a joke about cats.' } }
* ];
* const observable = aiService.stream$('my-agent', messages, {}, abortController);
* const subscription = observable.subscribe({
* next: (message) => console.log('Received message part:', message),
* error: (err) => console.error('Error:', err),
* complete: () => console.log('Stream complete')
* });
*
* // To cancel the request:
* abortController.abort();
* subscription.unsubscribe();
* ```
*/
stream$(agentName: string, messages: AIMessage[], variables: {
[key: string]: any;
}, abortController: AbortController): Promise<Observable<AIMessage>>;
private parseMessages;
private processLine;
static ɵfac: i0.ɵɵFactoryDeclaration<AIService, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<AIService>;
}
export { AIService, DataStreamType };
export type { AIMessage, AIMessageOptions, AIMessageStreamSteps, AgentHealthCheckResponse, AgentStep, ChatConfig, ClientAgentDefinition, Tool, ToolCall, ToolResult };
//# sourceMappingURL=index.d.ts.map