@sftech/ng-orchestrator 0.0.17 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/fesm2022/sftech-ng-orchestrator-agent-rag-upload.component-iqEbrzkb.mjs +189 -0
  2. package/fesm2022/sftech-ng-orchestrator-agent-rag-upload.component-iqEbrzkb.mjs.map +1 -0
  3. package/fesm2022/{sftech-ng-orchestrator-agents.routes-B9GSWOIz.mjs → sftech-ng-orchestrator-agents.routes-CVcxzNAE.mjs} +70 -13
  4. package/fesm2022/sftech-ng-orchestrator-agents.routes-CVcxzNAE.mjs.map +1 -0
  5. package/fesm2022/sftech-ng-orchestrator-chats.routes-BDe9JC4m.mjs +625 -0
  6. package/fesm2022/sftech-ng-orchestrator-chats.routes-BDe9JC4m.mjs.map +1 -0
  7. package/fesm2022/{sftech-ng-orchestrator-prompt-display.component-Cd6Ff3KE.mjs → sftech-ng-orchestrator-prompt-display.component-BkSLQgGU.mjs} +2 -2
  8. package/fesm2022/{sftech-ng-orchestrator-prompt-display.component-Cd6Ff3KE.mjs.map → sftech-ng-orchestrator-prompt-display.component-BkSLQgGU.mjs.map} +1 -1
  9. package/fesm2022/{sftech-ng-orchestrator-prompts.routes-DQZ_Hmjs.mjs → sftech-ng-orchestrator-prompts.routes-DeR6lppF.mjs} +2 -2
  10. package/fesm2022/{sftech-ng-orchestrator-prompts.routes-DQZ_Hmjs.mjs.map → sftech-ng-orchestrator-prompts.routes-DeR6lppF.mjs.map} +1 -1
  11. package/fesm2022/{sftech-ng-orchestrator-sftech-ng-orchestrator-CJMmRHC-.mjs → sftech-ng-orchestrator-sftech-ng-orchestrator-D9fLhC24.mjs} +66 -7
  12. package/fesm2022/sftech-ng-orchestrator-sftech-ng-orchestrator-D9fLhC24.mjs.map +1 -0
  13. package/fesm2022/sftech-ng-orchestrator.mjs +1 -1
  14. package/lib/ng-orchestrator/admin/agents/components/agent/agent-rag-upload/agent-rag-upload.component.d.ts +21 -0
  15. package/lib/ng-orchestrator/admin/agents/components/agent/agents-list/agents-list.component.d.ts +2 -0
  16. package/lib/ng-orchestrator/chats/agent-chat/agent-chat-message-human-input/agent-chat-message-human-input.component.d.ts +6 -5
  17. package/lib/ng-orchestrator/chats/agent-chat/agent-chat-message-human-input-initial/agent-chat-message-human-input-initial.component.d.ts +20 -0
  18. package/lib/ng-orchestrator/chats/agent-chat/agent-chat.component.d.ts +7 -1
  19. package/lib/ng-orchestrator/core/configuration/orchestrator-config.interface.d.ts +2 -0
  20. package/lib/ng-orchestrator/core/dtos/agent-create-request.dto.d.ts +2 -0
  21. package/lib/ng-orchestrator/core/dtos/agent-response.dto.d.ts +2 -0
  22. package/lib/ng-orchestrator/core/dtos/agent-update-request.dto.d.ts +2 -0
  23. package/lib/ng-orchestrator/core/dtos/rag-ingest-config.dto.d.ts +4 -0
  24. package/lib/ng-orchestrator/core/models/agent.model.d.ts +2 -0
  25. package/lib/ng-orchestrator/core/service/orchestrator.service.d.ts +3 -0
  26. package/lib/ng-orchestrator/core/validators/rag.validator.d.ts +2 -0
  27. package/package.json +1 -1
  28. package/fesm2022/sftech-ng-orchestrator-agent.service-DPJMw8a4.mjs +0 -106
  29. package/fesm2022/sftech-ng-orchestrator-agent.service-DPJMw8a4.mjs.map +0 -1
  30. package/fesm2022/sftech-ng-orchestrator-agents.routes-B9GSWOIz.mjs.map +0 -1
  31. package/fesm2022/sftech-ng-orchestrator-chats.routes-BLGhykMM.mjs +0 -556
  32. package/fesm2022/sftech-ng-orchestrator-chats.routes-BLGhykMM.mjs.map +0 -1
  33. package/fesm2022/sftech-ng-orchestrator-sftech-ng-orchestrator-CJMmRHC-.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sftech-ng-orchestrator-sftech-ng-orchestrator-D9fLhC24.mjs","sources":["../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/configuration/orchestrator-config.mapper.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/configuration/orchestrator-configuration.token.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/enums/agent-run-status.enum.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/models/chat-message.model.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/models/chat.model.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/models/agent-run.model.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/models/mcp-tool.model.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/service/orchestrator.service.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/orchestrator.module.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/orchestrator.routes.ts","../../../../libs/ng-orchestrator/src/sftech-ng-orchestrator.ts"],"sourcesContent":["import { IAppConfig } from '@sftech/ng-shared';\r\nimport { IOrchestratorConfig } from './orchestrator-config.interface';\r\n\r\n// biome-ignore lint/complexity/noStaticOnlyClass: <explanation>\r\nexport class OrchestratorConfigMapper {\r\n public static map(config: IAppConfig): IOrchestratorConfig {\r\n return {\r\n orchestratorUrl: (config['ORCHESTRATOR_URL'] as string) ?? `${window.location.protocol}//${window.location.hostname}:${window.location.port}/api/orchestrator`,\r\n orchestratorDbUrl: (config['ORCHESTRATOR_DB_URL'] as string) ?? `${window.location.protocol}//${window.location.hostname}:${window.location.port}/api/orchestrator-db`,\r\n defaultConnectorUrl: config['DEFAULT_CONNECTOR_URL'] as string,\r\n defaultAnswerSpecification: config['DEFAULT_ANSWER_SPECIFICATION'] as string,\r\n defaultLlmProvider: config['DEFAULT_LLM_PROVIDER'] as string,\r\n defaultLlmModel: config['DEFAULT_LLM_MODEL'] as string,\r\n defaultLlmTemperature: config['DEFAULT_LLM_TEMPERATURE'] as number,\r\n defaultLlmTimeout: config['DEFAULT_LLM_TIMEOUT'] as number,\r\n defaultLlmRetries: config['DEFAULT_LLM_RETRIES'] as number,\r\n defaultLlmMaxTokens: config['DEFAULT_LLM_MAX_TOKENS'] as number,\r\n defaultRagModel: config['DEFAULT_RAG_PROVIDER'] as string,\r\n defaultRagProvider: config['DEFAULT_RAG_MODEL'] as string,\r\n };\r\n }\r\n}\r\n","import {InjectionToken} from \"@angular/core\";\r\nimport {IOrchestratorConfig} from \"./orchestrator-config.interface\";\r\n\r\nexport const ORCHESTRATOR_CONFIGURATION = new InjectionToken<IOrchestratorConfig>('ORCHESTRATOR_CONFIGURATION');","export enum EAgentRunStatus {\r\n INIT = 'init',\r\n PRERUNNING = 'pre_running',\r\n RUNNING = 'running',\r\n POSTRUNNING = 'post_running',\r\n CLARIFICATION_NEEDED = 'clarification_needed',\r\n COMPLETED = 'completed',\r\n FAILED = 'failed',\r\n}\r\n","import { BaseDbModel } from '@sftech/ng-shared';\r\nimport { IChatMessageResponseDto } from '../dtos/chat-message-response.dto';\r\nimport { Chat } from './chat.model';\r\n\r\nexport class ChatMessage extends BaseDbModel {\r\n public message!: string;\r\n\r\n public messageType!: string;\r\n\r\n public chatId!: number;\r\n\r\n public chat?: Chat;\r\n\r\n public override fromDto(dto: IChatMessageResponseDto): ChatMessage {\r\n const obj = new ChatMessage();\r\n obj.id = dto.id!;\r\n obj.createdAt = dto.createdAt!;\r\n\r\n obj.message = dto.message;\r\n obj.messageType = dto.messageType;\r\n obj.chatId = dto.chatId;\r\n return obj;\r\n }\r\n}\r\n","import { BaseDbModel } from '@sftech/ng-shared';\r\nimport { IChatMessageResponseDto } from '../dtos/chat-message-response.dto';\r\nimport { IChatResponseDto } from '../dtos/chat-response.dto';\r\nimport { ChatMessage } from './chat-message.model';\r\n\r\nexport class Chat extends BaseDbModel {\r\n public messages: ChatMessage[] = [];\r\n\r\n public agentId!: number;\r\n\r\n public override fromDto(dto: IChatResponseDto): Chat {\r\n const obj = new Chat();\r\n obj.id = dto.id!;\r\n obj.createdAt = dto.createdAt!;\r\n obj.agentId = dto.agentId;\r\n\r\n obj.messages = dto.messages.map((dto: IChatMessageResponseDto) => new ChatMessage().fromDto(dto));\r\n return obj;\r\n }\r\n}\r\n","import { BaseDbModel, EFilterTypes, IBaseDbResponseDto } from '@sftech/ng-shared';\r\nimport { IAgentResponseDto } from '../dtos/agent-response.dto';\r\nimport { IAgentRunResponseDto } from '../dtos/agent-run-response.dto';\r\nimport { IPromptHistoryResponseDto } from '../dtos/prompt-history-response.dto';\r\nimport { EAgentRunStatus } from '../enums/agent-run-status.enum';\r\nimport { Agent } from './agent.model';\r\nimport { Chat } from './chat.model';\r\nimport { PromptHistory } from './prompt-history.model';\r\nimport { Prompt } from './prompt.model';\r\n\r\nexport class AgentRun extends BaseDbModel {\r\n public status!: EAgentRunStatus;\r\n\r\n public step!: string;\r\n\r\n public startedAt?: Date;\r\n\r\n public endedAt?: Date;\r\n\r\n public agentId?: number;\r\n\r\n public agent?: Agent;\r\n\r\n public chatId?: number;\r\n\r\n public chat?: Chat;\r\n\r\n public override propertiesToShow = ['status', 'step', 'startedAt', 'endedAt'];\r\n\r\n public override propertyUINames = new Map<string, string>([\r\n ['status', 'Status'],\r\n ['step', 'Schritt'],\r\n ['startedAt', 'Start'],\r\n ['endedAt', 'Ende'],\r\n ]);\r\n\r\n public override propertyFilterType = new Map<string, EFilterTypes>([\r\n ['status', EFilterTypes.STRING],\r\n ['step', EFilterTypes.STRING],\r\n ['startedAt', EFilterTypes.DATE],\r\n ['endedAt', EFilterTypes.DATE],\r\n ]);\r\n\r\n public override fromDto(dto: IAgentRunResponseDto): AgentRun {\r\n const model = new AgentRun();\r\n model.id = dto.id;\r\n model.createdAt = new Date(dto.createdAt);\r\n model.agentId = dto.agentId;\r\n model.chatId = dto.chatId;\r\n model.status = dto.status;\r\n model.startedAt = dto.startedAt;\r\n model.endedAt = dto.endedAt;\r\n model.step = dto.step;\r\n\r\n if (dto.chat) {\r\n model.chat = new Chat().fromDto(dto.chat);\r\n }\r\n return model;\r\n }\r\n}\r\n","import {IMcpToolResponseDto} from \"../dtos/mcp-tool-response.dto\";\r\n\r\nexport class McpTool {\r\n name!: string;\r\n identifier!: string;\r\n desceription!: string;\r\n\r\n public static fromDto(dto: IMcpToolResponseDto): McpTool {\r\n const tool = new McpTool();\r\n tool.name = dto.name;\r\n tool.identifier = dto.identifier;\r\n tool.desceription = dto.description;\r\n return tool;\r\n }\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable, NgZone } from '@angular/core';\r\nimport { IApiResponse, MappedApiError, MappedApiResponseRaw } from '@sftech/ng-shared';\r\nimport { Observable, catchError, map, of } from 'rxjs';\r\nimport { IOrchestratorConfig } from '../configuration/orchestrator-config.interface';\r\nimport { ORCHESTRATOR_CONFIGURATION } from '../configuration/orchestrator-configuration.token';\r\nimport { IAgentRunResponseDto } from '../dtos/agent-run-response.dto';\r\nimport { IMcpToolResponseDto } from '../dtos/mcp-tool-response.dto';\r\nimport { IOrchestratorRunDto } from '../dtos/orchestrator-run.dto';\r\nimport { IRagInfoDto } from '../dtos/rag-ingest-config.dto';\r\nimport { EAgentRunStatus } from '../enums/agent-run-status.enum';\r\nimport { AgentRun } from '../models/agent-run.model';\r\nimport { McpTool } from '../models/mcp-tool.model';\r\n\r\n@Injectable()\r\nexport class OrchestratorService {\r\n public constructor(\r\n private readonly http: HttpClient,\r\n private readonly zone: NgZone,\r\n @Inject(ORCHESTRATOR_CONFIGURATION) private readonly config: IOrchestratorConfig,\r\n ) {}\r\n\r\n public runAgent(runConfig: IOrchestratorRunDto): Observable<MappedApiError | number> {\r\n const url = `${this.config.orchestratorUrl}/generic/run`;\r\n return this.http.post<IApiResponse<number>>(url, runConfig).pipe(\r\n map((res) => {\r\n return res.data as number;\r\n }),\r\n catchError((err) => {\r\n const error = new MappedApiError();\r\n error.messages = err.messages ? err.messages : [];\r\n return of(new MappedApiError());\r\n }),\r\n );\r\n }\r\n\r\n public observeAgentRun(agentRunId: number): Observable<MappedApiError | AgentRun> {\r\n return new Observable<AgentRun>((observer) => {\r\n const eventSource = new EventSource(`${this.config.orchestratorUrl}/generic/stream/${agentRunId}`);\r\n\r\n eventSource.onmessage = (event) => {\r\n this.zone.run(() => {\r\n const agentRun = new AgentRun();\r\n const result = agentRun.fromDto(JSON.parse(event.data) as IAgentRunResponseDto);\r\n observer.next(result);\r\n\r\n // Close EventSource when agent run is completed\r\n if (result.status === EAgentRunStatus.COMPLETED || result.status === EAgentRunStatus.FAILED) {\r\n eventSource.close();\r\n observer.complete();\r\n }\r\n });\r\n };\r\n\r\n eventSource.onerror = (error) => {\r\n this.zone.run(() => {\r\n eventSource.close();\r\n observer.error(error);\r\n });\r\n };\r\n\r\n // Cleanup, wenn unsubscribed wird\r\n return () => eventSource.close();\r\n });\r\n }\r\n\r\n public getTools(): Observable<MappedApiResponseRaw<McpTool[]>> {\r\n const url = `${this.config.orchestratorUrl}/tools`;\r\n return this.http.get<IApiResponse<IMcpToolResponseDto[]>>(url).pipe(\r\n map((res) => {\r\n const apiResponse = new MappedApiResponseRaw<McpTool[]>();\r\n apiResponse.status = res.status;\r\n apiResponse.messages = res.messages ? res.messages : [];\r\n apiResponse.isError = false;\r\n apiResponse.data = (res.data as IMcpToolResponseDto[]).map((t) => McpTool.fromDto(t));\r\n return apiResponse;\r\n }),\r\n catchError((err) => {\r\n console.error('Error fetching tools:', err);\r\n const error = new MappedApiError();\r\n error.messages = err.messages ? err.messages : [];\r\n error.status = err.status ? err.status : 500;\r\n error.isError = true;\r\n return of(error);\r\n }),\r\n );\r\n }\r\n\r\n public storeRagDocuments(files: File[], ragInfo: IRagInfoDto): Observable<MappedApiError | boolean> {\r\n const url = `${this.config.orchestratorUrl}/rag/store`;\r\n const formData = new FormData();\r\n\r\n // Add all files to FormData\r\n files.forEach((file) => {\r\n formData.append('files', file);\r\n });\r\n\r\n // Add ragInfo as JSON string or separate fields\r\n formData.append('agentIdentifier', ragInfo.agentIdentifier);\r\n if (ragInfo.chatId) {\r\n formData.append('chatId', ragInfo.chatId.toString());\r\n }\r\n\r\n return this.http.post<IApiResponse<boolean>>(url, formData).pipe(\r\n map((res) => {\r\n console.log(res);\r\n\r\n return res.data as boolean;\r\n }),\r\n catchError((err) => {\r\n console.error('Error storing RAG documents:', err);\r\n const error = new MappedApiError();\r\n error.messages = err.messages ? err.messages : [];\r\n error.status = err.status ? err.status : 500;\r\n error.isError = true;\r\n return of(error);\r\n }),\r\n );\r\n }\r\n\r\n public chatAgent(agentRunId: number, message: string): Observable<MappedApiError | number> {\r\n const url = `${this.config.orchestratorUrl}/generic/chat/${agentRunId}`;\r\n return this.http.post<IApiResponse<number>>(url, { message }).pipe(\r\n map((res) => {\r\n return res.data as number;\r\n }),\r\n catchError((err) => {\r\n console.error('Error sending chat message:', err);\r\n const error = new MappedApiError();\r\n error.messages = err.messages ? err.messages : [];\r\n error.status = err.status ? err.status : 500;\r\n error.isError = true;\r\n return of(error);\r\n }),\r\n );\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { IAppConfig } from '@sftech/ng-shared';\r\nimport { OrchestratorConfigMapper } from './core/configuration/orchestrator-config.mapper';\r\nimport { ORCHESTRATOR_CONFIGURATION } from './core/configuration/orchestrator-configuration.token';\r\n\r\nimport { MarkdownModule } from 'ngx-markdown';\r\nimport { OrchestratorService } from './core/service/orchestrator.service';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [CommonModule, MarkdownModule],\r\n})\r\n// biome-ignore lint/complexity/noStaticOnlyClass: <explanation>\r\nexport class OrchestratorModule {\r\n public static forRoot(config: IAppConfig): ModuleWithProviders<OrchestratorModule> {\r\n return {\r\n ngModule: OrchestratorModule,\r\n providers: [\r\n {\r\n provide: ORCHESTRATOR_CONFIGURATION,\r\n useValue: OrchestratorConfigMapper.map(config),\r\n },\r\n OrchestratorService,\r\n ],\r\n };\r\n }\r\n}\r\n","import { Route } from '@angular/router';\r\nimport { AdminGuard } from '@sftech/ng-auth';\r\n\r\nexport const orchestratorRoutes: Route[] = [\r\n {\r\n path: 'chats',\r\n loadChildren: () => import('./chats/chats.routes').then((m) => m.chatsRoutes),\r\n },\r\n {\r\n path: 'admin/prompts',\r\n loadChildren: () => import('./admin/prompts/prompts.routes').then((m) => m.promptsRoutes),\r\n canActivate: [AdminGuard],\r\n },\r\n {\r\n path: 'admin/agents',\r\n loadChildren: () => import('./admin/agents/agents.routes').then((m) => m.agentsRoutes),\r\n canActivate: [AdminGuard],\r\n },\r\n];\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { c as OrchestratorModule, o as orchestratorRoutes } from './sftech-ng-orchestrator-sftech-ng-orchestrator-CJMmRHC-.mjs';
1
+ export { c as OrchestratorModule, o as orchestratorRoutes } from './sftech-ng-orchestrator-sftech-ng-orchestrator-D9fLhC24.mjs';
2
2
  //# sourceMappingURL=sftech-ng-orchestrator.mjs.map
@@ -0,0 +1,21 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { BaseDialogComponent } from '@sftech/ng-shared';
3
+ import { FileRemoveEvent, FileSelectEvent } from 'primeng/fileupload';
4
+ import { Agent } from '../../../../../core/models/agent.model';
5
+ import * as i0 from "@angular/core";
6
+ export declare class AgentRagUploadComponent extends BaseDialogComponent implements OnInit {
7
+ agentId: import("@angular/core").InputSignal<number | undefined>;
8
+ chatId: import("@angular/core").InputSignal<number | undefined>;
9
+ uploadedFiles: import("@angular/core").WritableSignal<File[]>;
10
+ agent: import("@angular/core").WritableSignal<Agent | undefined>;
11
+ isUploading: import("@angular/core").WritableSignal<boolean>;
12
+ uploadError: import("@angular/core").WritableSignal<string | undefined>;
13
+ private agentService;
14
+ private orchestratorService;
15
+ ngOnInit(): void;
16
+ onFileSelect(event: FileSelectEvent): void;
17
+ onFileRemove(event: FileRemoveEvent): void;
18
+ uploadFiles(): void;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<AgentRagUploadComponent, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<AgentRagUploadComponent, "sftech-agent-rag-upload", never, { "agentId": { "alias": "agentId"; "required": false; "isSignal": true; }; "chatId": { "alias": "chatId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
21
+ }
@@ -10,8 +10,10 @@ export declare class AgentsListComponent extends BaseListComponent<Agent, IAgent
10
10
  protected _route: string;
11
11
  protected _modalComponent: typeof AgentDisplayComponent;
12
12
  protected detailModalHeaderText: string;
13
+ private dialogService;
13
14
  iconProvider: typeof IconProvider;
14
15
  constructor();
16
+ openRagUploadModal(agentId: number, event: Event): void;
15
17
  static ɵfac: i0.ɵɵFactoryDeclaration<AgentsListComponent, never>;
16
18
  static ɵcmp: i0.ɵɵComponentDeclaration<AgentsListComponent, "sftech-prompts-list", never, {}, {}, never, never, true, never>;
17
19
  }
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from '@angular/core';
2
- import { FormGroup } from '@angular/forms';
2
+ import { FormControl, FormGroup } from '@angular/forms';
3
3
  import { AgentRunIconTextDataprovider } from 'libs/ng-orchestrator/src/lib/ng-orchestrator/chats/core/dataprovider/agent-run-icon-text.dataprovider';
4
4
  import { MessageService } from 'primeng/api';
5
5
  import { Agent } from '../../../core/models/agent.model';
@@ -7,14 +7,15 @@ import { OrchestratorService } from '../../../core/service/orchestrator.service'
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class AgentChatMessageHumanInputComponent {
9
9
  agent: import("@angular/core").InputSignal<Agent | undefined>;
10
+ agentRunId: import("@angular/core").InputSignal<number | undefined>;
10
11
  agentRunIdReceived: EventEmitter<number>;
11
12
  messageService: MessageService;
12
13
  orchestratorService: OrchestratorService;
13
- form: FormGroup<{}>;
14
- private _agentChanged$;
14
+ form: FormGroup<{
15
+ message: FormControl<string | null>;
16
+ }>;
15
17
  protected readonly iconTextMapper: typeof AgentRunIconTextDataprovider;
16
18
  run(): void;
17
- getInputFormControlNames(): string[];
18
19
  static ɵfac: i0.ɵɵFactoryDeclaration<AgentChatMessageHumanInputComponent, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<AgentChatMessageHumanInputComponent, "sftech-agent-chat-message-human-input", never, { "agent": { "alias": "agent"; "required": false; "isSignal": true; }; }, { "agentRunIdReceived": "agentRunIdReceived"; }, never, never, true, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<AgentChatMessageHumanInputComponent, "sftech-agent-chat-message-human-input", never, { "agent": { "alias": "agent"; "required": false; "isSignal": true; }; "agentRunId": { "alias": "agentRunId"; "required": false; "isSignal": true; }; }, { "agentRunIdReceived": "agentRunIdReceived"; }, never, never, true, never>;
20
21
  }
@@ -0,0 +1,20 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { AgentRunIconTextDataprovider } from 'libs/ng-orchestrator/src/lib/ng-orchestrator/chats/core/dataprovider/agent-run-icon-text.dataprovider';
4
+ import { MessageService } from 'primeng/api';
5
+ import { Agent } from '../../../core/models/agent.model';
6
+ import { OrchestratorService } from '../../../core/service/orchestrator.service';
7
+ import * as i0 from "@angular/core";
8
+ export declare class AgentChatMessageHumanInputInitialComponent {
9
+ agent: import("@angular/core").InputSignal<Agent | undefined>;
10
+ agentRunIdReceived: EventEmitter<number>;
11
+ messageService: MessageService;
12
+ orchestratorService: OrchestratorService;
13
+ form: FormGroup<{}>;
14
+ private _agentChanged$;
15
+ protected readonly iconTextMapper: typeof AgentRunIconTextDataprovider;
16
+ run(): void;
17
+ getInputFormControlNames(): string[];
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<AgentChatMessageHumanInputInitialComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<AgentChatMessageHumanInputInitialComponent, "sftech-agent-chat-message-human-input-initial", never, { "agent": { "alias": "agent"; "required": false; "isSignal": true; }; }, { "agentRunIdReceived": "agentRunIdReceived"; }, never, never, true, never>;
20
+ }
@@ -1,4 +1,4 @@
1
- import { OnDestroy, OnInit } from '@angular/core';
1
+ import { ElementRef, OnDestroy, OnInit } from '@angular/core';
2
2
  import { ActivatedRoute, Router } from '@angular/router';
3
3
  import { IconProvider } from '@sftech/ng-shared';
4
4
  import { MessageService } from 'primeng/api';
@@ -20,15 +20,18 @@ export declare class AgentChatComponent implements OnInit, OnDestroy {
20
20
  protected readonly chatService: ChatService;
21
21
  protected readonly orchestratorService: OrchestratorService;
22
22
  protected readonly messageService: MessageService;
23
+ private readonly dialogService;
23
24
  protected agent: Agent;
24
25
  protected readonly agentRuns: import("@angular/core").WritableSignal<AgentRun[] | undefined>;
25
26
  protected selectedAgentRun: import("@angular/core").WritableSignal<AgentRun | undefined>;
26
27
  protected selectedAgent: import("@angular/core").WritableSignal<Agent | undefined>;
28
+ chatContainer?: ElementRef;
27
29
  iconProvider: typeof IconProvider;
28
30
  iconTextMapper: typeof AgentRunIconTextDataprovider;
29
31
  agentRunStatus: typeof EAgentRunStatus;
30
32
  subscriptions: Subscription[];
31
33
  protected selectedAgentRunChanged$: import("@angular/core").EffectRef;
34
+ protected chatMessagesChanged$: import("@angular/core").EffectRef;
32
35
  loading: import("@angular/core").Signal<boolean>;
33
36
  ngOnInit(): void;
34
37
  ngOnDestroy(): void;
@@ -39,6 +42,9 @@ export declare class AgentChatComponent implements OnInit, OnDestroy {
39
42
  private _loadChat;
40
43
  private _setRelativeUrl;
41
44
  private _mapUpdateOnAgentRun;
45
+ openRagUploadModal(): void;
46
+ private startScrollingStrategy;
47
+ private scrollToBottom;
42
48
  static ɵfac: i0.ɵɵFactoryDeclaration<AgentChatComponent, never>;
43
49
  static ɵcmp: i0.ɵɵComponentDeclaration<AgentChatComponent, "sftech-agent-chat", never, {}, {}, never, never, true, never>;
44
50
  }
@@ -10,4 +10,6 @@ export interface IOrchestratorConfig extends IAppConfig {
10
10
  defaultLlmTimeout: number;
11
11
  defaultLlmRetries: number;
12
12
  defaultLlmMaxTokens: number;
13
+ defaultRagModel: string;
14
+ defaultRagProvider: string;
13
15
  }
@@ -13,4 +13,6 @@ export interface IAgentCreateDto extends IBaseDbCreateDto {
13
13
  llmRetries?: number;
14
14
  llmUserPromptHistoryId?: number;
15
15
  llmSystemPromptHistoryId?: number;
16
+ ragModel?: string;
17
+ ragProvider?: string;
16
18
  }
@@ -21,4 +21,6 @@ export interface IAgentResponseDto extends IBaseDbResponseDto {
21
21
  llmUserPromptHistory?: IPromptHistoryResponseDto;
22
22
  llmSystemPromptHistoryId?: number;
23
23
  llmSystemPromptHistory?: IPromptHistoryResponseDto;
24
+ ragModel?: string;
25
+ ragProvider?: string;
24
26
  }
@@ -12,4 +12,6 @@ export interface IAgentUpdateDto extends IBaseDbUpdateDto {
12
12
  llmRetries?: number;
13
13
  llmUserPromptHistoryId?: number;
14
14
  llmSystemPromptHistoryId?: number;
15
+ ragModel?: string;
16
+ ragProvider?: string;
15
17
  }
@@ -0,0 +1,4 @@
1
+ export interface IRagInfoDto {
2
+ agentIdentifier: string;
3
+ chatId?: number;
4
+ }
@@ -23,6 +23,8 @@ export declare class Agent extends BaseDbModel {
23
23
  llmUserPromptHistory?: PromptHistory;
24
24
  llmSystemPromptHistoryId?: number;
25
25
  llmSystemPromptHistory?: PromptHistory;
26
+ ragModel?: string;
27
+ ragProvider?: string;
26
28
  propertiesToShow: string[];
27
29
  propertyUINames: Map<string, string>;
28
30
  propertyFilterType: Map<string, EFilterTypes>;
@@ -4,6 +4,7 @@ import { MappedApiError, MappedApiResponseRaw } from '@sftech/ng-shared';
4
4
  import { Observable } from 'rxjs';
5
5
  import { IOrchestratorConfig } from '../configuration/orchestrator-config.interface';
6
6
  import { IOrchestratorRunDto } from '../dtos/orchestrator-run.dto';
7
+ import { IRagInfoDto } from '../dtos/rag-ingest-config.dto';
7
8
  import { AgentRun } from '../models/agent-run.model';
8
9
  import { McpTool } from '../models/mcp-tool.model';
9
10
  import * as i0 from "@angular/core";
@@ -15,6 +16,8 @@ export declare class OrchestratorService {
15
16
  runAgent(runConfig: IOrchestratorRunDto): Observable<MappedApiError | number>;
16
17
  observeAgentRun(agentRunId: number): Observable<MappedApiError | AgentRun>;
17
18
  getTools(): Observable<MappedApiResponseRaw<McpTool[]>>;
19
+ storeRagDocuments(files: File[], ragInfo: IRagInfoDto): Observable<MappedApiError | boolean>;
20
+ chatAgent(agentRunId: number, message: string): Observable<MappedApiError | number>;
18
21
  static ɵfac: i0.ɵɵFactoryDeclaration<OrchestratorService, never>;
19
22
  static ɵprov: i0.ɵɵInjectableDeclaration<OrchestratorService>;
20
23
  }
@@ -0,0 +1,2 @@
1
+ import { ValidatorFn } from '@angular/forms';
2
+ export declare const ragPairValidator: () => ValidatorFn;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sftech/ng-orchestrator",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.0",
6
6
  "@angular/core": "^19.2.0",
@@ -1,106 +0,0 @@
1
- import * as i1 from '@angular/common/http';
2
- import * as i0 from '@angular/core';
3
- import { Inject, Injectable } from '@angular/core';
4
- import { BaseDbModel, EFilterTypes, BaseDbApiService } from '@sftech/ng-shared';
5
- import { O as ORCHESTRATOR_CONFIGURATION } from './sftech-ng-orchestrator-sftech-ng-orchestrator-CJMmRHC-.mjs';
6
- import { P as Prompt } from './sftech-ng-orchestrator-prompt.model-DhASegzq.mjs';
7
-
8
- class Agent extends BaseDbModel {
9
- identifier;
10
- description;
11
- name;
12
- connectorUrl;
13
- isGeneric;
14
- answerSpecification;
15
- tools;
16
- llmProvider;
17
- llmModel;
18
- llmTemperature;
19
- llmTimeout;
20
- llmRetries;
21
- llmUserPromptId;
22
- llmUserPrompt;
23
- llmSystemPromptId;
24
- llmSystemPrompt;
25
- llmUserPromptHistoryId;
26
- llmUserPromptHistory;
27
- llmSystemPromptHistoryId;
28
- llmSystemPromptHistory;
29
- propertiesToShow = ['name', 'identifier', 'description'];
30
- propertyUINames = new Map([
31
- ['name', 'Name'],
32
- ['description', 'Beschreibung'],
33
- ['identifier', 'identifier'],
34
- ['llmUserPromptTemplateIdentifier', 'User Prompt Identifier'],
35
- ['connectorUrl', 'Connector-Url'],
36
- ['answerSpecification', 'Answer Specification'],
37
- ['isGeneric', 'Benutzerdefinierter Agent'],
38
- ['tools', 'LLM-Tools'],
39
- ['llmProvider', 'LLM-Provider'],
40
- ['llmModel', 'LLM-Model'],
41
- ['llmTemperature', 'LLM-Temperature'],
42
- ['llmTimeout', 'LLM-Timeout'],
43
- ['llmRetries', 'LLM-Retries'],
44
- ['llmUserPromptId', 'User Prompt ID'],
45
- ['llmUserPrompt', 'User Prompt Template'],
46
- ['llmSystemPromptId', 'System Prompt ID'],
47
- ['llmSystemPrompt', 'System Prompt Template'],
48
- ]);
49
- propertyFilterType = new Map([
50
- ['name', EFilterTypes.STRING],
51
- ['template', EFilterTypes.STRING],
52
- ['identifier', EFilterTypes.STRING],
53
- ]);
54
- fromDto(dto) {
55
- const model = new Agent();
56
- model.id = dto.id;
57
- model.createdAt = new Date(dto.createdAt);
58
- model.name = dto.name;
59
- model.identifier = dto.identifier;
60
- model.description = dto.description;
61
- model.connectorUrl = dto.connectorUrl;
62
- model.isGeneric = dto.isGeneric;
63
- model.answerSpecification = dto.answerSpecification;
64
- model.tools = dto.tools ? dto.tools : [];
65
- model.llmProvider = dto.llmProvider;
66
- model.llmModel = dto.llmModel;
67
- model.llmTemperature = dto.llmTemperature;
68
- model.llmTimeout = dto.llmTimeout;
69
- model.llmRetries = dto.llmRetries;
70
- model.llmUserPrompt = dto.llmUserPrompt ? Prompt.fromDto(dto.llmUserPrompt) : undefined;
71
- model.llmUserPromptId = dto.llmUserPromptId;
72
- model.llmSystemPrompt = dto.llmSystemPrompt ? Prompt.fromDto(dto.llmSystemPrompt) : undefined;
73
- model.llmSystemPromptId = dto.llmSystemPromptId;
74
- model.llmUserPromptHistory = dto.llmUserPromptHistory ? Prompt.fromDto(dto.llmUserPromptHistory) : undefined;
75
- model.llmUserPromptHistoryId = dto.llmUserPromptHistoryId;
76
- model.llmSystemPromptHistory = dto.llmSystemPromptHistory ? Prompt.fromDto(dto.llmSystemPromptHistory) : undefined;
77
- model.llmSystemPromptHistoryId = dto.llmSystemPromptHistoryId;
78
- return model;
79
- }
80
- }
81
-
82
- class AgentService extends BaseDbApiService {
83
- http;
84
- config;
85
- constructor(http, config) {
86
- super(http, config);
87
- this.http = http;
88
- this.config = config;
89
- this.url = `${this.config.orchestratorDbUrl}/agents`;
90
- }
91
- getNewModel() {
92
- return new Agent();
93
- }
94
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AgentService, deps: [{ token: i1.HttpClient }, { token: ORCHESTRATOR_CONFIGURATION }], target: i0.ɵɵFactoryTarget.Injectable });
95
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AgentService, providedIn: 'root' });
96
- }
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AgentService, decorators: [{
98
- type: Injectable,
99
- args: [{ providedIn: 'root' }]
100
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
101
- type: Inject,
102
- args: [ORCHESTRATOR_CONFIGURATION]
103
- }] }] });
104
-
105
- export { AgentService as A, Agent as a };
106
- //# sourceMappingURL=sftech-ng-orchestrator-agent.service-DPJMw8a4.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sftech-ng-orchestrator-agent.service-DPJMw8a4.mjs","sources":["../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/models/agent.model.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/core/service/agent.service.ts"],"sourcesContent":["import { BaseDbModel, EFilterTypes, IBaseDbResponseDto } from '@sftech/ng-shared';\r\nimport { IAgentResponseDto } from '../dtos/agent-response.dto';\r\nimport { IPromptHistoryResponseDto } from '../dtos/prompt-history-response.dto';\r\nimport { PromptHistory } from './prompt-history.model';\r\nimport { Prompt } from './prompt.model';\r\n\r\nexport class Agent extends BaseDbModel {\r\n public identifier!: string;\r\n\r\n public description!: string;\r\n\r\n public name!: string;\r\n\r\n public connectorUrl!: string;\r\n\r\n public isGeneric!: boolean;\r\n\r\n public answerSpecification!: string;\r\n\r\n public tools!: string[];\r\n\r\n public llmProvider!: string;\r\n\r\n public llmModel!: string;\r\n\r\n public llmTemperature!: number;\r\n\r\n public llmTimeout?: number;\r\n\r\n public llmRetries?: number;\r\n\r\n public llmUserPromptId!: number;\r\n\r\n public llmUserPrompt?: Prompt;\r\n\r\n public llmSystemPromptId!: number;\r\n\r\n public llmSystemPrompt?: Prompt;\r\n\r\n public llmUserPromptHistoryId?: number;\r\n\r\n public llmUserPromptHistory?: PromptHistory;\r\n\r\n public llmSystemPromptHistoryId?: number;\r\n\r\n public llmSystemPromptHistory?: PromptHistory;\r\n\r\n public override propertiesToShow = ['name', 'identifier', 'description'];\r\n\r\n public override propertyUINames = new Map<string, string>([\r\n ['name', 'Name'],\r\n ['description', 'Beschreibung'],\r\n ['identifier', 'identifier'],\r\n ['llmUserPromptTemplateIdentifier', 'User Prompt Identifier'],\r\n ['connectorUrl', 'Connector-Url'],\r\n ['answerSpecification', 'Answer Specification'],\r\n ['isGeneric', 'Benutzerdefinierter Agent'],\r\n ['tools', 'LLM-Tools'],\r\n ['llmProvider', 'LLM-Provider'],\r\n ['llmModel', 'LLM-Model'],\r\n ['llmTemperature', 'LLM-Temperature'],\r\n ['llmTimeout', 'LLM-Timeout'],\r\n ['llmRetries', 'LLM-Retries'],\r\n ['llmUserPromptId', 'User Prompt ID'],\r\n ['llmUserPrompt', 'User Prompt Template'],\r\n ['llmSystemPromptId', 'System Prompt ID'],\r\n ['llmSystemPrompt', 'System Prompt Template'],\r\n ]);\r\n\r\n public override propertyFilterType = new Map<string, EFilterTypes>([\r\n ['name', EFilterTypes.STRING],\r\n ['template', EFilterTypes.STRING],\r\n ['identifier', EFilterTypes.STRING],\r\n ]);\r\n\r\n public override fromDto(dto: IAgentResponseDto): Agent {\r\n const model = new Agent();\r\n model.id = dto.id;\r\n model.createdAt = new Date(dto.createdAt);\r\n model.name = dto.name;\r\n model.identifier = dto.identifier;\r\n model.description = dto.description;\r\n model.connectorUrl = dto.connectorUrl;\r\n model.isGeneric = dto.isGeneric;\r\n model.answerSpecification = dto.answerSpecification;\r\n model.tools = dto.tools ? dto.tools : [];\r\n model.llmProvider = dto.llmProvider;\r\n model.llmModel = dto.llmModel;\r\n model.llmTemperature = dto.llmTemperature;\r\n model.llmTimeout = dto.llmTimeout;\r\n model.llmRetries = dto.llmRetries;\r\n model.llmUserPrompt = dto.llmUserPrompt ? (Prompt.fromDto(dto.llmUserPrompt) as Prompt) : undefined;\r\n model.llmUserPromptId = dto.llmUserPromptId;\r\n model.llmSystemPrompt = dto.llmSystemPrompt ? (Prompt.fromDto(dto.llmSystemPrompt) as Prompt) : undefined;\r\n model.llmSystemPromptId = dto.llmSystemPromptId;\r\n model.llmUserPromptHistory = dto.llmUserPromptHistory ? (Prompt.fromDto(dto.llmUserPromptHistory) as PromptHistory) : undefined;\r\n model.llmUserPromptHistoryId = dto.llmUserPromptHistoryId;\r\n model.llmSystemPromptHistory = dto.llmSystemPromptHistory ? (Prompt.fromDto(dto.llmSystemPromptHistory) as PromptHistory) : undefined;\r\n model.llmSystemPromptHistoryId = dto.llmSystemPromptHistoryId;\r\n return model;\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { BaseDbApiService } from '@sftech/ng-shared';\r\nimport { IOrchestratorConfig } from '../configuration/orchestrator-config.interface';\r\nimport { ORCHESTRATOR_CONFIGURATION } from '../configuration/orchestrator-configuration.token';\r\nimport { IAgentCreateDto } from '../dtos/agent-create-request.dto';\r\nimport { IAgentResponseDto } from '../dtos/agent-response.dto';\r\nimport { IAgentUpdateDto } from '../dtos/agent-update-request.dto';\r\nimport { Agent } from '../models/agent.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AgentService extends BaseDbApiService<Agent, IAgentCreateDto, IAgentUpdateDto, IAgentResponseDto> {\r\n constructor(\r\n protected override readonly http: HttpClient,\r\n @Inject(ORCHESTRATOR_CONFIGURATION) protected override readonly config: IOrchestratorConfig,\r\n ) {\r\n super(http, config);\r\n this.url = `${this.config.orchestratorDbUrl}/agents`;\r\n }\r\n\r\n protected getNewModel(): Agent {\r\n return new Agent();\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sftech-ng-orchestrator-agents.routes-B9GSWOIz.mjs","sources":["../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/agents/agents.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/agents/agents.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/agents/components/agent/agent-display/prompt-helper-modal/prompt-helper-modal.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/agents/components/agent/agent-display/prompt-helper-modal/prompt-helper-modal.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/agents/components/agent/agent-display/agent-display.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/agents/components/agent/agent-display/agent-display.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/agents/components/agent/agents-list/agents-list.component.ts","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/agents/components/agent/agents-list/agents-list.component.html","../../../../libs/ng-orchestrator/src/lib/ng-orchestrator/admin/agents/agents.routes.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\nimport { RouterOutlet } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'sftech-agents',\r\n imports: [RouterOutlet],\r\n templateUrl: './agents.component.html',\r\n styleUrl: './agents.component.css',\r\n})\r\nexport class AgentsComponent {}\r\n","<router-outlet></router-outlet>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { BaseDialogComponent } from '@sftech/ng-shared';\r\nimport { AutoFocus } from 'primeng/autofocus';\r\nimport { Button } from 'primeng/button';\r\nimport { Fieldset } from 'primeng/fieldset';\r\nimport { FloatLabel } from 'primeng/floatlabel';\r\nimport { Popover } from 'primeng/popover';\r\nimport { Textarea } from 'primeng/textarea';\r\nimport { Subscription, map } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'sftech-prompt-helper-modal',\r\n imports: [BaseDialogComponent, ReactiveFormsModule, Fieldset, FloatLabel, Textarea, AutoFocus, Button, FaIconComponent, Popover, NgTemplateOutlet],\r\n templateUrl: './prompt-helper-modal.component.html',\r\n styleUrl: './prompt-helper-modal.component.css',\r\n})\r\nexport class PromptHelperModalComponent extends BaseDialogComponent implements OnInit, OnDestroy {\r\n private _subscriptions: Subscription[] = [];\r\n\r\n protected systemPromptForm: FormGroup = new FormGroup({\r\n systemPromptText: new FormControl({ value: '', disabled: true }),\r\n roleSpecification: new FormControl(''),\r\n targetGroupSpecification: new FormControl(''),\r\n inputSpecification: new FormControl(''),\r\n exampleSpecification: new FormControl(''),\r\n additionalRulesSpecification: new FormControl(''),\r\n });\r\n\r\n ngOnInit(): void {\r\n this._subscriptions.push(\r\n this.systemPromptForm.valueChanges\r\n .pipe(\r\n map((value) => {\r\n let systemPromptText = '';\r\n if (value.roleSpecification) {\r\n systemPromptText += `Role:\\n${value.roleSpecification}\\n\\n`;\r\n }\r\n if (value.targetGroupSpecification) {\r\n systemPromptText += `Target Group:\\n${value.targetGroupSpecification}\\n\\n`;\r\n }\r\n if (value.inputSpecification) {\r\n systemPromptText += `Input:\\n${value.inputSpecification}\\n\\n`;\r\n }\r\n if (value.exampleSpecification) {\r\n systemPromptText += `Example:\\n${value.exampleSpecification}\\n\\n`;\r\n }\r\n if (value.additionalRulesSpecification) {\r\n systemPromptText += `Additional Rules:\\n${value.additionalRulesSpecification}\\n\\n`;\r\n }\r\n this.systemPromptForm.get('systemPromptText')?.setValue(systemPromptText);\r\n }),\r\n )\r\n .subscribe(),\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._subscriptions.forEach((subscription) => subscription.unsubscribe());\r\n }\r\n}\r\n","<sftech-base-dialog [hasHeader]=\"true\" (closed)=\"close()\">\r\n <ng-template #header>\r\n <div class=\"flex justify-between\">\r\n <h2 class=\"text-xl font-semibold\">\r\n Hilfe zur Prompt-Erstellung\r\n </h2>\r\n </div>\r\n </ng-template>\r\n <ng-template #body>\r\n <form [formGroup]=\"systemPromptForm\" [pAutoFocus]=\"true\">\r\n <p-fieldset legend=\"Prompt-Elemente\">\r\n <div class=\"grid grid-cols-2 gap-2\">\r\n <p-floatlabel variant=\"in\" class=\"w-full mt-2\">\r\n <textarea id=\"systemPromptText\" formControlName=\"systemPromptText\" pTextarea\r\n class=\"w-full h-full\"\r\n [class.ng-invalid]=\"systemPromptForm.get('systemPromptText')?.dirty && systemPromptForm.get('systemPromptText')?.invalid\"></textarea>\r\n <label for=\"systemPromptText\">Mein Prompt</label>\r\n </p-floatlabel>\r\n <div>\r\n <ng-container [ngTemplateOutlet]=\"textField\"\r\n [ngTemplateOutletContext]=\"{ controlName: 'roleSpecification', popover: roleSpecificationPO, label: 'KI-Rolle' }\"></ng-container>\r\n <ng-container [ngTemplateOutlet]=\"textField\"\r\n [ngTemplateOutletContext]=\"{ controlName: 'targetGroupSpecification', popover: targetGroupSpecificationPO, label: 'Zielgruppe' }\"></ng-container>\r\n <ng-container [ngTemplateOutlet]=\"textField\"\r\n [ngTemplateOutletContext]=\"{ controlName: 'inputSpecification', popover: inputSpecificationPO, label: 'Eingabe' }\"></ng-container>\r\n <ng-container [ngTemplateOutlet]=\"textField\"\r\n [ngTemplateOutletContext]=\"{ controlName: 'exampleSpecification', popover: exampleSpecificationPO, label: 'Eingabe-Beispiel' }\"></ng-container>\r\n <ng-container [ngTemplateOutlet]=\"textField\"\r\n [ngTemplateOutletContext]=\"{ controlName: 'additionalRulesSpecification', popover: additionalRulesSpecificationPO, label: 'Zusätzliche Informationen' }\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n </p-fieldset>\r\n <div class=\"flex justify-end mt-2 w-full\">\r\n <p-button label=\"übernehmen\" type=\"submit\" [disabled]=\"!systemPromptForm.valid\"\r\n (click)=\"ref.close(systemPromptForm.get('systemPromptText')?.value ?? '')\"></p-button>\r\n </div>\r\n\r\n\r\n <ng-template #textField let-controlName=\"controlName\" let-popover=\"popover\" let-label=\"label\">\r\n <label [for]=\"controlName\" class=\"font-bold me-2\">{{ label }}</label>\r\n <fa-icon [icon]=\"iconProvider.help\" class=\"rounded-[50%] bg-primary text-white\" [fixedWidth]=\"true\"\r\n (click)=\"popover.toggle($event)\"></fa-icon>\r\n <textarea rows=\"4\" [id]=\"controlName\" [formControlName]=\"controlName\"\r\n pTextarea class=\"w-full mt-1\"\r\n [class.ng-invalid]=\"systemPromptForm.get(controlName)?.dirty && systemPromptForm.get(controlName)?.invalid\"></textarea>\r\n </ng-template>\r\n\r\n <p-popover #roleSpecificationPO styleClass=\"bg-gray-500\">\r\n <ng-container\r\n *ngTemplateOutlet=\"popoverStyle; context: { po: roleSpecificationPO, controlName: 'roleSpecification', description: 'Die Rolle der KI beschreibt, wie sie sich verhalten soll. Die Rolle hilft der KI, den Kontext zu verstehen und angemessen zu antworten.', example: 'Du bist ein kompetenter, hilfreicher Assistent mit Fachwissen in Technik, Text, Organisation und Problemlösung. Du analysierst präzise, erklärst klar und gibst fundierte, praktische Antworten.' }\"></ng-container>\r\n </p-popover>\r\n\r\n <p-popover #targetGroupSpecificationPO styleClass=\"bg-gray-500\">\r\n <ng-container\r\n *ngTemplateOutlet=\"popoverStyle; context: { po: targetGroupSpecificationPO, controlName: 'targetGroupSpecification', description: 'Die Zielgruppe beschreibt, für wen die KI antworten soll. Sie hilft der KI, den Ton und die Komplexität der Antworten anzupassen.', example: 'Sprich mit einer Person, die in ihrem Fachgebiet erfahren oder zumindest mit den Grundbegriffen vertraut ist. Du darfst Fachsprache verwenden, aber kein unnötiges Theoriewissen voraussetzen.' }\"></ng-container>\r\n </p-popover>\r\n <p-popover #inputSpecificationPO styleClass=\"bg-gray-500\">\r\n <ng-container\r\n *ngTemplateOutlet=\"popoverStyle; context: { po: inputSpecificationPO, controlName: 'inputSpecification', description: 'Die Eingabe beschreibt, wie das vom Anwender eingegebene aussieht. Sie hilft der KI, das vom Anwender übergebene zu verstehen.', example: 'z.B. Du erhältst eine Frage oder ein Problem, das du lösen sollst. Analysiere es gründlich und gib eine klare, präzise Antwort. Mein Input ist ein JSON: {&quot;frage&quot;: &quot;Fragen, die du beantworten sollst&quot;}' }\"></ng-container>\r\n </p-popover>\r\n\r\n <p-popover #exampleSpecificationPO styleClass=\"bg-gray-500\">\r\n <ng-container\r\n *ngTemplateOutlet=\"popoverStyle; context: { po: exampleSpecificationPO, controlName: 'exampleSpecification', description: 'Das Eingabe-Beispiel zeigt der KI ein konkretes Beispiel, wie die Anfragen aussehen können. Dies hilft der KI, das erwartete Format besser zu verstehen.', example: 'Beispiel {&quot;frage&quot;: &quot;Wie kann ich meine Produktivität steigern?&quot;}' }\"></ng-container>\r\n </p-popover>\r\n\r\n <p-popover #additionalRulesSpecificationPO styleClass=\"bg-gray-500\">\r\n <ng-container\r\n *ngTemplateOutlet=\"popoverStyle; context: { po: additionalRulesSpecificationPO, controlName: 'additionalRulesSpecification', description: 'Zusätzliche Informationen oder Regeln, die die KI bei der Beantwortung beachten soll. Diese können Einschränkungen, spezielle Anforderungen oder wichtige Hinweise enthalten.', example: 'Du darfst keine persönlichen Daten sammeln oder speichern. Deine Antworten müssen respektvoll und professionell sein. Vermeide es, persönliche Meinungen zu äußern.' }\"></ng-container>\r\n </p-popover>\r\n\r\n <ng-template #popoverStyle let-po='po' let-formControlName='controlName' let-description=\"description\"\r\n let-example=\"example\">\r\n <div class=\"p-3 w-200\">\r\n <p><span class=\"font-bold\">Beschreibung:</span></p>\r\n <p>{{ description }}</p>\r\n <p class=\"mt-4\"><span class=\"font-bold\">Beispiel:</span></p>\r\n <p>{{ example }}</p>\r\n <p class=\"mt-2\">\r\n <p-button (onClick)=\"systemPromptForm.get(formControlName)?.setValue(example); po.toggle($event)\">\r\n übernehmen\r\n </p-button>\r\n </p>\r\n </div>\r\n </ng-template>\r\n\r\n </form>\r\n </ng-template>\r\n <ng-template #footer>\r\n\r\n </ng-template>\r\n</sftech-base-dialog>\r\n","import { Component, OnInit, inject, signal } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { BaseDialogComponent, BaseDisplayComponent, MappedApiError } from '@sftech/ng-shared';\r\nimport { AutoFocus } from 'primeng/autofocus';\r\nimport { Button } from 'primeng/button';\r\nimport { DatePicker } from 'primeng/datepicker';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { Fieldset } from 'primeng/fieldset';\r\nimport { FloatLabel } from 'primeng/floatlabel';\r\nimport { InputText } from 'primeng/inputtext';\r\nimport { MultiSelect } from 'primeng/multiselect';\r\nimport { Textarea } from 'primeng/textarea';\r\nimport { ToggleButtonModule } from 'primeng/togglebutton';\r\nimport { IOrchestratorConfig } from '../../../../../core/configuration/orchestrator-config.interface';\r\nimport { ORCHESTRATOR_CONFIGURATION } from '../../../../../core/configuration/orchestrator-configuration.token';\r\nimport { IAgentCreateDto } from '../../../../../core/dtos/agent-create-request.dto';\r\nimport { IAgentResponseDto } from '../../../../../core/dtos/agent-response.dto';\r\nimport { IAgentUpdateDto } from '../../../../../core/dtos/agent-update-request.dto';\r\nimport { Agent } from '../../../../../core/models/agent.model';\r\nimport { McpTool } from '../../../../../core/models/mcp-tool.model';\r\nimport { AgentService } from '../../../../../core/service/agent.service';\r\nimport { OrchestratorService } from '../../../../../core/service/orchestrator.service';\r\nimport { PromptDisplayComponent } from '../../../../prompts/components/prompt/prompt-display/prompt-display.component';\r\nimport { PromptHelperModalComponent } from './prompt-helper-modal/prompt-helper-modal.component';\r\n\r\n@Component({\r\n selector: 'sftech-prompt-display',\r\n imports: [ReactiveFormsModule, InputText, AutoFocus, FloatLabel, DatePicker, Textarea, Button, BaseDialogComponent, Fieldset, MultiSelect, ToggleButtonModule, FaIconComponent],\r\n providers: [DialogService],\r\n templateUrl: './agent-display.component.html',\r\n styleUrl: './agent-display.component.css',\r\n})\r\nexport class AgentDisplayComponent extends BaseDisplayComponent<Agent, IAgentUpdateDto, IAgentUpdateDto, IAgentResponseDto> implements OnInit {\r\n protected override _repo = inject(AgentService);\r\n protected override _route = 'agents';\r\n protected _orchestratorService: OrchestratorService = inject(OrchestratorService);\r\n\r\n public tools = signal<McpTool[] | undefined>(undefined);\r\n\r\n protected dialog = inject(DialogService);\r\n\r\n private _options: IOrchestratorConfig = inject(ORCHESTRATOR_CONFIGURATION);\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n this._orchestratorService.getTools().subscribe((res) => {\r\n if (res instanceof MappedApiError) {\r\n this.tools.set([]);\r\n return;\r\n }\r\n this.tools.set(res.data);\r\n });\r\n }\r\n\r\n protected override initializeForm(): FormGroup {\r\n return new FormGroup({\r\n id: new FormControl({ value: this.model()!.id, disabled: true }),\r\n createdAt: new FormControl({ value: this.model()!.createdAt, disabled: true }),\r\n identifier: new FormControl({ value: this.model()!.identifier, disabled: true }),\r\n llmUserPrompt: new FormControl({ value: this.model()!.llmUserPrompt, disabled: true }),\r\n llmSystemPrompt: new FormControl({ value: this.model()!.llmSystemPrompt, disabled: true }),\r\n description: new FormControl({ value: this.model()!.description, disabled: !this.canEdit }),\r\n connectorUrl: new FormControl({ value: this.model()!.connectorUrl, disabled: !this.canEdit }),\r\n systemPromptText: new FormControl(''),\r\n answerSpecification: new FormControl({ value: this.model()!.answerSpecification, disabled: !this.canEdit || !this.model()!.isGeneric }),\r\n tools: new FormControl({ value: this.model()!.tools, disabled: !this.canEdit }),\r\n llmProvider: new FormControl({ value: this.model()!.llmProvider, disabled: !this.canEdit }),\r\n llmModel: new FormControl({ value: this.model()!.llmModel, disabled: !this.canEdit }),\r\n llmTemperature: new FormControl({ value: this.model()!.llmTemperature, disabled: !this.canEdit }),\r\n llmTimeout: new FormControl({ value: this.model()!.llmTimeout, disabled: !this.canEdit }),\r\n llmRetries: new FormControl({ value: this.model()!.llmRetries, disabled: !this.canEdit }),\r\n name: new FormControl(this.model()?.name),\r\n });\r\n }\r\n protected override getNewModel(): Agent {\r\n const agent = new Agent();\r\n agent.connectorUrl = this._options.defaultConnectorUrl;\r\n agent.isGeneric = true;\r\n agent.answerSpecification = this._options.defaultAnswerSpecification;\r\n agent.llmProvider = this._options.defaultLlmProvider;\r\n agent.llmModel = this._options.defaultLlmModel;\r\n agent.llmTemperature = this._options.defaultLlmTemperature;\r\n agent.llmTimeout = this._options.defaultLlmTimeout;\r\n agent.llmRetries = this._options.defaultLlmRetries;\r\n return agent;\r\n }\r\n protected override mapFormToUpdateDto(): IAgentUpdateDto {\r\n return {\r\n description: this.form.get('description')?.value,\r\n connectorUrl: this.form.get('connectorUrl')?.value,\r\n tools: this.form.get('tools')?.value,\r\n answerSpecification: this.form.get('answerSpecification')?.value,\r\n llmProvider: this.form.get('llmProvider')?.value,\r\n llmModel: this.form.get('llmModel')?.value,\r\n llmTemperature: this.form.get('llmTemperature')?.value,\r\n llmTimeout: this.form.get('llmTimeout')?.value,\r\n llmRetries: this.form.get('llmRetries')?.value,\r\n name: this.form.get('name')?.value,\r\n };\r\n }\r\n protected override mapFormToCreateDto(): IAgentCreateDto {\r\n return {\r\n description: this.form.get('description')?.value,\r\n connectorUrl: this.form.get('connectorUrl')?.value,\r\n systemPromptText: this.form.get('systemPromptText')?.value,\r\n answerSpecification: this.form.get('answerSpecification')?.value,\r\n tools: this.form.get('tools')?.value,\r\n llmProvider: this.form.get('llmProvider')?.value,\r\n llmModel: this.form.get('llmModel')?.value,\r\n llmTemperature: this.form.get('llmTemperature')?.value,\r\n llmTimeout: this.form.get('llmTimeout')?.value,\r\n llmRetries: this.form.get('llmRetries')?.value,\r\n name: this.form.get('name')?.value,\r\n };\r\n }\r\n\r\n public openPromptModal(promptId: number | undefined): void {\r\n if (!promptId) {\r\n return;\r\n }\r\n this.dialog.open(PromptDisplayComponent, { inputValues: { id: promptId, canEdit: true, openedAsModal: true }, focusOnShow: false, modal: true, dismissableMask: true, width: '40%', contentStyle: { overflow: 'auto' } });\r\n }\r\n\r\n public openPromptHelper() {\r\n const modalRef = this.dialog.open(PromptHelperModalComponent, { modal: true, dismissableMask: true, width: '60%', contentStyle: { overflow: 'auto' } });\r\n modalRef.onClose.subscribe((result: string | undefined) => {\r\n if (!result) {\r\n return;\r\n }\r\n this.form.get('systemPromptText')?.setValue(result);\r\n });\r\n }\r\n}\r\n","<sftech-base-dialog (closed)=\"close()\">\r\n <ng-template #body>\r\n <div class=\"h-full overflow-auto\">\r\n @if (model()) {\r\n <form [formGroup]=\"form\" [pAutoFocus]=\"true\">\r\n <p-fieldset legend=\"Stammdaten\" class=\"bg-primary-50!\">\r\n @if (!isNew()) {\r\n\r\n <div class=\"grid grid-cols-3 gap-2\">\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"id\" formControlName=\"id\" pInputText class=\"w-full\"/>\r\n <label for=\"id\">{{ this.model()!.getUiNameForProperty('id') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"identifier\" formControlName=\"identifier\" pInputText\r\n class=\"w-full\"\r\n [class.ng-invalid]=\"form.get('identifier')?.dirty && form.get('identifier')?.invalid\"/>\r\n <label for=\"identifier\">{{ this.model()!.getUiNameForProperty('identifier') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <p-datePicker id=\"createdAt\" formControlName=\"createdAt\" dateFormat=\"dd.mm.yy\"\r\n [showTime]=\"true\"\r\n [hourFormat]=\"'24'\" [style]=\"{'width': '100%'}\"\r\n [class.ng-invalid]=\"form.get('createdAt')?.dirty && form.get('createdAt')?.invalid\"></p-datePicker>\r\n <label for=\"createdAt\">{{ this.model()!.getUiNameForProperty('createdAt') }}</label>\r\n </p-floatlabel>\r\n </div>\r\n }\r\n\r\n <p-floatlabel variant=\"in\" class=\"w-full mt-2\">\r\n <input type=\"text\" id=\"name\" formControlName=\"name\" pTextarea class=\"w-full\"\r\n [class.ng-invalid]=\"form.get('name')?.dirty && form.get('name')?.invalid\"/>\r\n <label for=\"name\">{{ this.model()!.getUiNameForProperty('name') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full mt-2\">\r\n <textarea rows=\"2\" id=\"description\" formControlName=\"description\" pTextarea class=\"w-full\"\r\n [class.ng-invalid]=\"form.get('description')?.dirty && form.get('description')?.invalid\"></textarea>\r\n <label for=\"description\">{{ this.model()!.getUiNameForProperty('description') }}</label>\r\n </p-floatlabel>\r\n </p-fieldset>\r\n <hr class=\"my-10 text-primary-50\"/>\r\n <p-fieldset legend=\"Prompts\">\r\n @if (!isNew()) {\r\n <div class=\"grid grid-cols-2 mb-2 gap-2\">\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"llmUserPrompt\"\r\n (click)=\"openPromptModal(model()!.llmUserPromptId)\"\r\n [value]=\"model()!.llmUserPrompt?.identifier\" pInputText\r\n class=\"w-full cursor-pointer\"/>\r\n <label for=\"llmUserPrompt\">{{ this.model()!.getUiNameForProperty('llmUserPrompt') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"llmSystemPrompt\"\r\n (click)=\"openPromptModal(model()!.llmSystemPromptId)\"\r\n [value]=\"model()!.llmSystemPrompt?.identifier\" pInputText\r\n class=\"w-full cursor-pointer\"/>\r\n <label for=\"llmSystemPrompt\">{{ this.model()!.getUiNameForProperty('llmSystemPrompt') }}</label>\r\n </p-floatlabel>\r\n </div>\r\n } @else {\r\n <span class=\"me-2\">Ich möchte Unterstützung bei der Prompt-Erstellung</span>\r\n <p-button [rounded]=\"true\" (onClick)=\"openPromptHelper()\">\r\n <fa-icon [icon]=\"iconProvider.help\" [fixedWidth]=\"true\"></fa-icon>\r\n </p-button>\r\n <p-floatlabel variant=\"in\" class=\"w-full mb-2\">\r\n <textarea rows=\"10\" id=\"systemPromptText\" formControlName=\"systemPromptText\" pTextarea\r\n class=\"w-full\"\r\n [class.ng-invalid]=\"form.get('systemPromptText')?.dirty && form.get('systemPromptText')?.invalid\"></textarea>\r\n <label for=\"systemPromptText\">{{ this.model()!.getUiNameForProperty('systemPromptText') }}</label>\r\n </p-floatlabel>\r\n }\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <textarea rows=\"5\" id=\"answerSpecification\" formControlName=\"answerSpecification\" pTextarea\r\n class=\"w-full\"\r\n [class.ng-invalid]=\"form.get('answerSpecification')?.dirty && form.get('answerSpecification')?.invalid\"></textarea>\r\n <label for=\"answerSpecification\">{{ this.model()!.getUiNameForProperty('answerSpecification') }}</label>\r\n </p-floatlabel>\r\n </p-fieldset>\r\n <hr class=\"my-10 text-primary-50\"/>\r\n <p-fieldset legend=\"LLM-Tools\">\r\n <div class=\"grid grid-cols-3 mb-2 gap-2\">\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <p-multiselect id=\"tools\" [options]=\"tools()\" [loading]=\"!tools()\"\r\n appendTo=\"body\"\r\n formControlName=\"tools\"\r\n optionLabel=\"name\"\r\n optionValue=\"identifier\" styleClass=\"w-full md:w-80\" display=\"chip\">\r\n <ng-template let-tool #item>\r\n <div class=\"flex items-center gap-2\">\r\n <div>{{ tool.name }}</div>\r\n </div>\r\n </ng-template>\r\n <ng-template #dropdownicon>\r\n <i class=\"pi pi-map\"></i>\r\n </ng-template>\r\n <ng-template #header>\r\n <div class=\"font-medium px-3 py-2\">Verfügbare Tools</div>\r\n </ng-template>\r\n </p-multiselect>\r\n <label for=\"tools\">Tools</label>\r\n </p-floatlabel>\r\n </div>\r\n </p-fieldset>\r\n <hr class=\"my-10 text-primary-50\"/>\r\n\r\n <p-fieldset legend=\"LLM-Konfiguration\" [toggleable]=\"true\" [collapsed]=\"true\">\r\n <div class=\"grid grid-cols-3 mb-2 gap-2\">\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"connectorUrl\"\r\n formControlName=\"connectorUrl\" pInputText class=\"w-full\"\r\n [class.ng-invalid]=\"form.get('connectorUrl')?.dirty && form.get('connectorUrl')?.invalid\"/>\r\n <label for=\"connectorUrl\">{{ this.model()!.getUiNameForProperty('connectorUrl') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"llmProvider\"\r\n formControlName=\"llmProvider\" pInputText class=\"w-full\"\r\n [class.ng-invalid]=\"form.get('llmProvider')?.dirty && form.get('llmProvider')?.invalid\"/>\r\n <label for=\"llmProvider\">{{ this.model()!.getUiNameForProperty('llmProvider') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"text\" id=\"llmModel\"\r\n formControlName=\"llmModel\" pInputText class=\"w-full\"\r\n [class.ng-invalid]=\"form.get('llmModel')?.dirty && form.get('llmModel')?.invalid\"/>\r\n <label for=\"llmModel\">{{ this.model()!.getUiNameForProperty('llmModel') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"number\" id=\"llmTemperature\"\r\n formControlName=\"llmTemperature\" pInputText class=\"w-full\"\r\n [class.ng-invalid]=\"form.get('llmTemperature')?.dirty && form.get('llmTemperature')?.invalid\"/>\r\n <label for=\"llmTemperature\">{{ this.model()!.getUiNameForProperty('llmTemperature') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"number\" id=\"llmTimeout\"\r\n formControlName=\"llmTimeout\" pInputText class=\"w-full\"\r\n [class.ng-invalid]=\"form.get('llmTimeout')?.dirty && form.get('llmTimeout')?.invalid\"/>\r\n <label for=\"llmTimeout\">{{ this.model()!.getUiNameForProperty('llmTimeout') }}</label>\r\n </p-floatlabel>\r\n <p-floatlabel variant=\"in\" class=\"w-full\">\r\n <input type=\"number\" id=\"llmRetries\"\r\n formControlName=\"llmRetries\" pInputText class=\"w-full\"\r\n [class.ng-invalid]=\"form.get('llmRetries')?.dirty && form.get('llmRetries')?.invalid\"/>\r\n <label for=\"llmRetries\">{{ this.model()!.getUiNameForProperty('llmRetries') }}</label>\r\n </p-floatlabel>\r\n </div>\r\n </p-fieldset>\r\n\r\n\r\n </form>\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-template #footer>\r\n <div class=\"flex justify-end mt-2\">\r\n <p-button label=\"Speichern\" (onClick)=\"submitForm()\" (keyup.enter)=\"submitForm()\"\r\n [disabled]=\"!form || !form.dirty\"></p-button>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n</sftech-base-dialog>\r\n","import { Component, inject } from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { BaseListComponent, IconProvider, PaginatorComponent } from '@sftech/ng-shared';\r\nimport { Button } from 'primeng/button';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { Panel } from 'primeng/panel';\r\nimport { TableModule } from 'primeng/table';\r\nimport { IAgentResponseDto } from '../../../../../core/dtos/agent-response.dto';\r\nimport { IAgentUpdateDto } from '../../../../../core/dtos/agent-update-request.dto';\r\nimport { Agent } from '../../../../../core/models/agent.model';\r\nimport { AgentService } from '../../../../../core/service/agent.service';\r\nimport { AgentDisplayComponent } from '../agent-display/agent-display.component';\r\n\r\n@Component({\r\n selector: 'sftech-prompts-list',\r\n imports: [PaginatorComponent, Panel, TableModule, Button, FaIconComponent],\r\n providers: [DialogService],\r\n templateUrl: './agents-list.component.html',\r\n styleUrl: './agents-list.component.css',\r\n})\r\nexport class AgentsListComponent extends BaseListComponent<Agent, IAgentUpdateDto, IAgentUpdateDto, IAgentResponseDto> {\r\n protected _repo = inject(AgentService);\r\n protected _route = 'agents';\r\n protected override _modalComponent = AgentDisplayComponent;\r\n protected override detailModalHeaderText = 'Agent-Details';\r\n\r\n public iconProvider = IconProvider;\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","<h1 class=\"text-primary-900 font-bold text-xl p-2 my-4\">Agent-Übersicht</h1>\r\n\r\n@if (!data()) {\r\n <p-panel [toggleable]=\"false\">\r\n <p class=\"m-0\">\r\n Daten werden geladen...\r\n </p>\r\n </p-panel>\r\n} @else if (data()!.length === 0) {\r\n <p-panel [toggleable]=\"false\">\r\n <p class=\"m-0\">\r\n Es sind keine Prompts vorhanden.\r\n </p>\r\n </p-panel>\r\n} @else if (data()!.length > 0) {\r\n <p-table [value]=\"data()!\"\r\n stripedRows\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n selectionMode=\"single\"\r\n [resizableColumns]=\"true\"\r\n dataKey=\"id\"\r\n >\r\n <ng-template #header>\r\n <tr>\r\n @for(column of data()![0].propertiesToShow; track column) {\r\n <th>{{ data()![0].getUiNameForProperty(column) }}</th>\r\n }\r\n </tr>\r\n </ng-template>\r\n <ng-template #body let-prompt>\r\n <tr (click)=\"openDisplay(prompt.id)\" [pSelectableRow]=\"prompt\">\r\n @for(column of data()![0].propertiesToShow; track column) {\r\n <td style=\"white-space: pre-wrap\">\r\n {{ prompt.getPropertyValue(column) }}\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <sftech-paginator [pagination]=\"odata().pagination\" (odataChanged)=\"updatePagination($event)\"></sftech-paginator>\r\n <div class=\"flex justify-end p-2\">\r\n <p-button (onClick)=\"openDisplay(undefined)\">\r\n <fa-icon [icon]=\"iconProvider.add\"></fa-icon> Neuer Agent\r\n </p-button>\r\n </div>\r\n}\r\n\r\n","import { AgentsComponent } from './agents.component';\r\nimport { AgentsListComponent } from './components/agent/agents-list/agents-list.component';\r\n\r\nexport const agentsRoutes = [\r\n {\r\n path: '',\r\n component: AgentsComponent,\r\n children: [\r\n {\r\n path: '',\r\n component: AgentsListComponent,\r\n },\r\n ],\r\n },\r\n];\r\n"],"names":["i1"],"mappings":"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"}