{"version":3,"file":"c8y-ngx-components-ai.mjs","sources":["../../ai/ai.model.ts","../../ai/ai.service.ts","../../ai/c8y-ngx-components-ai.ts"],"sourcesContent":["import { Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface AIMessageStreamSteps extends AIMessage {\n  componentSteps$?: Observable<{ content: Type<any> | string; origin: AgentStep }[]>;\n}\n\nexport interface AIMessage {\n  role: 'user' | 'assistant';\n  content: string;\n  options?: AIMessageOptions;\n  steps?: Array<AgentStep>;\n  finishReason?: 'stop' | 'error' | 'tool_use';\n  timestamp?: string;\n}\n\nexport interface AIMessageOptions {\n  skipToLLM?: boolean;\n  hiddenContent?: string;\n  variables?: { [key: string]: any };\n}\n\nexport enum DataStreamType {\n  TEXT_DELTA = 'text-delta',\n  TOOL_CALL = 'tool-call',\n  TOOL_INPUT_START = 'tool-input-start',\n  TOOL_INPUT_DELTA = 'tool-input-delta',\n  TOOL_CALL_STREAMING = 'tool-call-streaming',\n  TOOL_CALL_DELTA = 'tool-call-delta',\n  TOOL_RESULT = 'tool-result',\n  REASONING = 'reasoning',\n  REASONING_DELTA = 'reasoning-delta',\n  REDACTED_REASONING = 'redacted-reasoning',\n  REASONING_SIGNATURE = 'reasoning-signature',\n  FINISH_REASONING = 'finish-reasoning',\n  FINISH = 'finish',\n  FINISH_STEP = 'finish-step',\n  ERROR = 'error',\n  DATA = 'data',\n  MESSAGE_ANNOTATIONS = 'message-annotations',\n  SOURCE = 'source',\n  FILE = 'file',\n  STEP_START = 'start-step',\n  STEP_FINISH = 'finish-step',\n  STEP_START_V4 = 'step-start',\n  STEP_FINISH_V4 = 'step-finish'\n}\n\nexport type AgentStep = {\n  type: 'text' | 'reasoning' | string;\n  text: string;\n  reasoning?: string;\n  textDelta?: string;\n  toolCalls?: Array<ToolCall>;\n  toolResults?: Array<ToolResult>;\n  aborted?: boolean;\n};\n\nexport interface Tool {\n  toolName: string;\n  toolCallId: string;\n  type: 'tool-call' | 'tool-result';\n}\n\nexport interface ToolCall extends Tool {\n  arguments: { [key: string]: any };\n}\n\nexport interface ToolResult extends Tool {\n  input: any;\n  output: {\n    content: {\n      text: string;\n      type: string;\n    }[];\n  };\n}\n\nexport interface ClientAgentDefinition {\n  /**\n   * If set to true, the agent will use the test endpoint to generate responses.\n   * This is useful for development and testing purposes, but requires agent admin\n   * privileges.\n   */\n  snapshot: boolean;\n  /**\n   * The label of the agent that is shown to the user.\n   */\n  label: string;\n  /**\n   * The definition of the agent to use\n   */\n  definition: AgentDefinition;\n}\n\nexport interface AgentDefinition {\n  name: string;\n  type: 'object' | 'text';\n  agent: {\n    system: string;\n    [key: string]: any;\n  };\n  mcp: Array<{ serverName: string; tools: string[] }>;\n}\n\nexport interface ChatConfig {\n  title: string;\n  headline: string;\n  welcomeText: string;\n  placeholder: string;\n  placeholderAfterFirstMessage: string;\n  sendButtonText: string;\n  cancelButtonText: string;\n  disclaimerText: string;\n  userInterfaceIcons: { send: string; cancel: string };\n}\n\nexport interface AgentHealthCheckResponse {\n  /**\n   * Indicates if the agent exists and can be used.\n   * If false, the agent was not found.\n   */\n  exists: boolean;\n  /**\n   * Indicates if the user can create the agent, and if a global provider is configured.\n   */\n  canCreate: boolean;\n  /**\n   * Indicates if the provider is configured.\n   * If false, the agent cannot be created as the provider is not configured.\n   */\n  isProviderConfigured: boolean;\n  /**\n   * If canCreate or exist is false, this array contains messages\n   * that explain why the agent cannot be used or created.\n   */\n  messages?: string[];\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FetchClient } from '@c8y/client';\nimport { Observable } from 'rxjs';\nimport {\n  AgentDefinition,\n  AgentHealthCheckResponse,\n  AIMessage,\n  ClientAgentDefinition,\n  DataStreamType\n} from './ai.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AIService {\n  private baseUrl = '/service/ai';\n\n  private client = inject(FetchClient);\n\n  /**\n   * Creates or updates an agent.\n   * @param def The agent definition\n   */\n  async createOrUpdateAgent(def: AgentDefinition): Promise<void> {\n    const health = await this.getAgentHealth(def.name);\n    let resource = `${this.baseUrl}/agent/${def.type}`;\n    let method = 'POST';\n    if (health.exists) {\n      resource = `${this.baseUrl}/agent/${def.type}/${def.name}`;\n      method = 'PUT';\n    }\n    const response = await this.client.fetch(resource, {\n      body: JSON.stringify(def),\n      method,\n      headers: { 'Content-Type': 'application/json' }\n    });\n\n    if (!response.ok) {\n      throw new Error(`Failed to create agent: ${response.statusText}`);\n    }\n  }\n\n  /**\n   * Check if an agent exists.\n   * @param name Agent name (optional)\n   * @param fromApp The app context path to check for an agent. This can be used, if the agent should get distributed by the plugin (optional).\n   * @returns Agent health check response.\n   */\n  async getAgentHealth(name = '', fromApp?: string): Promise<AgentHealthCheckResponse> {\n    const response = await this.client.fetch(\n      `${this.baseUrl}/agent/test/${name || crypto.randomUUID()}${fromApp ? `?fromApp=${fromApp}` : ''}`,\n      {\n        method: 'GET',\n        headers: { 'Content-Type': 'application/json' }\n      }\n    );\n\n    if (!response.ok) {\n      return {\n        exists: false,\n        canCreate: false,\n        isProviderConfigured: false\n      };\n    }\n    const json = await response.json();\n    return json;\n  }\n\n  /**\n   * Send a text message to the agent.\n   * @param name Agent name\n   * @param messages Messages to send\n   * @param variables Variables to include\n   * @param fromApp The app context path to check for an agent. This can be used, if the agent should get distributed by the plugin (optional).\n   * @returns Text response from the agent.\n   */\n  async text(\n    name: string,\n    messages: AIMessage[],\n    variables: { [key: string]: any },\n    fromApp?: string\n  ): Promise<string> {\n    const parsedMessages = this.parseMessages(messages);\n\n    const data = this.client.fetch(\n      `${this.baseUrl}/agent/text/${name}${fromApp ? `?fromApp=${fromApp}` : ''}`,\n      {\n        body: JSON.stringify({ messages: parsedMessages, variables }),\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' }\n      }\n    );\n\n    const response = await data;\n    if (!response.ok) {\n      throw new Error(`Failed to talk with agent: ${response.statusText}`);\n    }\n    const text = await response.text();\n    return text;\n  }\n\n  /**\n   * Stream a text message to the agent.\n   * @param agent Agent name or an agent definition.\n   * @param messages Messages to send\n   * @param variables Variables to include\n   * @param abortController An AbortController to cancel the request.\n   * @param fromApp The app context path to check for an agent. This can be used, if the agent should get distributed by the plugin (optional).\n   * @returns An observable that emits partial AIMessage objects as they are received. The observable can be cancelled using the provided AbortController.\n   * The observable will emit an error if the request fails or is aborted.\n   * The observable will complete when the stream is finished.\n   *\n   * The messages sent to the agent can include special options:\n   * - `hiddenContent`: If set, this content will be sent to the agent instead of the `content` field.\n   * - `skipToLLM`: If set to true, this message will be skipped when sending to the agent.\n   *\n   * Example usage:\n   * ```typescript\n   * const abortController = new AbortController();\n   * const messages: AIMessage[] = [\n   *   { role: 'user', content: 'Hello' },\n   *   { role: 'assistant', content: 'Hi there!' },\n   *   { role: 'user', content: 'Tell me a joke.', options: { hiddenContent: 'Tell me a joke about cats.' } }\n   * ];\n   * const observable = aiService.stream$('my-agent', messages, {}, abortController);\n   * const subscription = observable.subscribe({\n   *   next: (message) => console.log('Received message part:', message),\n   *   error: (err) => console.error('Error:', err),\n   *   complete: () => console.log('Stream complete')\n   * });\n   *\n   * // To cancel the request:\n   * abortController.abort();\n   * subscription.unsubscribe();\n   * ```\n   */\n  async stream$(\n    agent: string | ClientAgentDefinition,\n    messages: AIMessage[],\n    variables: { [key: string]: any },\n    abortController: AbortController,\n    fromApp?: string\n  ): Promise<Observable<AIMessage>> {\n    const parsedMessages = this.parseMessages(messages);\n    const agentName = typeof agent === 'string' ? agent : agent.definition.name;\n    const useTest = typeof agent !== 'string' && agent.snapshot;\n    const baseUrl = useTest\n      ? `${this.baseUrl}/agent/test/text`\n      : `${this.baseUrl}/agent/text/${agentName}`;\n    let body = JSON.stringify({ messages: parsedMessages, variables });\n    if (useTest) {\n      const agentCopy = {\n        ...agent.definition\n      };\n      agentCopy.agent.messages = parsedMessages;\n      agentCopy.agent.variables = variables;\n      body = JSON.stringify(agentCopy);\n    }\n\n    const response = await this.client.fetch(\n      `${baseUrl}?fullResponse=true${fromApp ? `&fromApp=${fromApp}` : ''}`,\n      {\n        method: 'POST',\n        body,\n        headers: {\n          ...this.client.defaultHeaders,\n          'content-type': 'application/json',\n          accept: 'text/event-stream'\n        },\n        signal: abortController.signal\n      }\n    );\n\n    if (response.status > 300) {\n      const data = await response.json();\n      throw new Error(JSON.stringify(data, null, 2));\n    }\n\n    const stream = response.body;\n    const decoder = new TextDecoder();\n\n    return new Observable<AIMessage>(observer => {\n      if (!stream) {\n        observer.error('No response body');\n        throw 'No response body';\n      }\n\n      const reader = stream.getReader();\n      const message: AIMessage = {\n        role: 'assistant',\n        content: '',\n        steps: []\n      };\n\n      const abortHandler = () => {\n        reader.cancel();\n        observer.error(new DOMException('Aborted', 'AbortError'));\n      };\n\n      abortController.signal.addEventListener('abort', abortHandler);\n\n      let buffer = '';\n\n      const read = () => {\n        reader.read().then(({ done, value }) => {\n          if (done) {\n            if (buffer.trim()) this.processLine(buffer, observer, message); // process any remaining data\n            observer.complete();\n            return;\n          }\n          buffer += decoder.decode(value, { stream: true });\n          const lines = buffer.split('\\n\\n');\n          buffer = lines.pop() || '';\n          for (const line of lines) {\n            if (line.trim()) this.processLine(line, observer, message);\n          }\n          read();\n        });\n      };\n\n      read();\n      return () => {\n        abortController.signal.removeEventListener('abort', abortHandler);\n        reader.cancel();\n      };\n    });\n  }\n\n  private parseMessages(messages: AIMessage[]) {\n    return messages\n      .filter(message => !message.options?.skipToLLM)\n      .map(message => {\n        if (message.options?.hiddenContent) {\n          return {\n            role: message.role,\n            content: message.options.hiddenContent\n          };\n        }\n        return {\n          role: message.role,\n          content: message.content\n        };\n      });\n  }\n\n  private processLine(line: string, observer: any, message: AIMessage) {\n    if (!line.trim()) {\n      return;\n    }\n    const lastStep = message.steps?.[message.steps.length - 1] || {\n      type: 'text',\n      toolCalls: [],\n      toolResults: [],\n      text: ''\n    };\n    try {\n      let data: any = {};\n      let type = '';\n      try {\n        data = JSON.parse(line.replace('data: ', ''));\n        type = data.type;\n      } catch (e) {\n        console.error('Error parsing line', line, e);\n        return;\n      }\n\n      switch (type) {\n        case DataStreamType.STEP_START || DataStreamType.STEP_START_V4:\n          message.steps = message.steps || [];\n          message.steps.push({\n            type: 'text',\n            toolCalls: [],\n            toolResults: [],\n            text: ''\n          });\n          return;\n\n        case DataStreamType.REASONING:\n          if (lastStep!.reasoning === undefined) {\n            lastStep!.reasoning = '';\n          }\n          lastStep!.reasoning += data.text || data.textDelta;\n          observer.next(message);\n          return;\n\n        case DataStreamType.TEXT_DELTA:\n          lastStep!.text += data.text || data.textDelta;\n          message.content += data.text || data.textDelta;\n          observer.next(message);\n          return;\n\n        case DataStreamType.TOOL_INPUT_START:\n          lastStep!.toolCalls = [data];\n          observer.next(message);\n          return;\n\n        case DataStreamType.TOOL_CALL:\n          lastStep!.toolCalls = [data];\n          observer.next(message);\n          return;\n\n        case DataStreamType.TOOL_RESULT:\n          lastStep!.toolResults = [data];\n          observer.next(message);\n          return;\n\n        case DataStreamType.FINISH:\n          message.finishReason = data.finishReason;\n          observer.next(message);\n          observer.complete();\n          return;\n\n        case DataStreamType.ERROR:\n          message.finishReason = 'error';\n          const errorMessage = `<div\n              class=\"alert alert-danger\"\n              role=\"alert\"\n            >\n              <strong>Error</strong>\n              ${data.message || 'An unknown error occurred'}\n            </div>`;\n          message.content += errorMessage;\n          lastStep!.text += errorMessage;\n          observer.next(message);\n          observer.error(data);\n          observer.complete();\n          return;\n      }\n    } catch (e) {\n      observer.error(e);\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}